[其他ST产品] 一个关于STM32定时器CCR无法清零的话题

[复制链接]
930|19
 楼主| 略略u 发表于 2023-10-28 17:12 | 显示全部楼层 |阅读模式
93304653cd05a67d0d.png

这里跟大家分享一个STM32应用开发过程中操作CCR寄存器遇到的小案例,是关于对STM32定时器中的捕获寄存器CCR进行清零的问题。

有人用STM32F3的定时器做输入捕获,在捕获的回调函数里先将捕捉到的CCR值放入缓冲区,然后打算将CCR寄存器清零。结果发现怎么也无法清零。


 楼主| 略略u 发表于 2023-10-28 17:16 | 显示全部楼层
客户的相关测试代码如下【基于STM32cube库的代码】:
21790653cd17b72270.png
 楼主| 略略u 发表于 2023-10-28 17:16 | 显示全部楼层
上面代码的第【1】句将捕获到的CCR值放入CCR_CUR变量。

第【2】句意图对TIM4_CCR1清零操作;

第【3】句意欲从TIM4_CCR1读取数据到dbug_data.

最后发现,即使经过ccr清零操作,再来读取CCR的值时发现还是清零操作之前的数据。
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
从代码上看似乎并无什么问题。不妨打开芯片参考手册看看CCR寄存器的相关描述:
94995653cd19042884.png
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
从上述定义上来看,CCR寄存器可读可写,这点写得清清楚楚。作为输入捕捉时CCR的值为最近一次捕捉到的计数器的值。咋看之下也没发现什么异常,难道库代码有问题?
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
尝试将库函数调用直接改为对寄存器的操作,结果还是一样。那问题出在哪里呢?

尝试着再回头继续细看关于输入捕捉的章节,看能否找到蛛丝马迹,终于看到一段关键性的语句【红线标识】:

18515653cd1a2c77e1.png
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
上面红线上的那句话彻底说明白了,当某定时器通道配置为输入捕获时,该通道的CCR寄存器变为只读,只能在发生捕获时硬件装载修改。到这里,问题也算有个了结。对于这个问题,如果手册看得不到位,就有点麻烦。
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
后来的后来,我重新了下载该芯片的参考手册,也关注了这个细节。发现新版本手册里对于该寄存器的描述已做了进一步的完善,含义更加明确了。关于作为输入捕捉时对寄存器的只读特性做了明确的描述,同时寄存器属性方格里增加了作为IC输入时的只读属性[/r]提示。
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
 楼主| 略略u 发表于 2023-10-28 17:17 | 显示全部楼层
总之,在碰到类似问题时,首先有针对性地对相关手册章节仔细研读下,问题或许可以很快迎刃而解。这里提醒特别注意使用最新版本的技术手册,不同版本手册的差异往往体现这些细节的地方。
Wordsworth 发表于 2024-2-9 07:05 | 显示全部楼层

从定时器为TIM2,从模式选择为门控模式,触发源选择ITR0,开启定时器2中断。
Clyde011 发表于 2024-2-9 08:08 | 显示全部楼层

根据实际需求选择用哪种方式
公羊子丹 发表于 2024-2-9 09:01 | 显示全部楼层

每条大电流的地线要短而宽
万图 发表于 2024-2-9 10:04 | 显示全部楼层

使能主从模式,触发事件选择为更新事件,不需要开启中断。
Uriah 发表于 2024-2-9 11:07 | 显示全部楼层

主从定时的方式占用CPU资源少
帛灿灿 发表于 2024-2-9 13:03 | 显示全部楼层

主定时器为TIM1,通道2配置为PWM输出
Bblythe 发表于 2024-2-9 14:06 | 显示全部楼层

中断计数的方式实现简
周半梅 发表于 2024-2-9 16:02 | 显示全部楼层

多个电容并联
Pulitzer 发表于 2024-2-9 17:05 | 显示全部楼层

都可以产生指定个数的PWM脉冲
童雨竹 发表于 2024-2-9 19:01 | 显示全部楼层

作为功率开关管和整流器的散热部分
您需要登录后才可以回帖 登录 | 注册

本版积分规则

84

主题

666

帖子

0

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