当前位置: 首页 > news >正文

GD32F305串口重映射实战:从手册到代码的完整指南

1. 为什么需要串口重映射?

在嵌入式开发中,我们经常会遇到硬件设计上的限制。比如原本设计好的PCB板上,某个串口的默认引脚被其他功能占用了,或者因为布线原因需要调整引脚分配。这时候就需要用到引脚重映射功能。

GD32F305作为一款高性能的MCU,提供了灵活的引脚重映射能力。我最近在一个项目中就遇到了这样的情况:USART2的默认引脚PD5/PD6已经被其他功能占用,必须将其重映射到PC10/PC11上。这个过程看似简单,但实际操作中还是有不少需要注意的细节。

2. 查阅手册确认重映射可行性

2.1 理解重映射类型

GD32F305的重映射功能分为两种:

  • 完全重映射:所有功能引脚都可以重新定义
  • 部分重映射:只有部分引脚可以重新定义

通过查阅GD32F305的参考手册,我发现USART2只支持部分重映射。这意味着我们不能随意选择任意引脚,而是必须在芯片设计时规定的可选引脚中进行选择。

2.2 查找重映射表

在手册的"复用功能I/O和调试配置"章节中,可以找到USART2的重映射表:

功能默认引脚重映射引脚
TXPD5PC10
RXPD6PC11

这个表格清晰地告诉我们USART2可以重映射到PC10(TX)和PC11(RX),但不能映射到其他引脚。这也是为什么在项目中选择PC10/PC11这对引脚的原因。

3. 配置重映射的完整流程

3.1 时钟配置

重映射功能需要先使能相关时钟,这是很多开发者容易忽略的一步。具体需要开启以下时钟:

  1. 复用功能时钟(RCU_AF)
  2. GPIO端口时钟(这里是RCU_GPIOC)
  3. USART外设时钟(RCU_USART2)
rcu_periph_clock_enable(RCU_AF); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_USART2);

3.2 重映射配置

使用gpio_pin_remap_config函数来配置重映射。这里需要注意两个参数:

  1. 重映射选项:GPIO_USART2_PARTIAL_REMAP表示部分重映射
  2. 使能状态:ENABLE表示启用重映射
gpio_pin_remap_config(GPIO_USART2_PARTIAL_REMAP, ENABLE);

3.3 GPIO初始化

重映射后的引脚需要正确配置:

  • TX引脚配置为复用推挽输出(GPIO_MODE_AF_PP)
  • RX引脚配置为浮空输入(GPIO_MODE_IN_FLOATING)
gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10); gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11);

4. USART初始化与测试

4.1 USART基础配置

完成重映射后,就可以像普通USART一样进行初始化了:

usart_deinit(USART2); usart_baudrate_set(USART2, 115200U); usart_receive_config(USART2, USART_RECEIVE_ENABLE); usart_transmit_config(USART2, USART_TRANSMIT_ENABLE); usart_enable(USART2);

4.2 重定向printf测试

为了方便调试,我通常会重定向printf到USART:

int fputc(int ch, FILE *f) { usart_data_transmit(USART2, (uint8_t)ch); while(RESET == usart_flag_get(USART2, USART_FLAG_TBE)); return ch; }

然后在主循环中发送测试信息:

while(1) { printf("USART remap test message\r\n"); delay_1ms(500); }

5. 常见问题与解决方案

5.1 重映射后无法通信

如果重映射后USART无法正常工作,建议按以下步骤排查:

  1. 确认所有相关时钟已使能
  2. 检查重映射配置是否正确
  3. 验证GPIO模式设置是否正确
  4. 使用逻辑分析仪检查引脚是否有信号输出

5.2 波特率不准确

GD32F305的USART波特率计算方式有些特殊。如果发现通信波特率不准确,可以:

  1. 检查系统时钟配置
  2. 使用示波器测量实际波特率
  3. 根据手册中的公式重新计算分频值

6. 完整代码示例

以下是经过实际项目验证的完整代码:

