定时中断和内外时钟源选择
- 定时器和中断系统的电路都在STM32内部,故只需在外插一个OLED显示屏即可
- 定时器不涉及外部硬件,所以把模块封装到System文案金夹,并初始化,把【定时中断基本结构】全部打通
- RCC开启时钟,同时定时器的基准时钟和整个外设的工作时钟都会同时打开
- 选择时基单元的时钟源,(定时中断选择内部时钟源)
- 配置时基单元,包括用结构体配置预分频器,自动重装器,计数模式
- 配置输出中断控制,允许更新中断输出到NVIC
- 配置NVIC,在NVIC中打开定时器中断的通道,并分配一个优先级
- 运行控制
- 使能计数器
- 回到keil进行编写:
查看定时器的库函数都有那些:【Library——>stm32f10x_tim.h——>拖到最后】
void TIM_DeInit(TIM_TypeDef* TIMx);//恢复缺省配置 void TIM_TimeBaseInit(TIM_TypeDef* TIMx, TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);//时基单元初始化
void TIM_TimeBaseStructInit(TIM_TimeBaseInitTypeDef* TIM_TimeBaseInitStruct);//把结构体变量赋一个默认值 void TIM_Cmd(TIM_TypeDef* TIMx, FunctionalState NewState);//使能计数器 void TIM_ITConfig(TIM_TypeDef* TIMx, uint16_t TIM_IT, FunctionalState NewState);//使能中断输出信号
void TIM_InternalClockConfig(TIM_TypeDef* TIMx);//选择内部时钟 void TIM_ITRxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_InputTriggerSource);//选择ITRx其他定时器时钟 void TIM_TIxExternalClockConfig(TIM_TypeDef* TIMx, uint16_t TIM_TIxExternalCLKSource, uint16_t TIM_ICPolarity, uint16_t ICFilter);//选择TIx捕获通道的时钟 void TIM_ETRClockMode1Config(TIM_TypeDef* TIMx, uint16_t TIM_ExtTRGPrescaler, uint16_t TIM_ExtTRGPolarity, uint16_t ExtTRGFilter);//选择ETR通过外部时钟模式1输入的时钟

- 小tips

【准备初始化通用定时器TIM2】
有关时钟分频参数:定时器的外部信号输入引脚一般都有滤波器,可以过滤信号的抖动干扰,具体原理是在固定的时钟频率f下采样,如果连续N个采样点的电平均相同,则说明输入信号稳定。其中f和N都是滤波器的参数。采样频率f可以由内部时钟直接而来,也可以由内部时钟加一个分钟分频而来。
void Timer_Init(void) { //RCC开启时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);//TIM2是APB1总线的外设 //选择时基单元时钟,想选择内部时钟,其实不调用这个也是可以的,默认就是内部时钟 TIM_InternalClockConfig(TIM2); //配置时基单元 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;//1分频 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数 TIM_TimeBaseInitStructure.TIM_Period = 10000 - 1; TIM_TimeBaseInitStructure.TIM_Prescaler = 7200 - 1; TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStructure); //按下中断的一瞬间清除中断标志位置位。复位以后可以从0开始啦 TIM_ClearFlag(TIM2,TIM_FLAG_Update); //使能更新中断,配置输出中断控制,允许更新中断输出到NVIC TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //配置NVIC NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;//抢占优先级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;//响应优先级 NVIC_Init(&NVIC_InitStructure); //启动定时器 TIM_Cmd(TIM2,ENABLE); }
想定时1秒钟:定时频率 = 72M / (PSC + 1) / (ARR + 1)。PSC和ARR的值可以自行分配
中断函数可以放在任意文件位置


浙公网安备 33010602011771号