#include "tim3.h" #include "usart1.h" #include extern Cmd_States Uart1_Cmd_State; uint32_t g_tim3_count = 0; extern uint32_t uart1_recv_time; /** * @brief Configures the different system clocks. */ void TIM3_RCC_Configuration(void) { /* TIM3 clock enable */ RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM3, ENABLE); } /** * @brief Configures tim3 clocks. */ void TIM3_TIM_Configuration(void) { TIM_TimeBaseInitType TIM_TimeBaseStructure; /* Compute the prescaler value */ /* Time base configuration */ TIM_TimeBaseStructure.Period = 9; // 计数到9触发中断,即1ms TIM_TimeBaseStructure.Prescaler = 7199; // 10K TIM_TimeBaseStructure.ClkDiv = 0; TIM_TimeBaseStructure.CntMode = TIM_CNT_MODE_UP; TIM_InitTimeBase(TIM3, &TIM_TimeBaseStructure); /* Prescaler configuration */ //TIM_ConfigPrescaler(TIM3, PrescalerValue, TIM_PSC_RELOAD_MODE_IMMEDIATE); /* TIM3 enable update irq */ TIM_ConfigInt(TIM3, TIM_INT_UPDATE, ENABLE); /* TIM3 enable counter */ TIM_Enable(TIM3, ENABLE); } /** * @brief Configure the nested vectored interrupt controller. */ void TIM3_NVIC_Configuration(void) { NVIC_InitType NVIC_InitStructure; /* Enable the TIM3 global Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3; // 抢占式中断优先级 0-3,最低 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // 子中断优先级 0-3,最低 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } /** * @brief This function handles TIM3 global interrupt request. */ void TIM3_IRQHandler(void) { if (TIM_GetIntStatus(TIM3, TIM_INT_UPDATE) != RESET) { TIM_ClrIntPendingBit(TIM3, TIM_INT_UPDATE); //GPIOA->POD ^= GPIO_PIN_15; g_tim3_count++; if(g_tim3_count > uart1_recv_time) { Uart1_Cmd_State = kCmd_Head1; // 将命令处理标志复位 } //if(g_tim3_count % 1000 == 0) { // printf("tim3 count %d 0x%08x\r\n", g_tim3_count, SCB->VTOR); //} } } void TIM3_Init(void) { TIM3_RCC_Configuration(); TIM3_TIM_Configuration(); TIM3_NVIC_Configuration(); }