#include "gd32f30x.h" #include <stdio.h> void USART2_init(void) { /* 时钟配置 */ rcu_periph_clock_enable(RCU_AF); rcu_periph_clock_enable(RCU_GPIOC); rcu_periph_clock_enable(RCU_USART2); /* 重映射配置 */ gpio_pin_remap_config(GPIO_USART2_PARTIAL_REMAP, ENABLE); /* GPIO初始化 */ gpio_init(GPIOC, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_10); gpio_init(GPIOC, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_11); /* USART配置 */ usart_deinit(USART2); usart_baudrate_set(USART2, 115200U); usart_receive_config(USART2, USART_RECEIVE_ENABLE); usart_transmit_config(USART2, USART_TRANSMIT_ENABLE); usart_enable(USART2); } int fputc(int ch, FILE *f) { usart_data_transmit(USART2, (uint8_t)ch); while(RESET == usart_flag_get(USART2, USART_FLAG_TBE)); return ch; } void delay_1ms(uint32_t count) { for(uint32_t i=0; i<count*8000; i++) { __NOP(); } } int main(void) { USART2_init(); while(1) { printf("GD32F305 USART remap test\r\n"); delay_1ms(500); } }

在实际项目中,这个方案已经稳定运行了数月。记得第一次调试时,我忽略了AF时钟的使能,导致重映射功能完全不起作用,花费了好几个小时才找到问题所在。这也提醒我们,在配置任何外设时,都要仔细检查所有相关时钟是否已经正确使能。

http://www.jsqmd.com/news/601717/

相关文章:

  • 逆向工程入门:从Hook Cookie到RPC调用,一步步破解zp_stoken生成逻辑
  • TVA深度解析(9): 如何拆解人工检测的“不可能三角“
  • VR-Reversal开源工具:让普通设备也能探索360度VR视频的实用指南
  • Jetson固定IP设置后网络不通?5步排查法+替代方案(实测有效)
  • 2026国家正规防脱生发洗发水十大排名!第一名4周掉发减38% - 博客万
  • 2026届毕业生推荐的五大AI辅助论文网站横评
  • 3大核心优势!Waifu2x-Extension-GUI让图像视频超分辨率与补帧处理效率提升300%
  • Milvus vs Faiss:5个实战场景下的性能对比与选型指南
  • Skill 核心概念、原理与实践指南
  • 基于种群分解与主元分析的NSGA-II优化算法
  • U8W-Mini与STC8G1K08的Keil仿真调试实战指南
  • Windows系统性能优化指南:使用Win11Debloat打造高效系统环境
  • Redis怎样提取整个集群的全量Keys_通过编写脚本遍历所有主节点分别执行SCAN并汇总结果
  • 五金配件自封袋常见问题解答(2026最新专家版) - 速递信息
  • 图解匈牙利算法:从增广路到最大匹配的完整流程
  • PROFINET智能设备通讯避坑指南:以西门子S7-1500/1200为例
  • 避坑指南:大疆多光谱影像处理中‘先标定后拼接’为什么这么重要?附M3M/P4M实测对比
  • 什么洗发水防脱发效果好?2026五款热门防脱洗发水实测,第一放心用 - 博客万
  • 深度学习研究者必备:OpenClaw+Phi-3-mini-128k-instruct论文助手配置
  • 雯雯的后宫-造相Z-Image-瑜伽女孩LoRA训练复现指南:基于Z-Image-Turbo的微调全流程
  • 实战指南:在快马平台构建带注意力机制的rnn聊天机器人
  • 慕依家具全屋定制价格多少钱,在成都性价比高吗 - mypinpai
  • 别再到处找靶场了!一个OWASP虚拟机搞定所有主流Web漏洞环境(附下载加速技巧)
  • 【ESP32】Secure Boot 实战配置:从密钥生成到安全启动的全流程解析
  • GORM实战:5分钟搞定PostgreSQL连接池配置(附Redis缓存最佳实践)
  • 字节 AI agent 一面面试题
  • PixEz-flutter全链路网络可靠性架构实战:从数据同步到动态优化
  • RIP网络故障排查指南:7个常见问题及解决方案(含实验验证)
  • 塔器设备加工厂哪家性价比高,口碑好的有推荐吗? - 工业设备
  • 数字孪生技术如何通过3D大屏重构智慧港口管理