E015.D.011-FXLS90230/Drivers/BSP/timer.c

188 lines
4.4 KiB
C
Raw Normal View History

2025-04-24 11:37:10 +08:00
#include "timer.h"
#include "system.h"
/**
* @brief
* @param None
* @retval None
*configure as ext counter,but the pin is error
*/
unsigned char datain = 0;
/* USER CODE END 0 */
//static TIM2_Callback_t user_callback = NULL;
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>1
void TIM1_Init(uint32_t prescaler, uint32_t period)
{
// 1. ʹ<><CAB9>ʱ<EFBFBD><CAB1>
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
// 2. <20><><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4>Ƶ<EFBFBD><C6B5><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
TIM1->PSC = prescaler;
TIM1->ARR = period;
// 3. <20><><EFBFBD>ɸ<EFBFBD><C9B8><EFBFBD><EFBFBD>¼<EFBFBD><C2BC><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>
TIM1->EGR = TIM_EGR_UG;
// 4. <20><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
TIM1->DIER |= TIM_DIER_UIE; // ʹ<>ܸ<EFBFBD><DCB8><EFBFBD><EFBFBD>ж<EFBFBD>
//NVIC_SetPriority(TIM1_UP_TIM16_IRQn,TIM1_IRQ_PRIORITY); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
NVIC_SetPriority(TIM1_UP_TIM16_IRQn,0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>
NVIC_EnableIRQ(TIM1_UP_TIM16_IRQn); // ʹ<><CAB9>NVIC<49>ж<EFBFBD>
TIM1->CR1 |= TIM_CR1_CEN; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// 5. <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>
//tim1_config = *config;
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>2
void TIM2_Reg_Init(uint32_t prescaler, uint32_t period)
{
// 1. ʹ<><CAB9>ʱ<EFBFBD><CAB1>
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM2EN;
// 2. <20><><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TIM2->PSC = prescaler;
TIM2->ARR = period;
// 3. ʹ<>ܸ<EFBFBD><DCB8><EFBFBD><EFBFBD>ж<EFBFBD>
TIM2->DIER |= TIM_DIER_UIE;
// 4. <20><><EFBFBD><EFBFBD>NVIC
NVIC_SetPriority(TIM2_IRQn, TIM2_IRQ_PRIORITY);
NVIC_EnableIRQ(TIM2_IRQn);
TIM2_Reg_Start();
}
void TIM2_Reg_Start(void)
{
TIM2->CR1 |= TIM_CR1_CEN; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
}
void TIM2_Reg_Stop(void)
{
TIM2->CR1 &= ~TIM_CR1_CEN; // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2
}
void TIM1_Start(void)
{
TIM1->CR1 |= TIM_CR1_CEN; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
}
void TIM1_Stop(void)
{
TIM1->CR1 &= ~TIM_CR1_CEN; // ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1
}
void TIM2_Reg_SetPeriod(uint32_t period)
{
TIM2->ARR = period; // <20><>̬<EFBFBD>޸<EFBFBD><DEB8><EFBFBD><EFBFBD><EFBFBD>ֵ
}
void TIM1_SetPeriod(uint32_t period) {
TIM1->ARR = period; // ֱ<><D6B1><EFBFBD>޸<EFBFBD><DEB8>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>ֵ
TIM1->EGR = TIM_EGR_UG; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
}
/*<2A><>ʱ<EFBFBD><CAB1>1<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
void TIM1_UP_TIM16_IRQHandler(void) {
if (TIM1->SR & TIM_SR_UIF) { // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
TIM1->SR &= ~TIM_SR_UIF; // <20><><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
g_Data.Tim1Num0++;
if(g_Data.Tim1Num0 >= VIB_GETDATAMAXTIME)
{
g_Data.Tim1Num0 = VIB_GETDATAMAXTIME;
}
g_Data.Tim1Num1++;
if(g_Data.Tim1Num1 >= VIB_INTERVAl_TIME) //<2F><><EFBFBD><EFBFBD>ֵΪ100
{
g_Data.Tim1Num1=0;
// g_Data.GetadDataFlag=_TRUE; //50ms<6D><73><EFBFBD>Ҽ<EFBFBD>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD>־
g_Data.Tim1Num2++;
//if(g_Data.Tim1Num2 >= g_Data.Tim1Count1s) //<2F><>ʱ1s
if(g_Data.Tim1Num2 >= VIB_INTERVAl) //<2F><>ʱ1s 10<31>μ<EFBFBD><CEBC><EFBFBD>
{
g_Data.Tim1Num2 = 0;
// g_Data.Tim1Num3++;
g_Data.Tim1Count1sFlag=_TRUE; //1s<31><73>ʱʱ<CAB1><CAB1><EFBFBD><EFBFBD>־
}
}
}
}
//<2F><>ʱ<EFBFBD><CAB1>2<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void TIM2_IRQHandler(void)
{
if (TIM2->SR & TIM_SR_UIF) {
TIM2->SR &= ~TIM_SR_UIF; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
g_Data.Tim2Num0++;
if(g_Data.Tim2Num0 >= VIB_GETWOBMAXTIME) //<2F><>ʱ5ms
g_Data.Tim2Num0 = VIB_GETWOBMAXTIME;
g_Data.Tim2Num1++;
g_Data.Uart1OverCount++;
g_Data.Uart3OverCount++;
if(g_Data.Uart1OverCount > UARTOVERTIME) //300ms<6D><73><EFBFBD>ճ<EFBFBD>ʱ
{
g_Data.Uart1OverCount = 0;
g_Data.GetUart1OverFlag = 1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
}
if(g_Data.Uart3OverCount > UARTOVERTIME) //300ms<6D><73><EFBFBD>ճ<EFBFBD>ʱ
{
g_Data.Uart3OverCount = 0;
g_Data.GetUart3OverFlag = 1; //<2F><><EFBFBD>з<EFBFBD><D0B7><EFBFBD>
}
if(g_Data.Tim2Num1 >= VIB_GETWOBMAXTIME) //<2F><><EFBFBD><EFBFBD>ֵΪ200 1s
{
g_Data.Tim2Num1 = 0;
g_Data.Tim2Num3 ++;
}
if(g_Data.Uart1RcvOverTime) //<2F><><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ճ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>
{
g_Data.Uart1RcvOverTime--;
if(!g_Data.Uart1RcvOverTime)
{
if(s_Data.UartStaus!=Receive_busy)
{
s_Data.UartStaus = Receive_head;
s_Data.ReceiveOffset = 0;
s_Data.ReceiveOKFlag=_FALSE;
}
}
}
}
}
/**
* @brief <EFBFBD><EFBFBD><EFBFBD><EFBFBD>PB10Ϊ<EFBFBD>½<EFBFBD><EFBFBD>ش<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ж<EFBFBD>
* @note <EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIO<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>NVIC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void PB10_EXTI_Init(void)
{
// 1. <20><><EFBFBD><EFBFBD>GPIOB<4F><42>SYSCFGʱ<47><CAB1>
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_SYSCFG_CLK_ENABLE();
// 2. <20><><EFBFBD><EFBFBD>GPIO
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.Pin = GPIO_PIN_10;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // <20>½<EFBFBD><C2BD>ش<EFBFBD><D8B4><EFBFBD>
GPIO_InitStruct.Pull = GPIO_PULLUP; // <20><><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
//GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // <20><><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD><EFBFBD>͹<EFBFBD><CDB9>ģ<EFBFBD>
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
// 3. <20><><EFBFBD><EFBFBD>NVIC<49><43><EFBFBD>жϿ<D0B6><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HAL_NVIC_SetPriority(EXTI15_10_IRQn, 2, 2); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD>ռ2<D5BC><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȼ<EFBFBD>2<EFBFBD><32>
HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); // ʹ<><CAB9><EFBFBD>ж<EFBFBD>ͨ<EFBFBD><CDA8>
}
/**
* @brief EXTI10-15<EFBFBD>жϷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @note <EFBFBD><EFBFBD>stm32l4xx_it.c<EFBFBD>е<EFBFBD><EFBFBD>ô˺<EFBFBD><EFBFBD><EFBFBD>
*/
void EXTI15_10_IRQHandler(void)
{
HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_10); // <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־
}