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