大家好,
我想利用
STM32H723ZG 的 LP
tiM1 模块来产生 1ms 的中断。
时钟频率使用 64Mhz (HSI)。
环境:Nucleo 144 STM32H723ZG
预分频器:除以 128
自动重载寄存器值:500u
下面是init函数的代码片段:
void Timer_driver_init(void)
{
// 启用 LPTIM1 的外设时钟
RCC->APB1LENR = RCC_APB1LENR_LPTIM1EN;
// NVIC 初始化
NVIC_EnableIRQ(LPTIM1_IRQn);
// 配置 LPTIM
定时器->CFGR |= TIMER_INTERNAL_CLK | TIMER_COUNTERSOURCE_INTERNAL|
TIMER_SOFTWARE_TRIGGER | TIMER_UPDATE_IMMEDIATE ;
// 更新预分频器
TIMER->CFGR |= TIMER_PRESCALER ;
// 更新自动重载寄存器
TIMER->ARR = TIMER_PERIOD;
//启用自动重载匹配中断
定时器->IER |= LPTIM_IER_ARRMIE;
// 启用 LPTIM 模块
定时器->CR |= LPTIM_CR_ENABLE;
// 等待定时器计数器被启用
while ((TIMER->CR & LPTIM_CR_ENABLE) != LPTIM_CR_ENABLE);
//启用后启动计数器
定时器->CR |= LPTIM_CR_CNTSTRT;
}
中断处理程序回调:
void Timer_driver_irqHandler(void)
{
静态 uint16_t HwTimer_tick_count_l_u16 = 0U;
如果(定时器->ISR & LPTIM_ISR_ARRM)
{
// 自动重载匹配清除标志
定时器->ICR |= LPTIM_ICR_ARRMCF;
d_HwTimer_counter_mS_u16++; // 递增 mS 计数器
HwTimer_tick_count_l_u16++;
如果(HwTimer_tick_count_l_u16 == 1000U)
{
d_HwTimer_counter_S_u16++; //递增S计数器
HwTimer_tick_count_l_u16 = 0;
}
}
}
问题:定时器中断太频繁,不是1ms产生。