一个关于STM32定时器CCR无法清零的话题
2018-01-14 22:02
1111 查看
这里跟大家分享一个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]提示。
总之,在碰到类似问题时,首先有针对性地对相关手册章节仔细研读下,问题或许可以很快迎刃而解。这里提醒特别注意使用最新版本的技术手册,不同版本手册的差异往往体现这些细节的地方。
相关文章推荐
- 一个关于STM32内部USART的波特率配置话题
- 关于STM32定时器使用的一个注意事项(以此为前车之鉴,重要!)
- 关于STM32定时器中TI1FP1 与TI1FP2及相关话题
- 关于STM32定时器中TI1FP1 与TI1FP2及相关话题
- 关于STM32数据手册中的定时器信号
- VS2005中的一个小BUG:关于Dropdownlist无法Datadinding的解决方法。
- 关于一个无法加载资源的错误问题
- 一个关于andorid程序无法启动的问题
- 关于spring结合orm框架时dataSource无法创建的一个错误
- 关于链接过程中出现的“找到一个或多个多重定义的符号”和“无法解析的外部符号”错误的探究
- 一个关于STM8中断应用异常的话题
- 关于“IE下无法查看此样式表,因为它的源页面不在同一个域中”的问题
- 一个c++程序员关于跳槽话题的随想
- 关于证书布置好了出现“无法将这个证书验证到一个受信任的证书颁发机构”及页面内容混搭问题
- 关于STM32的SysTick定时器的时钟选择问题
- 怎么用STM32配置产生PWM(一个定时器用输出比较方式产生不同频率的PWM)
- 关于STC单片机 CCAPM0&=~PCA0_ECOM无法关闭定时器的问题
- 一个关于Java JFrame 无法初始化组件问题
- 一个挺有意思的关于面试的话题
- 关于STM32 定时器PWM输出,关闭PWM时,输出引脚电平控制。