stm32学习笔记 通用定时器
程序员文章站
2022-03-04 22:43:29
...
STM32F103C8T6处理器:
高级定时器: TIM1
三个通用定时器: TIM2,TIM3, TIM4
没有基本定时器
stm32f4
有 14 个定时器(具体看手册)
重点内容:
1.基本定时和计数功能
2.输出比较( PWM控制舵机和步进电机)
3.输入捕获(测量波形周期,高电平时间)
时钟树:
因为系统初始化 SystemInit 函数里面已经初始化 APB1 的时钟为 4 分频,所
以 APB1 的时钟为 42M,而从 STM32F4 的内部时钟树图(得知:当 APB1 的时钟
分频数为 1 的时候,TIM2~7 以及 TIM12~14 的时钟为 APB1 的时钟,而如果 APB1 的时钟分频
数不为 1,那么 TIM2~7 以及 TIM12~14 的时钟频率将为 APB1 时钟的两倍。因此,TIM3 的时
钟为 84M,再根据我们设计的 arr 和 psc 的值,就可以计算中断时间了。
计算公式如下:
Tout= ((arr+1)*(psc+1))/Tclk
其中:
Tclk:TIM3 的输入时钟频率(单位为 Mhz)。
Tout:TIM3 溢出时间(单位为 us)。
例子
void TIM2_BaseConfigurAction(void) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
NVIC_InitTypeDef NVIC_InitStruct1;
NVIC_InitStruct1.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStruct1.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级
NVIC_InitStruct1.NVIC_IRQChannelSubPriority = 3; //响应优先级
NVIC_InitStruct1.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStruct1); //初始化
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 5000-1; //4999+1 为 500ms
TIM_TimeBaseStructure.TIM_Prescaler = 8400-1; //8399+1 = 定时器时钟84M,分频系数8400,所以84M/8400=10Khz
// TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; 设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //设置向上计数
TIM_TimeBaseInit(TIM2, & TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除溢出标志位
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //允许定时器2更新中断
TIM_Cmd(TIM2,ENABLE); //使能定时器 2
}
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
LED1=!LED1;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
下一篇: 逗B都是搞笑小能手