You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.2 KiB
84 lines
2.2 KiB
#include "tim3.h" |
|
#include "usart1.h" |
|
#include <stdio.h> |
|
|
|
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(); |
|
}
|
|
|