转https://blog.csdn.net/u014515202/article/details/73293917
想做好通信,串口一定要非常熟,一个经典的问题。
很多时候,看问题多个角度看,串口容易出问题,可以多从固件库看看原理,如中断标志的清理等等,不要局限于HAL库。
1,方法3:实现思路:直接利用stm32的RXNE和IDLE中断进行接收不定字节数据。
RXNE中断和IDLE中断的区别?
当接收到1个字节,就会产生RXNE中断,当接收到一帧数据,就会产生IDLE中断。比如给单片机一次性发送了8个字节,就会产生8次RXNE中断,1次IDLE中断。
2、方法2:DMA接受+IDLE中断//主推,不易丢失数据
实现思路:采用STM32F103的串口1,并配置成空闲中断IDLE模式且使能DMA接收,并同时设置接收缓冲区和初始化DMA。那么初始化完成之后,当外部给单片机发送数据的时候,假设这帧数据长度是200个字节,那么在单片机接收到一个字节的时候并不会产生串口中断,而是DMA在后台把数据默默地搬运到你指定的缓冲区里面。当整帧数据发送完毕之后串口才会产生一次中断,此时可以利用DMA_GetCurrDataCounter();函数计算出本次的数据接受长度,从而进行数据处理。
3,2018/8/8
传输多行数据