[STM32F1] __HAL_TIM_SET_COUNTER不起作用,为什么?

[复制链接]
 楼主| 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计数器,请问是我的用法不正确,还是怎么回事?
35768652386943c1ff.png

Undshing 发表于 2023-10-9 21:23 | 显示全部楼层
没用过iar啊
hjl2832 发表于 2023-10-10 08:03 | 显示全部楼层
定时器写计数器前,正确的做法不应该是先停止定时器,然后再写计数寄存器吗?写完再重启定时器。
hjl2832 发表于 2023-10-10 08:04 | 显示全部楼层
只有重装载计数器才可以直接写。
elephant00 发表于 2023-10-10 10:17 | 显示全部楼层
如果定时器未正确初始化,那么__HAL_TIM_SET_COUNTER可能无法正常工作。
两只袜子 发表于 2023-10-10 10:17 | 显示全部楼层
在设置定时器的计数值之前,必须先启用定时器。这可以通过调用HAL_TIM_Base_Start函数或类似的函数来完成。如果定时器未启用,__HAL_TIM_SET_COUNTER将不起作用。
jcky001 发表于 2023-10-10 10:18 | 显示全部楼层
可能是你的函数使用不当
 楼主| gaobq 发表于 2023-10-10 11:50 | 显示全部楼层
使用cumbemx生成的初始化代码,定时器也启动了,还能在中断中工作,就是改变了了CNT的计数值,改天换keil试试,看看是不是IDE的问题
 楼主| gaobq 发表于 2023-10-10 11:51 | 显示全部楼层
hjl2832 发表于 2023-10-10 08:04
只有重装载计数器才可以直接写。

谢谢,我回头测试下,该写前前把定时器停了
 楼主| 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

主题

831

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部