1. 串口通信基础从概念到硬件连接第一次接触GD32F303的串口功能时我完全被各种术语搞晕了。USART、UART、波特率、数据帧...这些名词听起来很专业其实理解起来并不难。让我用最直白的方式给你解释清楚。串口通信就像两个人用对讲机通话。对讲机需要约定好相同的频道波特率说话要有开始和结束的标记起始位和停止位还要确认对方是否听清楚了校验位。在GD32F303上USART0就是我们最常用的对讲机频道对应PA9(TX)和PA10(RX)两个引脚TX负责发送数据RX负责接收数据。硬件连接特别简单你只需要用USB转TTL模块连接开发板模块的TX接开发板的RX(PA10)模块的RX接开发板的TX(PA9)共地连接(GND接GND)我刚开始总把TX和RX接反导致数据传不出去。后来记住一个口诀发对收收对发就是开发板的TX接模块的RX开发板的RX接模块的TX。2. USART与UART的区别同步还是异步很多新手会困惑USART和UART的区别。简单来说UART只能异步通信而USART既支持异步也支持同步。就像手机的通话功能同步和短信功能异步的区别。在GD32F303上我们通常使用异步模式这时USART和UART的用法完全一样。同步模式一般用于特殊场景比如驱动SPI设备。异步通信的优势是不需要时钟线接线简单缺点是传输速率不能太高且需要双方约定好相同的波特率。我实测过GD32F303的USART0在115200波特率下非常稳定。高于这个速率时偶尔会出现数据丢失所以建议新手先用这个波特率。3. 串口初始化配置一步一步来配置串口就像设置对讲机需要把各个参数都调对。下面是我调试多次后总结的最佳配置方案void uart0_init(void) { // 1. 开启时钟 rcu_periph_clock_enable(RCU_GPIOA); rcu_periph_clock_enable(RCU_USART0); // 2. 配置GPIO引脚 gpio_init(GPIOA, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9); // TX gpio_init(GPIOA, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_10); // RX // 3. 复位USART usart_deinit(USART0); // 4. 设置波特率115200 usart_baudrate_set(USART0, 115200U); // 5. 使能接收和发送 usart_receive_config(USART0, USART_RECEIVE_ENABLE); usart_transmit_config(USART0, USART_TRANSMIT_ENABLE); // 6. 使能USART usart_enable(USART0); }这里有几个容易出错的地方忘记开启GPIO时钟和USART时钟我就犯过这个错TX引脚要配置为复用推挽输出RX配置为浮空输入波特率设置要准确常用的有9600、115200等4. 数据发送三种常用方式实际项目中我们需要发送不同类型的数据。我整理了三种最常用的发送函数4.1 发送单个字节void uart0_send_byte(uint8_t ch) { usart_data_transmit(USART0, ch); while(RESET usart_flag_get(USART0, USART_FLAG_TBE)); }这个函数会等待发送完成才返回。TBE标志位表示发送缓冲区为空可以发送下一个字节。4.2 发送字符串void uart0_send_string(uint8_t *str) { while(*str) { uart0_send_byte(*str); } }使用时直接传入字符串指针比如uart0_send_string(Hello GD32F303!\r\n);4.3 发送任意数据数组void uart0_send_data(uint8_t *data, int len) { for(int i0; ilen; i) { uart0_send_byte(data[i]); } }这个函数特别适合发送传感器数据或自定义协议数据。5. 中断接收数据高效处理方案串口接收最可靠的方式是使用中断。下面是我在实际项目中验证过的稳定方案#define BUFFER_SIZE 100 uint8_t uart0_rx_buff[BUFFER_SIZE]; uint16_t uart0_rx_index 0; void USART0_IRQHandler(void) { if(usart_interrupt_flag_get(USART0, USART_INT_FLAG_RBNE)) { uint8_t ch usart_data_receive(USART0); if(uart0_rx_index BUFFER_SIZE) { uart0_rx_buff[uart0_rx_index] ch; // 检测到回车换行认为一条命令结束 if(ch \n || ch \r) { process_command(uart0_rx_buff, uart0_rx_index); uart0_rx_index 0; } } else { // 缓冲区溢出处理 uart0_rx_index 0; } } }使用中断接收需要注意在主程序中开启USART中断在NVIC中配置USART0中断优先级缓冲区大小要合适太小容易溢出太大浪费内存6. 调试技巧串口助手的使用调试串口时一个好用的串口调试助手能事半功倍。我推荐使用以下功能自动添加回车换行发送时勾选加回车换行十六进制显示调试二进制数据时特别有用定时发送功能测试通信稳定性常见问题排查如果收不到数据检查接线是否正确波特率是否匹配收到乱码检查地线是否接好波特率是否准确数据不完整降低波特率试试或者检查缓冲区大小7. 实战案例温度传感器数据上报最后分享一个真实案例通过串口上报温度传感器数据。硬件连接DS18B20到GD32F303每1秒上报一次温度。while(1) { float temp read_temperature(); char buffer[50]; sprintf(buffer, Temperature: %.2fC\r\n, temp); uart0_send_string(buffer); delay_ms(1000); }这个简单的例子包含了串口初始化和数据发送的全部要素。你可以在此基础上扩展比如加入校验、协议头等。
企业数字化 ERP 产品动态
相关推荐
Excalidraw虚拟白板深度解析:从手绘风格到企业级协作的技术全景 Excalidraw虚拟白板深度解析:从手绘风格到企业级协作的技术全景 【免费下载链接】excalidraw Virtual whiteboard for sketching hand-drawn like diagrams 项目地址: https://gitcode.com/GitHub_Trending/ex/excalidraw
在数字化协作的时代,你是… · 2026/9/10 11:47:10
深入解析ColdFire中断控制器:架构、配置与实战优化 1. 项目概述与中断机制核心价值在嵌入式系统开发,尤其是涉及实时控制、数据采集和通信的领域里,中断机制是保障系统响应性和可靠性的基石。想象一下,你正在用微控制器驱动一个电机,同时还要通过串口接收上位机的指令,并… · 2026/9/21 14:45:56
Android编译指令m、mm、mmm实战指南:从入门到精准构建 1. Android编译指令m、mm、mmm入门指南
第一次接触Android源码编译时,我被全系统编译的耗时吓到了——动辄几个小时起步。后来发现原来Google工程师早就考虑到了这个问题,提供了m、mm、mmm这三个神器。简单来说,它们就像厨房里的三种火力档位… · 2026/9/18 6:50:08
唱吧ipad版保姆级教程:3步搞定面试高频原理 唱吧ipad版保姆级教程:3步搞定面试高频原理 面试被问原理答不上来?别慌,今天这篇【唱吧ipad版】保姆级教程,带你从0到1拆解其核心音频处理逻辑。… · 2026/9/22 4:15:52
搞定圣诞邮件发送报错:图解原理与实战避坑指南 搞定圣诞邮件发送报错:图解原理与实战避坑指南 盯着屏幕上一行行红色的 StackTrace,是不是脑子都炸了? ConnectionRefused 、 TimeoutException 、 AuthenticationFailed… · 2026/9/22 4:15:46
一文搞懂如何去除 5个实战技巧教你彻底去除冗余逻辑实现性能优化 刚接手一个老项目,配置环境就卡半天。依赖冲突、版本不匹配,光 npm install 和 pip install 就得耗去两小时。等你终于跑通 Hello World,打开代码一看,满屏的… · 2026/9/22 4:15:46
3个核心技巧搞定在线象棋性能优化与最佳实践 3个核心技巧搞定在线象棋性能优化与最佳实践 官方文档往往洋洋洒洒几百页,翻到第三页你就想放弃?别慌。对于做在线象棋后端的同学来说,性能优化和最佳实践才是真金白银的硬道理。今天这篇教程,不念经,直接上干货。 一、… · 2026/9/22 4:15:40
荣耀手机铃声新手避坑:3个代码技巧搞定自定义铃声源码 荣耀手机铃声新手避坑:3个代码技巧搞定自定义铃声源码 官方文档往往长篇大论,翻到第三页脑子就宕机了,根本抓不住重点。对于刚入行的开发者来说,这种“信息过载”是最大的劝退理由。今天咱们不聊虚的,直接拆解荣耀手机铃声背后的技术逻辑,带你避开那些… · 2026/9/22 4:15:21
3步拆解九头牛的故事图解原理面试不慌 3步拆解九头牛的故事图解原理面试不慌 面试被问“讲讲这个原理”,你脑子里一片空白,手心冒汗,只能硬背八股文。面试官眉头一皱,心里已经给你打了低分。这种尴尬,是不是你最近遇到的最大痛点?… · 2026/9/22 4:15:15
5个电影海报图片处理坑,新手避坑指南 5个电影海报图片处理坑,新手避坑指南 刚写完代码,一运行屏幕直接炸了。满屏红色的 StackTrace 滚得比弹幕还快,什么 NullPointerException 、 ImageIO.read() returned null 、… · 2026/9/22 0:00:07
注册微信公众账号:一文搞懂从0到1全流程 注册微信公众账号:一文搞懂从0到1全流程 复制来的代码跑不通,报错信息满屏飞,到底卡在哪?别急,咱们先停下手里的调试。很多开发者觉得注册微信公众账号只是填个表单、传个身份证那么简单,真上手才发现坑深不见底。今天这篇 一文搞懂… · 2026/9/22 0:00:07