打印

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

[复制链接]
48|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
万图|  楼主 | 2024-10-5 08:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

#include "gd32f10x.h"

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

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

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

int main(void) {
    uart_init();   // 初始化UART
    uint8_t received_data;
   
    while(1) {
        received_data = uart_receive_data();   // 接收数据
        uart_send_data(received_data);  // 发送回接收到的数据,进行回环测试
    }
}

这段代码实现了UART的初始化、数据发送和接收功能。通过USB转串口模块,我能成功将传感器数据传送到PC,进行简单的回环测试。GD32在性能上表现很稳定,代码执行效率高。你也可以在此基础上扩展功能,如添加中断处理或DMA传输。希望这个例子能对大家有所帮助!

使用特权

评论回复
沙发
公羊子丹| | 2024-10-5 08:16 | 只看该作者
这代码写得很清楚!刚好我也在用GD32,试一下看看效果

使用特权

评论回复
板凳
周半梅| | 2024-10-5 08:17 | 只看该作者
好东西啊!一直在纠结串口通信,没想到这么简单

使用特权

评论回复
地板
帛灿灿| | 2024-10-5 08:17 | 只看该作者
我刚入手GD32,这个例子很实用,直接拿去测试了

使用特权

评论回复
5
童雨竹| | 2024-10-5 08:17 | 只看该作者
感谢分享,回环测试挺适合做基本通信验证的,学到了

使用特权

评论回复
6
Wordsworth| | 2024-10-5 08:18 | 只看该作者
代码注释太到位了,跟着学下来对我这种新手特别友好

使用特权

评论回复
7
Bblythe| | 2024-10-5 08:18 | 只看该作者
正好在找UART的例子,看到你的代码省了不少时间,感谢

使用特权

评论回复
8
Pulitzer| | 2024-10-5 08:18 | 只看该作者
请教一下,你有尝试过用DMA来优化这个串口通信吗

使用特权

评论回复
9
Uriah| | 2024-10-5 08:18 | 只看该作者
GD32的配置跟STM32确实挺像的,迁移过来挺方便

使用特权

评论回复
10
Clyde011| | 2024-10-5 08:19 | 只看该作者
115200的波特率在实际应用中够用吗?我一直有点纠结波特率设置

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

28

主题

3623

帖子

0

粉丝