|
|
|
|
#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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>9<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϣ<EFBFBD><EFBFBD><EFBFBD>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; // <EFBFBD><EFBFBD>ռʽ<EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD> 0-3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; // <EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD> 0-3<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
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; // <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD><EFBFBD>λ
|
|
|
|
|
}
|
|
|
|
|
//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();
|
|
|
|
|
}
|