STM32基本定时器
  w0pCW4weT65e 2024年01月19日 25 0

STM32基本定时器

1.时基单元

  • 计数寄存器 (TIMx_CNT)
    • 计数器从0累加计数到自动重装载数值(TIMx_ARR寄存器),然后重新从0开始计数并产生一个计数器溢出事件。
  • 预分频寄存器 (TIMx_PSC)
    • 它也有缓存,也是在更新事件产生时刷新缓存。
  • 自动重装载寄存器(TIMx_ARR)
    • 设置此值。计数器达到这个值,溢出。
    • 可以给此值设置缓存,这个缓存被称为影子寄存器。 当TIMx_CR1的ARPE位为1时,表示有缓存;否则没有。
    • 有缓存时:更新缓存的时机是 更新事件(计数器溢出或者TIMx_EGR寄存器的UG位为1)产生 时。所以缓存有时不是实时的值。

2.时序中的一些概念

  • CK_PSC : 预分频寄存器的时钟,也就是内部系统时钟,用来控制预分频寄存器的工作频率。

  • CNT_EN : 计数寄存器的使能,对应TIMx_CR1的CEN位,开启后计数器才能计数。

  • CK_CNT : 计数器的频率,也就是分频后的频率,一个频率计数寄存器加一。

  • 计数器寄存器: 每个频率加一。

  • 更新事件(UEV): 一个逻辑的概念,一般计数器溢出或者TIMx_EGR寄存器的UG位为1时产生。

    • 当发生一次更新事件时,所有寄存器会被更新并(根据URS位)设置更新标志(TIMx_SR寄存器的

      UIF位)。

    • 立即产生中断的问题原因是:预分频寄存器的缓存为没分频前的数,频率越高,计数越快,很快就加到了溢出,所以置位后很短时间就产生了一次中断。只有更新事件发生时,才会更新缓存。

    • 解决立即产生中断的问题时,我们可以在设置中断使能之前将UG设置为1,让缓存在中断打开前就更新,之后再将TIMx_SR的UIF位置0,告诉系统我们没有产生更新事件。另外,如果设置了TIMx_CR1寄存器中的URS(选择更新请求),设置UG位可以产生一次更新事件UEV,但不设置UIF标志(即没有中断或DMA请求)。

  • 预分频控制寄存器:也就是预分频寄存器,保存的值为分频的数,想7200分频,就存7199。

  • 预分频器缓冲器: 预分频寄存器的缓冲区,在更新事件产生时更新缓冲区的值。

  • 预分频器计数器: 一个内部时钟周期加一,也就是计算定时器时钟走到当前时走了几个内部时钟。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年01月19日 0

暂无评论

推荐阅读
  bgxXjYYEVSxV   2024年05月17日   45   0   0 嵌入式
  bgxXjYYEVSxV   2024年05月17日   62   0   0 嵌入式
  swCWDMUCSvaI   2024年05月17日   56   0   0 嵌入式
  jEmNNF9D14iz   2024年05月17日   42   0   0 嵌入式
I2C
  bgxXjYYEVSxV   2024年05月17日   63   0   0 嵌入式
  jEmNNF9D14iz   2024年05月17日   41   0   0 嵌入式
  jEmNNF9D14iz   2024年05月17日   53   0   0 嵌入式
  jEmNNF9D14iz   2024年05月17日   48   0   0 嵌入式
PWM
  bgxXjYYEVSxV   2024年05月17日   46   0   0 嵌入式
w0pCW4weT65e