打印
[STM32F1]

__HAL_TIM_SET_COUNTER不起作用,为什么?

[复制链接]
1594|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaobq|  楼主 | 2023-10-9 12:51 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
使用STM32F103ZE单片机,HAL库最新版本,cubemx生成的代码,tim7工作于100us中断定时模式。发现使用定时器赋值语句不起作用,如下:
            test_data1 = __HAL_TIM_GET_COUNTER(&htim7);
            tim7_correct_time = (uint16_t)((degree_time*5 + CALC_MAP_TIME)/100);
            __HAL_TIM_SET_COUNTER(&htim7,0 );   //不起作用,不能清零
            test_data1 = __HAL_TIM_GET_COUNTER(&htim7);
            engine_timer = tim7_correct_time;

使用IAR 9.10.2,设置短点,发现 __HAL_TIM_SET_COUNTER(&htim7,0 ); 语句单步执行,不能清空CNT计数器,请问是我的用法不正确,还是怎么回事?


使用特权

评论回复
沙发
Undshing| | 2023-10-9 21:23 | 只看该作者
没用过iar啊

使用特权

评论回复
板凳
hjl2832| | 2023-10-10 08:03 | 只看该作者
定时器写计数器前,正确的做法不应该是先停止定时器,然后再写计数寄存器吗?写完再重启定时器。

使用特权

评论回复
地板
hjl2832| | 2023-10-10 08:04 | 只看该作者
只有重装载计数器才可以直接写。

使用特权

评论回复
5
elephant00| | 2023-10-10 10:17 | 只看该作者
如果定时器未正确初始化,那么__HAL_TIM_SET_COUNTER可能无法正常工作。

使用特权

评论回复
6
两只袜子| | 2023-10-10 10:17 | 只看该作者
在设置定时器的计数值之前,必须先启用定时器。这可以通过调用HAL_TIM_Base_Start函数或类似的函数来完成。如果定时器未启用,__HAL_TIM_SET_COUNTER将不起作用。

使用特权

评论回复
7
jcky001| | 2023-10-10 10:18 | 只看该作者
可能是你的函数使用不当

使用特权

评论回复
8
gaobq|  楼主 | 2023-10-10 11:50 | 只看该作者
使用cumbemx生成的初始化代码,定时器也启动了,还能在中断中工作,就是改变了了CNT的计数值,改天换keil试试,看看是不是IDE的问题

使用特权

评论回复
9
gaobq|  楼主 | 2023-10-10 11:51 | 只看该作者
hjl2832 发表于 2023-10-10 08:04
只有重装载计数器才可以直接写。

谢谢,我回头测试下,该写前前把定时器停了

使用特权

评论回复
10
gaobq|  楼主 | 2023-10-12 20:26 | 只看该作者
向各位老大汇报下,经过测试,就是需要先停止定时器,就可以写入CNT了,如下代码:
test_data1 = __HAL_TIM_GET_COUNTER(&htim6);
      HAL_TIM_Base_Stop_IT(&htim6);
      __HAL_TIM_SET_COUNTER(&htim6,0 );   //可以清零
      __HAL_TIM_Base_Start_IT(&htim6);
      test_data1 = __HAL_TIM_GET_COUNTER(&htim6);

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

172

主题

827

帖子

5

粉丝