
; h+ x! @9 r7 B 串口异常 问题描述:使用STM32 CUBEMX生成的串口代码发送数据,第一帧数据之前会有一个0xFF。 硬件使用的是STM32F107VCT6的PD5、PD6 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps10.jpg PD5、PD6默认为普通IO口,管脚重映射为串口功能 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps11.jpg 使用STM32 CUBEMX生成的串口代码发送数据,第一帧数据之前会有一个0xFF,这并不是我的本意 ; `1 c: X- {$ s _- O/ { z6 A8 ^+ x file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps12.jpg 通过示波器观察PD5引脚的波形,发现每次复位单片机后捕捉到的波形是 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps13.jpg 单步调式发现运行到__HAL_AFIO_REMAP_USART2_ENABLE();之后会使PD5引脚产生一个低电平脉冲 1 p+ [, z* \+ G9 Z6 B$ u) o file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps14.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps15.jpg 将代码做如下调整,再次测量发现问题得到解决,低电平脉冲不见了,串口调试助手收到的数据也正常了 file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps16.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps17.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml7784\wps18.jpg |
依UART原理,所有UART发送数据都有有启动位开始,也就是拉低(1位或1.5位时间依配置),STM32 在REset 之后,是INPUT 模式,此时可能是低电平,然后配置成高与OUTPUT模式,接收端会误以为UART 启动发送。 需要解决这个问题,TX 或 RX 硬件10K上拉到VCC, 然后软件初始化串口IO 先设轩高电平,然后更改输出模式。通常可以解决上电发送一个0XFF. 其实不仅是UART会出现此情况。 |