添加普冉 PY32F040 OTA 双工程代码生成模板
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
/******************************************************************************
|
||||
* @file jb_timer.c
|
||||
* @brief TIM6 1ms 基础定时器硬件驱动实现
|
||||
* @author cyWu <1917507415@qq.com>
|
||||
* @date 2026.08.10
|
||||
* @version V1.0.1
|
||||
* @history
|
||||
* - V1.0.1, 2026.08.10, cyWu, 软件 ms 计数交还协议层,本模块仅负责 TIM6 硬件
|
||||
* - V1.0.0, 2026.08.10, cyWu, 首次发布
|
||||
******************************************************************************/
|
||||
|
||||
#include "jb_timer.h"
|
||||
#include "log.h"
|
||||
|
||||
/*============================================================================*/
|
||||
/* 私有变量 */
|
||||
/*============================================================================*/
|
||||
|
||||
TIM_HandleTypeDef g_jb_tim_handle;
|
||||
static uint8_t s_initialized;
|
||||
|
||||
/*============================================================================*/
|
||||
/* 公有接口 */
|
||||
/*============================================================================*/
|
||||
|
||||
/**
|
||||
* @brief 初始化 TIM6 为 1ms 周期中断
|
||||
* @return JbTimer_Ret_t
|
||||
*/
|
||||
JbTimer_Ret_t jb_timer_init(void)
|
||||
{
|
||||
uint32_t pclk1;
|
||||
uint32_t tim_clk;
|
||||
|
||||
if (s_initialized)
|
||||
{
|
||||
return JB_TIMER_OK;
|
||||
}
|
||||
|
||||
/* APB 不分频时 TIMCLK=PCLK1;分频时 TIMCLK=2*PCLK1 */
|
||||
pclk1 = HAL_RCC_GetPCLK1Freq();
|
||||
if ((RCC->CFGR & RCC_CFGR_PPRE) == RCC_HCLK_DIV1)
|
||||
{
|
||||
tim_clk = pclk1;
|
||||
}
|
||||
else
|
||||
{
|
||||
tim_clk = pclk1 * 2U;
|
||||
}
|
||||
|
||||
g_jb_tim_handle.Instance = JB_TIMER;
|
||||
g_jb_tim_handle.Init.Prescaler = (tim_clk / 1000000U) - 1U;
|
||||
g_jb_tim_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
|
||||
g_jb_tim_handle.Init.Period = (1000U * JB_TIMER_PERIOD_MS) - 1U;
|
||||
g_jb_tim_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
|
||||
g_jb_tim_handle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
|
||||
g_jb_tim_handle.Init.RepetitionCounter = 0;
|
||||
|
||||
if (HAL_TIM_Base_Init(&g_jb_tim_handle) != HAL_OK)
|
||||
{
|
||||
return JB_TIMER_ERR_HAL;
|
||||
}
|
||||
|
||||
if (HAL_TIM_Base_Start_IT(&g_jb_tim_handle) != HAL_OK)
|
||||
{
|
||||
return JB_TIMER_ERR_HAL;
|
||||
}
|
||||
|
||||
s_initialized = 1U;
|
||||
appPrintf(LOG_NOTIC, "TIM6 1ms timer started, pclk=%lu tim_clk=%lu\r\n",
|
||||
(unsigned long)pclk1, (unsigned long)tim_clk);
|
||||
return JB_TIMER_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief 获取初始化状态
|
||||
* @return JbTimer_Ret_t
|
||||
*/
|
||||
JbTimer_Ret_t jb_timer_get_status(void)
|
||||
{
|
||||
if (!s_initialized)
|
||||
{
|
||||
return JB_TIMER_ERR_NOT_INIT;
|
||||
}
|
||||
return JB_TIMER_OK;
|
||||
}
|
||||
Reference in New Issue
Block a user