你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F4直接使用32位定时器(tim2)计数问题

[复制链接]
linggo 提问时间:2014-4-16 13:32 /
 根据st技术手册,F4的定时器TIM2和TIM5是32位定时器,测试发现TIM2->cnt读数只有16位(0-FFFF),求解,有哪里设置不对,还是st有什么问题啊???
收藏 评论17 发布时间:2014-4-16 13:32

举报

17个回答
世界在变 回答时间:2016-8-16 09:27:42
zhangxu56726 发表于 2016-8-15 20:02
库里面是这样的
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、赋值后,计数器从计数的值基础上往上加:
从赋值的基础上往上加.png



2、溢出之后,高16位永远为0,只有低16位在不断计数:
溢出之后,只有CNT_L在不断计数,CNT_H一直为0.png





3、测试代码
测试代码.png






zhangxu56726 回答时间:2016-8-15 20:02:11
库里面是这样的
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;
}
对于不同的定时器,库自己可以区分的,直接调库就可以了,不用纠结
世界在变 回答时间:2016-8-15 17:48:13
linggo 发表于 2014-4-17 08:59
 使用324cG-EVAL的例程重新写了代码,终于看到32位的数据跳变了,问题解决,谢谢大师们支持啊 ...

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

楼主能把你的配置代码贴出来给我参考一下吗?多谢了!!
废鱼 回答时间:2014-4-16 16:43:05

RE:STM32F4直接使用32位定时器(tim2)计数问题

手册中描述了CNT就是16位的寄存器。
linggo 回答时间:2014-4-16 19:24:35

回复:STM32F4直接使用32位定时器(tim2)计数问题

回复第 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.

 
linggo 回答时间:2014-4-16 21:10:33

RE:STM32F4直接使用32位定时器(tim2)计数问题

有使用过STM32F4自带32位定时器的吗,这个不会是个摆设吧
我爱下载 回答时间:2014-4-17 07:49:34

RE:STM32F4直接使用32位定时器(tim2)计数问题

TIM2确实是32位计数器,是不是楼主读取的方式不对啊,比如你读取时使用的变量位宽限定不是32位而是16位,就是*(ulong *)和*(uint *)的差别。
那片清茶 回答时间:2014-4-17 08:39:22

RE:STM32F4直接使用32位定时器(tim2)计数问题

可以去看一下datasheet
linggo 回答时间:2014-4-17 08:59:04

回复:STM32F4直接使用32位定时器(tim2)计数问题

 使用324cG-EVAL的例程重新写了代码,终于看到32位的数据跳变了,问题解决,谢谢大师们支持啊
废鱼 回答时间:2014-4-17 09:16:59

回复:STM32F4直接使用32位定时器(tim2)计数问题

我看手册上写的确实是16位的,可以看一下下图:
1234.jpg
dlyt03 回答时间:2014-4-17 12:45:24

RE:STM32F4直接使用32位定时器(tim2)计数问题

是代码问题?
linggo 回答时间:2014-4-17 13:05:01

RE:STM32F4直接使用32位定时器(tim2)计数问题

这页是错的 往下接着看
Eagleson 回答时间:2014-4-18 09:21:42

回复:STM32F4直接使用32位定时器(tim2)计数问题

应该是datasheet寄存器哪里没更新过来。tim2是32位的计数
有缘于你 回答时间:2014-4-18 11:21:55

RE:STM32F4直接使用32位定时器(tim2)计数问题

确实是32位的,这个我以前用过
feiante-155820 回答时间:2014-4-20 12:29:58

RE:STM32F4直接使用32位定时器(tim2)计数问题

是不是定义时用成了uint_t16,不是uint_t32
wkuang 回答时间:2014-4-22 23:31:01

RE:STM32F4直接使用32位定时器(tim2)计数问题

TIME2是 32bit的定时器,这个我使用过的,
估计楼主是在读取的时候,定时器读出来的数据被软截断了。导致看到的是低16位的数据
12下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版