基于GD32 MCU的UART串口通信实现及代码示例

[复制链接]
3868|9
 楼主| 万图 发表于 2024-10-5 08:16 | 显示全部楼层 |阅读模式

最近我在使用GD32F103 MCU做项目,主要实现了UART串口通信,用于传感器数据的记录并通过串口发送到电脑上显示。GD32的配置与STM32非常相似,但时钟和外设上略有差别。这里分享一下实现UART通信的完整代码,使用Keil开发环境。

  1. #include "gd32f10x.h"

  2. void uart_init(void) {
  3.     rcu_periph_clock_enable(RCU_USART0);    // USART0时钟使能
  4.     rcu_periph_clock_enable(RCU_GPIOA);     // GPIOA时钟使能
  5.    
  6.     gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);   // PA9 TX
  7.     gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10);  // PA10 RX
  8.    
  9.     usart_deinit(USART0);    // 复位USART0
  10.     usart_baudrate_set(USART0, 115200);  // 设置波特率115200
  11.     usart_word_length_set(USART0, USART_WL_8BIT);  // 8位数据
  12.     usart_stop_bit_set(USART0, USART_STB_1BIT);    // 1位停止位
  13.     usart_parity_config(USART0, USART_PM_NONE);    // 无奇偶校验
  14.     usart_hardware_flow_rts_config(USART0, USART_RTS_DISABLE);  // 禁用硬件流控制
  15.     usart_hardware_flow_cts_config(USART0, USART_CTS_DISABLE);  // 禁用硬件流控制
  16.     usart_receive_config(USART0, USART_RECEIVE_ENABLE);  // 使能接收
  17.     usart_transmit_config(USART0, USART_TRANSMIT_ENABLE);  // 使能发送
  18.     usart_enable(USART0);    // 使能USART0
  19. }

  20. void uart_send_data(uint8_t data) {
  21.     usart_data_transmit(USART0, data);    // 发送数据
  22.     while (usart_flag_get(USART0, USART_FLAG_TBE) == RESET);  // 等待发送完成
  23. }

  24. uint8_t uart_receive_data(void) {
  25.     while (usart_flag_get(USART0, USART_FLAG_RBNE) == RESET);  // 等待接收完成
  26.     return usart_data_receive(USART0);    // 返回接收到的数据
  27. }

  28. int main(void) {
  29.     uart_init();   // 初始化UART
  30.     uint8_t received_data;
  31.    
  32.     while(1) {
  33.         received_data = uart_receive_data();   // 接收数据
  34.         uart_send_data(received_data);  // 发送回接收到的数据,进行回环测试
  35.     }
  36. }

这段代码实现了UART的初始化、数据发送和接收功能。通过USB转串口模块,我能成功将传感器数据传送到PC,进行简单的回环测试。GD32在性能上表现很稳定,代码执行效率高。你也可以在此基础上扩展功能,如添加中断处理或DMA传输。希望这个例子能对大家有所帮助!
公羊子丹 发表于 2024-10-5 08:16 | 显示全部楼层
这代码写得很清楚!刚好我也在用GD32,试一下看看效果
周半梅 发表于 2024-10-5 08:17 | 显示全部楼层
好东西啊!一直在纠结串口通信,没想到这么简单
帛灿灿 发表于 2024-10-5 08:17 | 显示全部楼层
我刚入手GD32,这个例子很实用,直接拿去测试了
童雨竹 发表于 2024-10-5 08:17 | 显示全部楼层
感谢分享,回环测试挺适合做基本通信验证的,学到了
Wordsworth 发表于 2024-10-5 08:18 | 显示全部楼层
代码注释太到位了,跟着学下来对我这种新手特别友好
Bblythe 发表于 2024-10-5 08:18 | 显示全部楼层
正好在找UART的例子,看到你的代码省了不少时间,感谢
Pulitzer 发表于 2024-10-5 08:18 | 显示全部楼层
请教一下,你有尝试过用DMA来优化这个串口通信吗
Uriah 发表于 2024-10-5 08:18 | 显示全部楼层
GD32的配置跟STM32确实挺像的,迁移过来挺方便
Clyde011 发表于 2024-10-5 08:19 | 显示全部楼层
115200的波特率在实际应用中够用吗?我一直有点纠结波特率设置
您需要登录后才可以回帖 登录 | 注册

本版积分规则

169

主题

6161

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部