1、通过stm32配置时钟,串口参数。
2、配置串口DMA,normal模式。
3、打开串口中断,如果不开启串口中断,则程序只能发送一次数据,程序不能判断DMA传输是否完成,USART一直处于busy状态。
4、定义局部数组,HAL_UART_Transmit_DMA发送,发现后面几个字节数据错误,把局部数组改为全局数组就没问题。
5、用std库,采用DMA给485发送数据。
99%都是串口中断程序写错了。原因考虑中断内语句太多以致于第一个个字符还没接收处理完成下一个字符来了中断不了!115200的波特率应该是毫无压力的!
这个问题很好处理,就是上电过程中它的波特率或者数值不稳定,是随机的,所以是一堆乱码,建议你在程序之初延时或者加一个条件,待系统稳定之后再发送命令即可。
汉字乱码是因为你显示汉字的时候使用的码和原来传输的码不匹配,和用什么通信无关
显示乱码一般是波特率配置的不对。你上面贴的程序中没有配置波特率啊,估计就是这个问题。发送端和接收端的波特率一般一致,另外停止位等也必须一致。
本文标签:stm32串口内存错乱