STM32H725ZGT6 USART10中断失效,疑中断表文档勘误求助
排查STM32H725ZGT6 USART10中断无法触发的问题
针对你遇到的USART10轮询正常但中断不触发的问题,可以按以下步骤逐一排查:
确认UART中断使能位是否正确配置
STM32H7系列UART支持FIFO模式,若开启FIFO(USART10->CR3 & USART_CR3_FIFOEN为1),RX中断需使能RXFNEIE位(USART10->CR1 |= USART_CR1_RXFNEIE);若未开启FIFO,才需要使能RXNEIE位(USART10->CR1 |= USART_CR1_RXNEIE)。很多时候是混淆了这两个位导致中断不触发。验证NVIC配置的准确性
你当前设置NVIC_ISER4的第28位对应中断号156,这个是正确的(ISER4管理中断号128-159,128+28=156)。但需确认:- 有没有误操作NVIC_ICER4寄存器关闭了该中断;
- 中断优先级配置是否合理(即使优先级低也应该能触发,但若配置了错误的抢占优先级导致被锁死则例外,可暂时设为最高优先级测试)。
检查中断向量表与中断服务函数的绑定
- 确认链接脚本中,USART10的中断服务函数(通常命名为
USART10_IRQHandler)被正确放置在向量表的0x02B0偏移位置; - 中断服务函数需用编译器关键字声明,比如
__attribute__((interrupt("IRQ")))(GCC)或__irq(Keil),确保编译器生成正确的中断入口代码; - 可在中断服务函数开头添加一个GPIO翻转操作,直接验证是否触发中断。
- 确认链接脚本中,USART10的中断服务函数(通常命名为
检查UART接收相关的状态位
手动发送一个字节后,读取USART10->ISR寄存器:- 若
RXNE或RXFNE位未置位:说明UART接收配置存在问题,需确认USART_CR1_UE(UART使能位)是否置位,波特率、帧格式(数据位、停止位、奇偶校验)是否与发送端匹配; - 若
RXNE/RXFNE位已置位但未触发中断:说明问题出在NVIC或向量表,需重新核对向量表偏移、ISR绑定是否正确。
- 若
排除外设冲突或配置遗漏
- 确认USART10的DMAR位(
USART_CR3_DMAR)是否清零,若开启DMA接收,RXNE位会被DMA自动清除,导致中断无法触发; - 检查USART10的引脚复用配置是否正确,虽然轮询正常,但需确认引脚的复用功能是否正确映射到USART10(比如是否误配置为其他外设)。
- 确认USART10的DMAR位(
内容的提问来源于stack exchange,提问作者Jeff Casey
相关产品推荐
相关产品推荐

