最开始借助正点原子的视频教程在STM32mini板上跑通了串口的字节收发,但在移植程序到GD32的过程中遇到了一个bug:在b站找了GD32的串口教程手敲代码,却跟演示效果不一致,在while(1)循环里给上位机发送数据,虽然PC能够接收到USART发送来的数据,但勾选“HEX"显示的只有"00"。
排错的时候以为是串口收发代码的细节被自己敲漏了,但比对网上搜索的多份字节、字符串收发代码发现应该不是这里的问题。
试了一天之后才发现是自己的串口初始化配置出错——未设置成“复用”。
修改后针对使用的GD32F330RBT6代码如下:
/* USART0 GPIO config */
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_9);
gpio_af_set(GPIOA, GPIO_AF_1, GPIO_PIN_10);
//推挽复用输出
gpio_mode_set(GPIOA, GPIO_MODE_AF, GPIO_PUPD_PULLUP, GPIO_PIN_9 | GPIO_PIN_10);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9 | GPIO_PIN_10);
**ERROR**
原先的错误记录如下:
//设置TX为推挽输出
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE,GPIO_PIN_9);
gpio_output_options_set(GPIOA,GPIO_OTYPE_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_9);
//设置RX为浮空输入
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE,GPIO_PIN_10);
gpio_output_options_set(GPIOA,GPIO_PUPD_PULLUP,GPIO_OSPEED_50MHZ,
GPIO_PIN_10);