SMT32学习笔记(TIM定时器)

TIM定时器

·基本定时器

预分频器、自动重装载寄存器、计数器构成了最基本的计数计时电路——时基单元

        预分频器为0,则输出频率等于输入频率;预分频器为1,则输出频率等于输入频率/2;预分频器为2,则输出频率等于输入频率/3....即实际分频系数 = 预分频器的值 + 1,预分频器为16位的(65535),所以最大分频为65536分频(主频72MHz)。

预分频器作用就是对输入的基准频率提前进行一个分频操作。

计数器是对预分频后的技术时钟进行计数(上升沿计数)。计时器也是16位计数范围0~65535,超过范围后返回到0重新开始。计数器在计数的同时不断的与自动重装载寄存器

自动重装在寄存器存储的是目标值,当计数值等于目标值后触发中断,并且清零计数器。之后计数器开始下一次的计数

计数值等于目标值后产生的中断信号(UI)一般叫做“更新中断”,更新中断产生后会通往NVIC,在配置好NVIC的定时器通道后,定时器的更新通道就能够得到CPU的相应

在产生中断信号的同时也会产生一个中断事件(U)叫做“更新事件”,更新事件不会触发中断,但可以触发内部其他电路的工作。

流程:

预分频器对输入频率分频➡计数器计数(预分频器输出频率上升沿计数),同时与自动重载寄存器中的目标值比较➡计数值等于目标值➡产生更新事件和更新事件➡CPU响应更新中断

·通用定时器

向上计数模式:计数器从零开始计数,向上自增,等于重装值后清零,并申请中断,然后开始下一轮,依次循环;

向下计数模式:从重装值开始,向下自减计数,等于零后重新返回重装值,并申请中断,然后开始下一轮,依次循环;

中央对齐模式:计数器从零开始计数,先向上自增,等于重装值后申请中断,然后向下自减计数,等于零后再申请中断,然后开始下一轮,依次循环。

基本定时器支持向上计数模,通用和高级定时器支持向上计数、向下计数、中央对齐模式。

·高级定时器

定时中断基本结构

预分频器时序

时基单元

计数器计数频率:CK_CNT = CK_PSC / (PSC + 1)

CK_PSC预分频器的输入时钟(未分频前的频率)

CNT_EN计数器使能,高电平计数器正常运行,低电平计数器停止操作。

CK_CNT计数器时钟,(既是预分频器的输出也是计数器的输入)

上图是预分频器的一种缓冲机制,预分频器寄存器实际上有两个。一个是供读写用的 预分频控制寄存器(并不是直接决定分频系数),另一个是预分频缓冲寄存器(真正起分频作用)。

当在一个计数周期内,改变分频值(及改变预分频控制寄存器的值),频率不会立刻发生改变,而是等到本次计数周期结束时产生了更新事件,预分频寄存器的值才会被传递到缓冲寄存器中,才会生效

计数器时序

CK_CNT--定时器时钟

ARR自动重载值

CK_PSC--定时器时钟源(这里是72MHz)

PSC--预分频值

计数器溢出频率:CK_CNT_OV = CK_CNT / (ARR + 1)

       = CK_PSC / (PSC + 1) / (ARR + 1)

计数器有预装时序(有缓冲机制)

RCC时钟树

RCC时钟树是STM32中用来产生和配置时钟,并且把配置好的时钟发送到各个外设的系统,时钟是所有外设运行的基础,所以时钟也是最先需要配置的东西。

程序中主函数之前还会执行一个Systeminit函数就是用来配置时钟树的。

在时钟产生电路中有四个震荡源,分别是:1.内部的8MHz高速RC振荡器;2.外部的4~16MHz高速石英晶体振荡器,也就是晶振,一般都是8MHz;3.外部的32.768MHz低速晶振,这个一般是给RTC提供的时钟;4.内部的40KHz低速RC振荡器,这个可以给看门狗提供时钟。

外部石英晶体振荡器比内部RC振荡器稳定,一般都用外部的。

Systeminit函数里首先启动内部时钟1,启动内部8MHz为系统时钟,暂时一内部8MHz时钟运行,然后在启动外部时钟,进入PLL锁相环进行倍频,8MHz倍频9倍,得到72MHz,等到锁相环输出稳定后,选择锁相环输出为系统时钟。如果外部晶振出问题,系统时钟无法切换至72MHz,x系统就会以内部8MHz运行,大概慢了10倍。

CSS(Clock Security System)时钟安全系统,也是负责切换时钟的,可以检测外部时钟的运行状态,一旦外部时钟失效,就会自动把外部时钟切换回内部时钟。

时钟分配电路,首先系统时钟72MHz进入AHB总线,AHB总线有预分频器,在SystemInit里配置的分配系数为1,则AHB的时钟就是72MHz,然后进入APB1总线,如果分频系数为2,APB1总线的时钟就为72MHz/2=36MHz,APB2总线,如果分频系数为1,时钟为72MHz

  • 11
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值