一.问题和原因DMAIDLE接发收数据问题在串口软件上发送端发送多个数据接收端每次只能接收1个字节。猜测1.可能是发生了某些错误导致DMA被关闭了我考虑的是加一个错误回调函数然后在里面重启开启DMA的接收。2.添加了错误回调函数后进行多次debug调式发现每次进来都是错误回调函数也不进DMAIDLE的回调函数具体也不清楚什么原因。3.在外部的DMA中断打断点发现这里是可以进来的单步进行下去查看发现里面的ErrorCode在进入查看好像和uart中断有关系具体也不清楚什么原因。4.于是在外部的中断打断点发现也是可以进来单步进行下去查看5.发现神奇的一步卡在noise错误每次都是噪音错误也是很少见。6.查了一些相关的资料发现外部晶振可能会影响串口的波特率造成噪音错误。于是我打开原理图一看外部晶振是24MHZ而我在cubemx里面配置的是25MHZ确实是我配置错误改过来之后也确实没问题了。二.总结1.晶振会影响串口的波特率2.DMAIDLE会发生3次中断·传输一半·IDLE传输空闲·全部完成3次都会进去以下的回调函数。Size本次空闲中断时DMA已经接收到的总字节数huart-RxXferSizeDMA缓冲区的大小UART_RX_BUF_LEN当 Size UART_RX_BUF_LEN 时说明DMA已经写满了整个缓冲区即将从头开始