您的位置 首页 制造

一个关于STM32定时器的CCR清零论题

今天跟大家分享一个STM32应用开发过程中操作CCR寄存器遇到的小案例,是关于STM32定时器中的捕获寄存器清零的问题。有人用STM32做输入捕获,在捕获的回调函数里先将捕捉到的CCR值放入缓

  今日跟我们共享一个STM32使用开发过程中操作CCR寄存器遇到的小事例,是关于STM32定时器中的捕获寄存器清零的问题。

  有人用STM32做输入捕获,在捕获的回调函数里先将捕捉到的CCR值放入缓冲区,然后计划将CCR寄存器清零。成果发现底子清不了。相关代码如下【根据STM32cube库】:

  voidHAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)

  {

  if (htim->Instance == TIM4)

  {

  if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1)

  {

  ccr_cur =__HAL_TIM_GET_COMPARE(&htim4, TIM_CHANNEL_1); //【1】

  __HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_1,0); //欲清零CCR1 【2】

  dbug_data = __HAL_TIM_GET_COMPARE(&htim4,TIM_CHANNEL_1); // 【3】

  //再次读取的值依然为ccr_cur的值

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

  代码第【2】句目的将TIM4_CCR1清零;第【3】句意欲从TIM4_CCR1读取数据到dbug_data.

  最终发现,做过ccr清零操作后再来读取CCR的值时发现仍是清零操作之前的数据。

  从代码上看并无什么问题。再看看CCR寄存器界说:

    

 

  从界说上看,CCR寄存器可读可写,作为输入捕捉时CCR的值为最近一次捕捉到的计数器的值。咋看之下好像也没什么问题。莫非库代码有问题?

  测验将库调用直接改为对寄存器的操作,成果仍是相同。那问题出在哪里呢?上面那句关于作为通道作为输入时的描绘好像有点意犹未尽的滋味。

  再持续细看关于输入捕捉的章节,看到一段关键性的句子:

    

 

  上面红线上面的那句话完全说理解了,当某定时器通道装备为输入捕获时,该通道的CCR寄存器变为只读,只能在产生捕获时硬件装载修正。到这儿,问题也算有个了断。关于这个问题,假如手册看得不到位,就有点费事。在碰到类似问题时,有针对性地对相关手册章节细心研读下或许能够山穷水尽。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/205520.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部