STM32/STM8技术论坛
直播中

陈鲜孰

7年用户 194经验值
私信 关注
[问答]

STM32F4直接使用32位定时器tim2计数

根据st技术手册,F4的定时器tiM2和TIM5是32位定时器,测试发现TIM2->cnt读数只有16位(0-FFFF),求解,有哪里设置不对,还是st有什么问题啊???

回帖(16)

孙婷婷

2018-11-1 08:54:17
手册中描述了CNT就是16位的寄存器。
举报

陈鲜孰

2018-11-1 09:04:33
回复第 2 楼 于2014-04-16 16:43:05发表:
手册中描述了CNT就是16位的寄存器。
 
手册28,29页有说明 是32位的计数器啊
TIM2, TIM3, TIM4, TIM5
The STM32F40x include 4 full-featured general-purpose timers: TIM2, TIM5, TIM3, and
TIM4.The TIM2 and TIM5 timers are based on a 32-bit auto-reload up/downcounter
and a 16-bit prescaler.

 
举报

陈鲜孰

2018-11-1 09:15:41
有使用过STM32F4自带32位定时器的吗,这个不会是个摆设吧
举报

王育来

2018-11-1 09:28:18
TIM2确实是32位计数器,是不是楼主读取的方式不对啊,比如你读取时使用的变量位宽限定不是32位而是16位,就是*(ulong *)和*(uint *)的差别。
举报

谭子薇

2018-11-1 09:46:53
可以去看一下datasheet
举报

陈鲜孰

2018-11-1 09:54:23
 使用324cG-EVAL的例程重新写了代码,终于看到32位的数据跳变了,问题解决,谢谢大师们支持啊
举报

孙婷婷

2018-11-1 10:05:21
我看手册上写的确实是16位的,可以看一下下图:
举报

颜廷波

2018-11-1 10:22:03
是代码问题?
举报

陈鲜孰

2018-11-1 10:36:00
这页是错的 往下接着看
举报

唐瑶

2018-11-1 10:53:58
应该是datasheet寄存器哪里没更新过来。tim2是32位的计数
举报

罗兰君

2018-11-1 11:12:51
确实是32位的,这个我以前用过
举报

李晓莉

2018-11-1 11:23:14
是不是定义时用成了uint_t16,不是uint_t32
举报

崔琳

2018-11-1 11:34:35
TIME2是 32bit的定时器,这个我使用过的,
估计楼主是在读取的时候,定时器读出来的数据被软截断了。导致看到的是低16位的数据
举报

赵勇

2018-11-1 11:46:17
引用: pailisi 发表于 2018-11-1 07:28
 使用324cG-EVAL的例程重新写了代码,终于看到32位的数据跳变了,问题解决,谢谢大师们支持啊

楼主你好,我现在也遇到这个问题了,用JTAG调试的时候发现TIM2的CNT寄存器确实是32位的,有CNT_H和CNT_L之分,但是CNT_H总是0,只有CNT_L在变化。

楼主能把你的配置代码贴出来给我参考一下吗?多谢了!!
举报

张琼

2018-11-1 12:00:01
库里面是这样的
void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter)
{
  /* Check the parameters */
   assert_param(IS_TIM_ALL_PERIPH(TIMx));

  /* Set the Counter Register value */
  TIMx->CNT = Counter;
}
对于不同的定时器,库自己可以区分的,直接调库就可以了,不用纠结
举报

赵勇

2018-11-1 12:19:59
引用: pmet 发表于 2018-11-1 09:34
库里面是这样的
void TIM_SetCounter(TIM_TypeDef* TIMx, uint32_t Counter)
{

我发现TIM2~TIM5的32位计数器真是一个摆设。

你的那个库函数,其实就是给TIM2_CNT寄存器赋值,我试过了,除非给TIM_CNT的高16位赋值,否则,计数器的高16位永远不会有值。赋值之后,计数器会从赋给的值的基础上往上加,直到溢出变为0x0000 0000。而且当高16位从0xFFFF溢出之后,高16位就永远变为0x0,再也不会有值,只是低16位会不断计数。真是好笑。
用JTAG调试看寄存器的值的。如下图所示:



图1、赋值后,计数器从计数的值基础上往上加:




2、溢出之后,高16位永远为0,只有低16位在不断计数:






3、测试代码
举报

更多回帖

发帖
×
20
完善资料,
赚取积分