CH32V307 串口+DMA 发送数据 DMA发送第一次成功,第二次开始DMA中断触发但一直被挂起

硬件:CH32V307V-R1-1V0 官方demo板

CH32V307  串口+DMA 发送数据,代码删减只剩串口,仅仅在main循环1S打印“hello world”。

第一次发送DMA可以正常触发完全传输中断也可以清除中断标志位,第二次循环可以正常打印“hello world”,但这时候不会进入DMA中断处理函数。从寄存器看,DMA中断已使能,标志位也已置位,PFIC 中断挂起状态寄存器显示DMA中断挂起,无法进入DMA中断。

这个问题能否帮忙分析一下?附件提供原工程


icon_rar.gifBootLoader.zip


整个串口框架流程从以前STM32工程移过来的,框架应该没问题,由于第二次的DMA发送完成中断没进入,没法清除串口忙标志,导致第三次发送一直卡在忙标志位判断中,这时候MCU一直在while循环中什么也没干,DMA传输完成标志已置位,中断一直被挂起。这里没弄明白为什么会挂起?为什么不会抢占?


您好,中断函数需要添加中断声明的,如下图,你可以在程序中参照下图添加一下中断声明试一下

image.png


解决了,加了声明确实可以了感谢!  

以前用Cortex-M不需要,没留意到这一点。但奇怪,编译器没报错,第一次中断也可以进,没往这点去想....


只有登录才能回复,可以选择微信账号登录