#include "timer.h" /****************************************** * @brief: 定时器3配置 * @param: arr 自动重装值 * psc 分频 * @retval: 无返回值 * @note: *******************************************/ void TIM3_Config(uint32_t arr,uint16_t psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟 TIM_TimeBaseInitStructure.TIM_Period = arr; //自动重装载值 TIM_TimeBaseInitStructure.TIM_Prescaler = psc; //定时器分频 TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式 TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure); //初始化TIM3 TIM_ClearITPendingBit(TIM3, TIM_IT_Update); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断 //TIM_Cmd(TIM3,ENABLE); //使能定时器3 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //定时器3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0x01; //抢占优先级1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; //子优先级1 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /******************************* * @brief: 定时器3中断服务函数 * @param: * @retval: * @note: ********************************/ bool UART_FINISH = false; void TIM3_IRQHandler(void) { if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断 { TIM_Cmd(TIM3,DISABLE); UART_FINISH = true; } TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位 }