一个关于STM32定时器CCR无法清零的话题



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


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


客户的相关测试代码如下【基于STM32cube库的代码】:




上面代码的第【1】句将捕获到的CCR值放入CCR_CUR变量

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

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

最后发现,即使经过ccr清零操作,再来读取CCR的值时发现还是清零操作之前的数据

 

从代码上看似乎并无什么问题。不妨打开芯片参考手册看看CCR寄存器的相关描述




从上述定义上来看,CCR寄存器可读可写,这点写得清清楚楚。作为输入捕捉时CCR的值为最近一次捕捉到的计数器的值。咋看之下也没发现什么异常,难道库代码有问题


尝试将库函数调用直接改为对寄存器的操作,结果还是一样。那问题出在哪里呢?

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




上面红线上的那句话彻底说明白了,当某定时器通道配置为输入捕获时,该通道的CCR寄存器变为只读,只能在发生捕获时硬件装载修改。到这里,问题也算有个了结。对于这个问题,如果手册看得不到位,就有点麻烦。


后来的后来,我重新了下载该芯片的参考手册,也关注了这个细节。发现新版本手册里对于该寄存器的描述已做了进一步的完善,含义更加明确了。关于作为输入捕捉时对寄存器的只读特性做了明确的描述,同时寄存器属性方格里增加了作为IC输入时的只读属性[/r]提示。




总之,在碰到类似问题时,首先有针对性地对相关手册章节仔细研读下,问题或许可以很快迎刃而解。这里提醒特别注意使用最新版本的技术手册,不同版本手册的差异往往体现这些细节的地方。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值