1.什么是TIM
【理论】STM32定时器时间计算公式 +【实践】TIM中断1s计时一次-CSDN博客
在STM32中定时器的基本主频率为72MHZ,将72MHZ,72个计数值就是1MHZ——1us产生一次
1.基本定时器
a.定时器基本功能
时基单元:预分频器+自动重载寄存器+计数器
预分频器:0为不分频,1为72MHZ/2 预分频器为16位max:65535
计数器:对预分频后的时钟进行计数(计数时钟每来一个上升沿计数器就加1)0~65535,到65535后又归0,这个就类似于跑步一圈又一圈
自动重装寄存器:就类似于计算你跑目标,比如100m,你跑到100然后他直接给你送回起点让你重跑
然后如果你配置了中断,就会进入中断
AD转换可以将实际物理量(如声音、温度、光强)转换为数字形式进行处理,光敏,温湿度等
而DA转换则可以将数字信号转换为模拟形式输出到外部设备或环境中,电机控制
b.定时器第二功能:
主动触发DAC通过trgo控制DAC比定时器中断减少了中断服务函数,等定时器到了时间,产生更新时间可以通过映射到TRGO的位置,TRGO接到DAC的触发引脚上,TRGO会直接去触发DAC,就不用手动配置定时器中断了比如PWM脉冲输出
c.通用定时器
多出来部分功能:输入捕获,和输出比较。
d.高级定时器
重复计数寄存器作用:1.实现每隔几个定时周期才能发生更新时间(更新中断)
2.能够增加定时时间时长最高时间可以*65536
前三路输出控制方面:可以输出一对互补的PWM波形用于驱动三相无刷电机
DTG:寄存器死区生成电路,防止在开关导通的一瞬间互补电压相等,造成短暂的直通现象
BKIN刹车输入电路:通过外部输入刹车信号,或者时钟输入失效,切断电机输出,防止电机产生故障
2.预分频器时序
如图可以得出预分频器输入时钟是不断按照程序设定的输入的
当CNT_EN(使能为0时定时器时钟不运行),当使能为1时,时钟(CK_CNT)开始计数,到ARR(自动重装值)设定为FC并且下一个时钟来临时,计数器归0同时产生一个更新时间,计数寄存器重新计数
计数器寄存器也跟随时钟上升沿不断自增,由图很明显可以看出当预分频控制寄存器由0~1分频时定时寄存器没有导致定时器时钟频率变化,而直到本次计数周期结束时产生更新事件预分频缓冲寄存器发生变化时定时器时钟信号频率才发生变化
并且预分频计数器内部也会计数而且预分频寄存器内部的值和计数器内部的值有一个数的偏移,就会有CK_CNT=CK_PSC/(PSC+1)
3.计数器时序(与上类似)
当计数器计数到ARR(自动重装设定值时)计数器溢出,产生更新事件,并产生更新中断标志位,然后去申请中断,然后中断响应,并要在中断服务函数中将中断标志位手动清0
a.计数器无预装时序(寄存器没有缓冲寄存器)
b.计数器有预装时序
如果没有影子寄存器将F5直接改成36,因为36比F1小就会导致F1只能自增到FF然后在回到0在加到36然后产生更新时间发生中断
4.时钟树
a.AHB总线左边部分
先看左边四个震荡源分别是:8MHZ的高速RC震荡器,外部的4~16MHZ石英晶振震荡器(晶振)
32.768KHZ的低速晶振,内部40KHZ低速RC震荡器
其中两个高速晶振来提供系统时钟,内部外部都有一个8MHZ的晶振,其中石英震荡器要比RC震荡器要更加稳定
st时钟工作:先是用内部8MHZRC晶振,走HSI到SW先输出为系统时钟,然后启动外部时钟进入PLL锁相环进行倍频,8MHZ倍频9倍,得到72MHZ,等到锁相环输出稳定后选择锁相环输出系统时钟,这样就将系统时钟由8MHZ配置为72MHZ,所以当你的外部时钟出现问题时,你的程序会一直用系统内部8MHZ时钟,所以系统运行的速度会慢10倍,定1s时间可能10s才能反应过来
css时钟安全系统,用来监测外部时钟有没有问题
b.AHB总线右边部分
假设从SW中出来的系统时钟为72MHZ并且AHB系统分频为1(和计数器不一样)不分频,并且APB预分频为2,那么APB输出的时钟信号为36MHZ,(其中你要用定时器72MHZ的话就要用下面一路如果APB预分频为1,不变,否则时钟频率*2)因此才能稳定时钟信号为72MHZ