基本定时器的个数,不同芯片的定时器数量不一定一样,有些芯片没有基本定时器
就比如STM32F103系列,只有4个定时器,3个通用定时器,1个高级定时器
基本定时器作用:
-
延时
-
定时器更新中断
触发DAC转换
系统滴答定时器特性:24bit递减计数器
基本定时器:属于片上外设,简介和特性在中文参考手册上面可以找到
-
时钟源 ②预分频器 ③16bit自动重装载计数器
基本定时器( TIM6 和 TIM7)的特性包括: 重装载值(ARR) 分频系数/分频数(PSC)
● 16 位自动重载递增计数器
● 16 位可编程预分频器,用于对计数器时钟频率进行分频(即运行时修改),分频系数(PSC)
介于 1 和 65536 之间(注意:寄存器填入值从0开始,范围0 - 65535) 2分频:2 - 1
● 用于触发 DAC 的同步电路
● 发生如下更新事件时会生成中断/DMA 请求:计数器上溢
这个需要充分去理解,对于我们的STM32F407VGT6来说,他的AHB总线1默认是用外部晶振25Mhz通过锁相环进行分频、倍频、分频后得到了168Mhz,默认就是最高频率,当然可以在M4系统.c文件和stm32f4xx.h中进行修改分频和倍频(不建议),通过时钟总线图可以知道AHP1为42Mhz,AHP2为84Mhz,都不为1分频,所以他们挂载的定时器频率要在AHPx频率上乘2,这点特别注意
基本定时器配置步骤
使能定时器时钟
预装载,模式,使能
ARR重装载值,PSC分频数设置,计数值设置
发起更新事件,将重装载值写入计数器
清楚更新标志
使能定时器
void TIM7_delay_ms(u16 ms)
{
RCC->APB1ENR |= 1<<5;
TIM7->CR1 = 1<<7;//ARR预装载使能,进行缓冲
TIM7->CR1 = 1<<3;//单脉冲模式,下一更新事件时停止计数(将 CEN 位清零)
//TIM6->DIER = 1<<0;//中断使能
TIM7->PSC = 42000 - 1;//84分频,因为时钟频率为84Mhz,是挂载总线频率的2倍
TIM7->ARR = 2 * ms - 1;//重装载设置
TIM7->CNT = 0;//设置计数值
TIM7->EGR |= 1;//UG位置1.更新事情产生,PSC,ARR写入对应计数器
TIM7->SR &= ~1;//清除标志位
TIM7->CR1 |= 1;//使能定时器
while(!(TIM7->SR & 1));
}