之前就遇到过一次,但是长时间没用过dma,又给忘记了。
问题描述:
使用stm32cubemx配置各种usart,并且优先级使用的是默认的配置。
因为在使用相关的模块驱动,直接移植以前写的程序,结果移植的是古老的,没有修改过的程序。其中就是在usart2的中断里面使用的usart3的DMA。在模块运行的时候,一直发现输出数据的时候,数据少了半截,并且卡死。
原因:
在USART2_IRQHandler()函数中,使用了HAL_UART_Transmit_DMA()函数。这样产生了一个问题,DMA是需要中断才能使用的,这就相当于,在一个中断优先级为5的一个中断中,又开了一个中断优先级为5的DMA,这样中断中,是会冲突的,很容易卡死。
解决方法:
1、在usart2的中断中不使用DMA。
2、将DMA的优先级>usart2的中断优先级。
本文描述了在STM32CubeMX配置USART时,因在USART2的中断中错误地使用USART3的DMA导致的数据丢失及系统卡死问题。分析了DMA与中断优先级冲突的原因,并给出了两种解决方案。
9995

被折叠的 条评论
为什么被折叠?



