最近我在使用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传输。希望这个例子能对大家有所帮助!
|