如果我们想要去每隔一段时间去做一件事,或者说特定的时间去做某件事,但是我们所有的精力不能放在计时上,我们有主要的事情要做,但是我们还必须每隔一段时间就要做另外一件事.我们就必须找一个可以计时的东西,它的工作就是每隔特定的时间告诉我们一声.这样,我们既可以做那个主要的事,每隔一段时间需要做的事也可以做,这个计时的东西就是定时器.
与配置io口类似,定时器的初始化也是给一个结构体变量赋值,把参数传送给初始化函数.
下面是定时器3初始化的一个例子
void tim3(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseStructure.TIM_Period =1000-1;
TIM_TimeBaseStructure.TIM_Prescaler = 35999;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM3,ENABLE);
}
TIM_TimeBaseInitTypeDef结构体变量类型名
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);打开apb1总线上的定时器3的时钟
TIM_TimeBaseStructure.TIM_Period =1000-1;分频系数(将主频分割)个人理解
TIM_TimeBaseStructure.TIM_Prescaler = 35999;计数溢出值(计数到这个值产生消息)个人理解
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;时钟分频因子 不懂 默认0即可这个宏的值就是0
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;计数模式 向上计数 其他计数模式见手册
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);传入结构体地址,完成基本配置
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);打开定时器3中断
TIM_Cmd(TIM3,ENABLE);使能定时器3
void tim3youxianji(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =2;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
中断优先级配置,与外部中断相同,将中断通道改为定时器3即可NVIC_InitStructure.NVIC_IRQChannel =TIM3_IRQn;
void TIM3_IRQHandler(void)
{
.......;
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}
中断服务函数,每产生一次计时消息进入一次中断服务函数.
计时消息计算公式 计时频率=处理器主频/分频系数/计数溢出值 计时频率即进入中断的频率
上一篇:STM32学习笔记-配置串口,printf重定向
下一篇:STM32学习笔记-点亮第一个led
推荐阅读最新更新时间:2024-11-07 21:57
设计资源 培训 开发板 精华推荐
- EVAL-AD5700-1EBZ,FSK AD5700-1 HART 调制解调器评估板
- AN54,采用 LTC1148 5-12V、-15V/0.5A 降压-升压转换器的应用电路
- 使用 NXP Semiconductors 的 MC68HC908QY4 的参考设计
- DC1790A-C,基于 LTM2886-3I I2C 模块隔离器的演示板@3.3V 电源
- ADR360A 2.048V 低功耗、低噪声电压基准的典型应用,具有灌电流/拉电流能力
- 台式计算机/服务器/工作站的模拟放大
- LTC6262IDC SAR ADC 驱动器、运算放大器的典型应用
- LP2951 4 至 20mA 电流环路开路检测器的典型应用
- LM337可调式实验室稳压器的典型应用
- 天猫精灵的多孔分控智能插排