一:
STM32F106 一共有11个定时器 2个高级定时器,4个普通定时器,2个基本定时,2个看门狗,和一个滴答定时器
- 高级定时器 计数方式(向上,向下)、预分频值 1—65532、四通道,输出输入捕获,PWM互补输出
- 普通定时器 计数方式(向上,向下)、预分频值 1—65532、四通道,输出输入捕
- 基本定时器计数方式(向上 )、预分频值1—65532
二:
定时器配置方法步骤:
在配置前我们要添加定时器的库函数 stm32f10x_tim.c
1:配置中断向量表 2:配置定时器时钟 3:配置定时器 4:使能定时器 5:使能中断
三:
事例分析(定时中断3)
***1:配置中断向量表***
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
***2:配置定时器时钟***
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
***3:配置定时器(初始化)***
void TIM_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Prescaler = 7200-1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_Period = 9999;
个频率后产生个更新或者中断 ( 也是说定时时间到 )
定时器时间计算:
每次进入中断服务程序间隔时间为((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+7199)/72M)*(1+9999)=1秒
TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM3,TIM_FLAG_Update);
TIM_Cmd(TIM3, ENABLE);
***4:使能定时器***
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
5:使能中断
}
四:
在主函数运行时调用这三个函数对定时器进行配置即可。
五:
定时中断函数的执行
TIME3的定时中断函数的执行在中断向量表中,即 stm32f10x_it.c 文件中。
因为使用的函数库版本不同有的stm32f10x_it.c中给出了void TIM3_IRQHandler(void) {}函数,只需要我们添加相应的中断服务程序即可,如果stm32f10x_it.c文件中没有这个函数我们就自己创建一个同名函数即可。
如:
这个例子是判断中断标志位是否溢出来进入中断,如果溢出就执行中断服务子程序,特别要注意的是在中断服务执行前或者执行后一定要清楚中断标志位,以免影响后面中断的进入。
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_FLAG_Update);
GPIO_WriteBit(GPIOE, GPIO_Pin_3, (BitAction)(1 - GPIO_ReadOutputDataBit(GPIOE, GPIO_Pin_3)));
}
}
————————————————————————————————————————————
总结:
由上可知,STM32定时器的几个关键点是:
1.定时器时间计算:
公式=((1+TIM_Prescaler )/72M)(1+TIM_Period )=((1+7199)/72M)(1+9999)=1秒 其中TIM_Prescaler 为时钟预分频数,TIM_Period 为自动重装载寄存器周期的值,72M是总线上的定时器时钟频率;
2.定时器配置一共是五个参数,基本定时器是四个参数 算上上面两个还有三个参数包括 TIM_CounterMode(计数方式,上升计数或下降计数,在基本方式下,只能向上计数,高级的可以选择), TIM_ClockDivision (时间分割值),该参数主要用于影响滤波器的采样频率 TIM_RepetitionCounter(重复计数器,基本模式不需要,高级模式需要)
3.定时器分类 高级定时器:TIM1和TIM8 基本定时器:TIM6和TIM7 通用定时器:TIM2-TIM5
4.定时器功能 基本定时器:只有定时功能(一般用于驱动DAC电路或者定时) 通用定时器:在定时基础上,能产生PWM脉冲信号,还能测量信号的脉冲长度 高级定时器:具备通用定时器的功能基础上,还能控制直流电机,还能刹车
(除了基本定时器只支持向上计数外,其他都支持三种计数方式;基本定时器,通用定时器在定时基础上还能产生PWM脉冲信号,测量输入信号的脉冲长度功能;高级定时器具有通用定时器所有功能且还能控制直流电机和刹车的功能)
————————————————————————————————————————————
定时器输入与输出简介
定时器输入
对于已有信号,检测其有效起始点(上升/下降沿),启动计时直至有效终止点,获取信号的周期、频率、脉宽、占空比等信息(如检测按键按下的时间,因为这类时间非常短暂,除了用特殊的设备无法检测出来,再如检测上升沿和下降沿跳变的时间,这个时间就更短了,大概在纳秒的水平)
输入捕获可由通用定时器TIMx产生,配置为输入捕获模式
定时器输出
https://blog.csdn.net/kouxi1/article/details/123957629 先存一下
|