你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32U575的LPTIM中断问题

[复制链接]
congzh0 提问时间:2026-4-30 17:55 / 未解决

我希望使用LPTIM4实现1秒钟一次的内部中断,中断发生后翻转IO。

调用定时器开始函数后立即进入中断。中断函数中清除中断后,马上又进入中断,感觉没有清除成功。通过调试观察寄存器LPTIM4->ISR确实没有马上清除。哪位老师帮我看看是哪里的问题。

我使用HAL库也试了一下,还是相同的现象。

定时器开始函数

void LPTIM4_Start_IT(uint32_t Period)
{
LPTIM4->CFGR &= ~(LPTIM_CFGR_WAVE);
LPTIM4->CR   |=  (LPTIM_CR_ENABLE);

LPTIM4->ICR   =  (LPTIM_ICR_CMP1OKCF);
LPTIM4->CCR1  =  (Period/2 - 1);
while(!(LPTIM_ICR_CMP1OKCF & LPTIM4->ISR));

LPTIM4->ICR   =  (LPTIM_ICR_ARROKCF);
LPTIM4->ARR   =  (Period - 1);
while(!(LPTIM_ICR_ARROKCF & LPTIM4->ISR));

LPTIM4->ICR   =  (LPTIM_ICR_DIEROKCF);
LPTIM4->DIER |=  (LPTIM_DIER_UEIE | LPTIM_DIER_ARRMIE | LPTIM_DIER_CC1IE);
while(!(LPTIM_ISR_DIEROK & LPTIM4->ISR));

LPTIM4->CR   &= ~(LPTIM_CR_ENABLE);
LPTIM4->ICR   =  (LPTIM_ICR_DIEROKCF | LPTIM_ICR_REPOKCF | LPTIM_ICR_ARROKCF | LPTIM_ICR_CMP1OKCF);
LPTIM4->CR   |=  (LPTIM_CR_ENABLE);
LPTIM4->CR   |=  (LPTIM_CR_CNTSTRT);
}

中断函数

void LPTIM4_IRQHandler(void)
{
if(LPTIM_ISR_ARRM & LPTIM4->ISR)
{
LPTIM4->ICR  =  (LPTIM_ICR_ARRMCF);
HAL_GPIO_TogglePin(GPIOC, CTRL3_Pin);
}
if(LPTIM_ISR_CC1IF & LPTIM4->ISR)
{
LPTIM4->ICR  =  (LPTIM_ICR_CC1CF);
}
if(LPTIM_ISR_UE & LPTIM4->ISR)
{
LPTIM4->ICR  =  (LPTIM_ICR_UECF);
}
}

主函数

int main(void)
{

HAL_Init();

SystemClock_Config();
MX_GPIO_Init();
MX_LPTIM4_Init();

LPTIM4_Start_IT(1000);

while (1)
{}
}
收藏 评论0 发布时间:2026-4-30 17:55

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版