在本人的设计中,STM32的USART(波特率115200)需每秒发送4000+字节到上位机。开启了STM32串口dma发送方式(normal mode,非循环方式),上位机接收显示正常。同时开启该串口的接收中断,发现STM32无法响应从上位机发回的信息(无法进入中断处理函数)。怀疑因为USART的发送与接收数据寄存器之地址相同,所以CPU无法在dma处理发送的过程中访问接收数据寄存器进而无法处理接收中断。尝试开启dma发送完成中断,并在此中断中关闭dma通道,清除dma中断标志(个人认为释放了关联上的USART, 之前没有开启发送中断,应该不必清除USART发送完成标志吧?),再计算带宽,理想情况下,一秒钟内,115200波特率传4000+字节能在400ms左右完成吧,假设剩下600ms的时间USART没有被dma通道使用,系统应该能够响应上位机在此期间发来的数据吧,但实际结果却非如此,CPU仍然无法进入USART中断,有些迷糊了。按说异步全双工串口应当能够收发同时进行哈,或者dma发送和中断式接收互斥?如前所述的类似半双工处理也不奏效……望各位多多指教!Thx! |