#include "../main/SystemInclude.h" /*==================================================================================*/ /*BTimer0 */ /*==================================================================================*/ /**------------------------------------------------------------------------ * @brief 基础定时器初始化 * @note 只做初始化,不带启动 * @param btim_period : 计算方法(btim_period=t*syscklock) **/ void BTIM0_Init(uint16_t btim_period) { BTIM_Base_InitTypeDef BTIM_InitStructure; BTIM_InitStructure.MDIS = ENABLE; // 启用基础定时器 BTIM_InitStructure.FreezingMode = DISABLE; BTIM_InitStructure.ChainedMode = DISABLE; LHL_BTIM_Base_Init(BTIM, &BTIM_InitStructure); LHL_BTIM_SetPeriod(BTIMER_0,btim_period ); LHL_BTIM_ITConfig(BTIMER_0, ENABLE); // NVIC_EnableIRQ(TIM5_IRQn); // BTIMER0对应TIM5_IRQ } /**------------------------------------------------------------------------ * @brief 基础定时器 * @note 单独调用直接启用 * @param btim_period : 计算方法(btim_period=t*syscklock) * @example: StartBtimer0(syscklock); //1s **/ void StartBtimer0(uint16_t btim_period) { BTIM0_Init(btim_period); BTIM->TCTRL_0 |= BTIM_TCTRL_TEN_Msk; //开启定时器 LHL_BTIM_Start(BTIMER_0,btim_period,0); // NVIC_EnableIRQ(TIM5_IRQn); // BTIMER0对应TIM5_IRQ } void StopBtimer0(void) { // LHL_BTIM_Stop(BTIMER_0); BTIM->TCTRL_0 &= ~BTIM_TCTRL_TEN_Msk; } /*==================================================================================*/ /*BTimer1 */ /*==================================================================================*/ void BTIM1_Init(uint16_t btim_period) { BTIM_Base_InitTypeDef BTIM_InitStructure; BTIM_InitStructure.MDIS = ENABLE; // 启用基础定时器 BTIM_InitStructure.FreezingMode = DISABLE; BTIM_InitStructure.ChainedMode = DISABLE; LHL_BTIM_Base_Init(BTIM, &BTIM_InitStructure); LHL_BTIM_SetPeriod(BTIMER_1,btim_period ); LHL_BTIM_ITConfig(BTIMER_1, ENABLE); // NVIC_EnableIRQ(TIM6_IRQn); // BTIMER1对应TIM6_IRQ } void StartBtimer1(uint16_t btim_period) { BTIM1_Init(btim_period); BTIM->TCTRL_1 |= BTIM_TCTRL_TEN_Msk; //开启定时器 LHL_BTIM_Start(BTIMER_0,btim_period,0); // NVIC_EnableIRQ(TIM6_IRQn); // BTIMER1对应TIM6_IRQ } void StopBtimer1(void) { // LHL_BTIM_Stop(BTIMER_1); BTIM->TCTRL_1 &= ~BTIM_TCTRL_TEN_Msk; } /*-===================================================================================================== //定时器中断回调 -=====================================================================================================*/ static btimer_irq_callback_t btim0_irq_callback ,btim1_irq_callback ; void Btimer_register_irq_callback(BTIM_ID_t timer, btimer_irq_callback_t btim_irq_callback) { if(timer == BTIMER_0) {btim0_irq_callback = btim_irq_callback; LHL_BTIM_ClearPending(BTIMER_0);NVIC_EnableIRQ(TIM5_IRQn);} else if(timer == BTIMER_1) {btim1_irq_callback = btim_irq_callback; LHL_BTIM_ClearPending(BTIMER_1);NVIC_EnableIRQ(TIM6_IRQn);} } // BTIMER0对应TIM5_IRQ void TIM5_IRQHandler(void) { if (btim0_irq_callback != NULL) btim0_irq_callback();// 调用用户注册的回调函数 LHL_BTIM_Stop(BTIMER_0); // 停止BTIM LHL_BTIM_ClearPending(BTIMER_0); // 清中断标志 } //BTIMER1对应TIM6_IRQ void TIM6_IRQHandler(void) { if (btim1_irq_callback != NULL) btim1_irq_callback();// 调用用户注册的回调函数 LHL_BTIM_Stop(BTIMER_1); // 停止BTIM LHL_BTIM_ClearPending(BTIMER_1); // 清中断标志 }