gd32f103使用串口
时间: 2025-01-02 19:39:26 浏览: 8
### 关于GD32F103单片机串口通信的使用方法
#### 串口初始化设置
为了使能并配置GD32F103系列微控制器上的UART接口用于异步串行通讯,需先完成必要的硬件资源分配以及参数设定工作。这通常涉及到开启对应外设时钟、指定GPIO引脚功能复用为USART收发模式,并调整传输速率(即波特率)、字符长度等属性。
对于具体的实现细节,在`stm32f10x_usart.c`源文件中有详细的函数定义来辅助开发者快速搭建起基本框架[^1]。例如:
```c
void USART_Configuration(void){
/* 配置USART */
usart_init(USART0, 115200); // 设置波特率为115200 bps
/* GPIO端口配置 */
gpio_mode_set(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9);
gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, GPIO_PIN_10);
/* 打开USART中断 */
nvic_enable_irq(NVIC_USART0_IRQ);
}
```
上述代码片段展示了如何通过调用库函数来进行初步的串口初始化操作,其中包含了对USART模块本身及其关联I/O管脚的功能选择与速度等级设定;同时也开启了相应的NVIC中断请求通道以便后续处理接收到的数据流事件。
#### 数据发送接收流程
当完成了前期准备工作之后,则可以利用预封装好的API接口轻松地向目标设备传递消息或是读取其反馈的信息包。下面给出了一组简单的例子说明怎样执行这些任务:
```c
// 发送字符串给另一台机器
char *str = "Hello World!";
usart_transmit_data8(USART0, (uint8_t *) str, strlen(str));
// 接受来自其他装置的消息
while (!usart_flag_get(USART0, USART_FLAG_RBNE));
char received_char = usart_receive_data8(USART0);
printf("Received char: %c\n", received_char);
```
这里分别演示了两种典型的应用场景——一是主动推送一段文本至远端节点;二是被动监听是否有新的输入到达本侧,并将其显示出来供调试人员查看验证。
#### 中断服务程序设计
考虑到实时响应的需求,往往还需要编写专门针对特定异常状况下的ISR(Interrupt Service Routine),比如检测到错误条件发生时采取适当措施加以恢复,或者是每当有新字节进入缓冲区就触发一次回调机制通知应用程序层做进一步解析等工作。如下所示是一个典型的模板结构:
```c
void USART0_IRQHandler(void){
if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)){
uint8_t ch;
while(!usart_flag_get(USART0, USART_FLAG_TBE));
ch = usart_receive_data8(USART0);
printf("%c",ch);
}
}
```
这段代码实现了对接收到的新字符立即打印输出的功能,同时确保每次只处理一个完整的ASCII码值而非中途打断正在传送中的多字节序列。
阅读全文