stm32定时器读数出错

使用stm32f103vet6的定时器3,配置为编码器四倍频模式,读取计数寄存器TIx_CNT的值的时候,如果计数值超过0x80则计数值变成0x3F3F。如果配置自动重装载寄存器的值为0x80,则程序正常运行。板子使用的是新买的野火指南者,换板子测也是一样的结果。

根据您提供的描述,您在使用STM32F103系列的定时器3(TIM3)配置编码器四倍频模式时遇到了问题。当读取计数寄存器(TIx_CNT)的值时,如果计数值超过0x80(128),计数值会变成0x3F3F。
这个问题可能与编码器的计数范围和溢出有关。在四倍频模式下,TIM3的计数范围为0-0xFFFF(16位计数器)。当计数值超过0xFFFF时,它会溢出并重新从0开始。
根据您的描述,当计数值超过0x80时,计数值变成0x3F3F,这可能是由于读取计数寄存器时发生了溢出,并且计数值在溢出后重新开始计数。
为了解决这个问题,您可以尝试以下方法:
1.确保您的编码器连接正确,并且输出信号符合编码器输入的要求。
2.检查您的代码,确保正确配置了TIM3的编码器模式和计数范围。
3.检查是否有其他地方对计数寄存器进行了修改或重置。
4.尝试使用其他计数值进行测试,例如更高或更低的值,以确定是否存在特定的计数范围问题。

  • 这篇博客: STM32F103定时器捕获四个通道输入中的 滤波器设定:定义了TI1输入的采样频率和滤波器长度; 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 采样频率的设定在TIMx_CR1的CKD[1:0]里面设定采样频率和定时器时钟的关系:
    在这里插入图片描述
    滤波器长度表示采样x次CH1的电平若都是设定的高/低电平,才会触发输入捕获中断,可以起到滤波器的作用,滤除脉宽低于x个周期的脉冲信号;具体设置如下:
    在这里插入图片描述