PART A 定时基本定时功能
一TIM简介
二,定时器类型 只存在TIM1,2,3,4这四个寄存器
三基本定时器(支持向上计数模式)
1,时基单位
2,预分频器PSC
写0:不分频(1分频):输出频率=输入频率=72MHz
写1:2分频:输出频率=输入频率/2=36MHz
写2:3分频:输出频率=输入频率/3=18MHz
················
预分频器的值和实际分频系数相差1,即实际分频系数=预分频器的值+1
改分频器是16位最大值可写65535,即65536分频
3,计数器:对预分频后计数时钟进行计数
4,自动重装寄存器:存写入的计数目标
运行过程中,计数值不断自增,自动重装值是固定的目标
计数值等于自动重装值时,计数时间到了,就会产生一个中断信号,并且清零计数器
计数器自动开始下一次的计数计时
5,更新中断:向上箭头,表示产生中断信号,这种计数值等于自动重装值产生的中断
更新事件:向下箭头,更新事件不会触发中断,但可以触发内部其他电路的工作
6,定时器中断流程:基准时钟->预分频器->计数器->
计数器计数自增,同时不断与自动重传寄存器比较->
值相等时,即计时时间到->产生一个更新中断和更新事件->
CPU响应更新中断
7,主从触发模式:能让内部的硬件在不受程序的控制下实现自动运行
主模式作用: 需要把更新事件通过主模式映射到TRGO,然后TRGO就会直接去触发DAC
四,通用定时器【支持向上计数模式,
向下计数模式(从重装值开始,向下自减,减到0后回到重装值同时申请中断)
中央对齐模式(从0 开始,先向上自增,记到重装值,申请中断,
再向下自减到0,再申请中断 )】
1,时基单位
2,内外时钟源选择:可以选择内部72MHz和外部时钟(TIMx_ETR引脚上外部时钟)
3,外部时钟模式2
4,当TRGI当做外部时钟来使用的时候,这一路就叫做“外部时钟模式1”
5,实现定时器级联:初始化TIM3,使用主模式把更新事件映射到TRGO上
再初始化TIM2,选择ITR2,对应TIM3的TRGO
五,定时中断基本结构
六,预分频器时序
1,CK_PSC 预分频器的输入时钟
2,CNT_EN 计数器使能,高电平计数器正常运行,低电平计数器停止
3,CK_CNT 计数器时钟,即是预分频器的时钟输出,也是计数器的时钟输入
4,计数器寄存器数值跟随上升沿自增,可得ARR自动重装值就是FC,
当计数值计到和重装值相等。并旦下一个时钟来临时,计数值才清零
同时下面产生一个更新事件
5,预分频寄存器的缓冲,下三行(这里没捋懂)
七,计数器时序
1,CK_INT 内部时钟72MHz
2,时钟使能,高点频启动,
3,计数器时钟,因为分频系数为2,所以这个频率是上面(CNT)的/2
4,计数器在每个上升沿自增,到0036时,发生溢出,计到36后再来一个上升沿,计数器清零
计数器溢出,产生一个更新事件脉冲。并会置一个更新中断标志位UIF,UIF置1,
就会 申请中断,中断响应后要手动清零
5,计数器有预装时序,有缓冲寄存器
计数器无预装时序,无缓冲寄存器
八,定时器定时中断
1,因为定时器不涉及外部硬件,所以放system里
2,根据定时中断基本结构,初始化配置定时器
2.1 RCC开启时钟
2.2 选择时基单元时钟源(对于定时中断,我们选择内部时钟)
2.3 配置时基单元(预分频器,自动重装器,计数模式)
2.4 配置输出中断控制,允许更新中断到NVIC
2.5 配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级
2.6 运行控制
2.7配置完要使能定时器,才可使用
2.8 最后写一个中断函数
3,介绍库函数
TIM_DeInit 恢复缺省配置(默认模式)
TIM_TimeBaseInit 时基单元初始化,
配置时基单元【参数1:TIMx选择某个定时器,
参数2:TIM_TimeBaseInitStruct 结构体(包含配置时基单元的参数)】
TIM_TimeBaseStructInit 可以把结构体变量赋一个默认值
TIM_Cmd 使能计数器(对应定时中断基本结构中的运行控制)
(参数1:TIMx选择定时器,参数2:NewState使能还是失能)
TIM_ITConfig 使能中断输出信号(对应定时中断基本结构中的中断输出控制)
(参数1:TIMx选择定时器,参数2:TIM_IT 选择配置哪个中断输出,参数3:NewState使能还是失能)
时钟源选择