家人们,这个问题我已经解决了,但是不知道怎么复现了,只记得加了一句代码
if (__HAL_UART_GET_IT_SOURCE(&huart2, UART_IT_IDLE))
{
UART2_IDLECallback();
}
HAL_UART_IRQHandler(&huart2);
加在中断前面就能正常接收了,虽然是好了,但是不理解的代码我还是没拿来用,于是我翻新写了一个驱动,但还是想理解这个代码,我不理解的地方在于,有数据来了之后就会进入中断,然后接收,最后调用回调函数,整个中断完成。而这里的操作是是先判断指定的串口中断源是否开启,然后直接调用回调函数???补充这里是用了DMA的,所以我是没明白,DMA和中断的关系,也就是接收的整个流程逻辑,我觉得应该是有数据发进来会触发DMA接收中断,将数据存储在DMA指定的BUFF里面,然后串口自己的中断发现有数据发过来,就会进入串口中断,而在串口中断里面,我们只是一个数据的善后工作,比如知道数据的数量,判断中断标志位等等,真正的接收已经在DMA里面完成了。最后在这里真的感谢这个论坛里回复我的家人们,感谢你们的支持和帮助 |