定时器可以对输入的时钟进行计数,并在计数值达到设定值时发出中断
定时器就是一个计数器
预分频器:对系统时钟进行分频得到定时器时钟频率
自动重装在值:计数多少个进入中断
基本定时器两个,tim6和7,挂载在apb1
通用定时器四个:tim2、3、4和5,挂载在apb1
高级定时器两个:tim1和8,挂载在apb2
PSC预分频器,把系统时钟ck_psc进行分频得到ck_cnt时钟给cnt计数器
cnt计数器:计时增加或者减少
自动重装载值:上限值
基本定时器:内部时钟一般72mhz=72000000hz
通用定时器:内部时钟或者外部时钟都可以
溢出时间就是溢出频率的倒数
定时器中断:
1、开启RCC时钟
2、选择时钟源:内部或者外部
3、配置时基单元PSC预分频器、CNT计数器、ARR自动重装载值
4、配置中断
5、配置NVIC
- 开始时钟,要使用APB1外设时钟
2、选择时基单元
其中Intelernalclockconfig配置tim2选择内部时钟,一般默认就是内部时钟可以不设置
Tim2使用内部时钟,可以不调用,默认内部时钟
3配置时基单元
TIMCK_DIV1选择不分频
TIM_CounterMode_up向上计数
period:周期就是ARR自动重装器的值
prescaler:预分频器的值
repetitioncounter重复计数器的值
setcount和getcount获取计数器CNT的值
定时频率=ck_psc/(psc+1)/(arr+1)
时间频率的倒数
定时1s就是1hz,1s=0.001ms,1/1hz=1s
ck_psc=72000000hz
psc+1=7200
arr+1=1000
定时器频率=72000000/7200/10000=1
对72000000进行7200分频就是10000=10khz
在10的频率下计数10000个数,就是1s
4、使能定时器中断
使能中断后配置NVIC:
5、nvic配置
6、启动定时器
tim_cmd(timx,enable)
配置完成后,1s进一次中断,可以再中断中进行想要的操作。
在开启中断前面调用一下,手动把中断标志位清除一下。