最近项目遇到的问题,查询网络上的解决办法都没有解决,最终摸索出解决方案。
先介绍以下硬件环境。控制器:GD32F103RCT6,通信硬件:上位机信号通过USB-RS422串口线发送或接收数据,数据通过MAX490转为TTL电平与串口通信。
问题现象:硬件上电就会默认给上位机发送FF(00)或其它字节数据,当时我想上电发送0102030405以表示通信正常,但每次上电上位机都会接收到FF0102030405,或者000102030405,或者第一字节是其它的数据。总之,在你想发的数据之前总有一字节数据。
而在在线调试时却不会出现这样的问题,程序全速全部运行都没有一样的现象。因为产品较大,走线多且长,于是理解为上电顺接有干扰问题。
解决办法:我这的解决办法分为了硬件变动和软件加语句。先说硬件变动
1、通过下图对MAX490进行“上拉”,按道理这种接法会将5(Y)脚稳定为高状态。但这种方式可行后就没有试将3.3V和GND对调接成严格意义上的上拉状(可能也会行)。通过实验,在6(Z)和5(Y)间再多加一个10KΩ,然后将3.3V接在6(Z)和5(Y)之间也可行。
2、软件方面(也不可少),需要在串口初始化前将PA9(USART0_TX),和PA10(USART0_RX)单独再配置一遍普通的推挽输出。代码如下:
gpio_init(GPIOA,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9|GPIO_PIN_10 );
gpio_bit_set(GPIOA,GPIO_PIN_9 );
gpio_bit_set(GPIOA,GPIO_PIN_10 );
总结:我是通过这种办法解决的默认上电串口汇报一字节数据问题。但这样做有个缺点。、
缺点:这么改动的话通过SWD下载程序时候,Keil会提示,Inva ROM Table。
这时,需要将5(Y)的3.3V去掉才能下载,如果还不能下载,那就点击Option for Target(魔法棒)
选成这样的,然后点击Flash Download
改成这样即可正常下载,下载后将3.3V还重新接回。再上电就直接收到你想法的数据,而不会多字节。