单片机基础知识 -- 重映射功能Remap
文章目录一、重映射的核心本质二、为什么需要引脚重映射工程痛点三、重映射的分类以STM32为例通用多数单片机四、重映射的实现步骤裸机开发通用流程以STM32 USART1为例五、重映射的关键注意事项六、易混淆概念区分重映射 vs 引脚复用总结二 重映射示例一句话理解SWJ三种常用模式GD32标准库宏逐行解析你的函数容易踩坑的点修正后的规范版本推荐替换补充要理解单片机引脚的重映射可以把它看作是外设功能引脚的“搬家”功能——单片机的内置外设串口、定时器、SPI、I2C等默认绑定一组固定引脚但通过配置专用寄存器能将这些外设的功能转移到芯片的其他备用引脚上核心目的是提升硬件设计的灵活性解决PCB布局冲突。概念本质应用场景引脚复用一个引脚同时具备“普通GPIO”和“外设功能”两种属性通过配置GPIO模式切换默认功能引脚未被占用时直接使用外设的默认引脚引脚重映射改变外设功能的引脚绑定关系将外设从默认引脚转移到备用引脚默认引脚被占用或需要优化PCB走线时一、重映射的核心本质底层逻辑单片机的外设如USART1与引脚的连接并非物理硬连而是通过芯片内部的多路选择器MUX实现。重映射就是通过配置寄存器改变MUX的通路选择让外设信号从默认引脚切换到备用引脚。关键前提不是所有外设都支持重映射也不是所有引脚都能作为重映射目标具体需参考芯片的datasheet引脚定义表通常标注为Alternate Function。重映射不改变外设的功能逻辑只是改变了外设与外部电路的“接口引脚”。二、为什么需要引脚重映射工程痛点这是嵌入式硬件设计中高频使用重映射的核心原因举3个典型场景解决引脚冲突例如STM32F103的USART1默认引脚是PA9(TX)/PA10(RX)但如果这两个引脚被LED、按键等其他外设占用就可以通过重映射将USART1转移到PB6(TX)/PB7(RX)无需修改外设程序逻辑。优化PCB走线降低EMI多层板设计中默认引脚可能位于板边或干扰源附近如电机、继电器重映射到内层附近的引脚可缩短走线长度减少电磁干扰提升通信稳定性如SPI、CAN总线。兼容多版本硬件设计同一套程序需要适配不同版型的PCB时重映射可让外设引脚灵活匹配不同板子的布局无需修改核心业务代码只需调整GPIO和重映射配置。三、重映射的分类以STM32为例通用多数单片机根据外设引脚的转移范围分为两类类型特点示例部分重映射外设的部分引脚转移到备用引脚部分引脚仍保留默认配置STM32的TIM1部分重映射仅通道1/2转移到新引脚通道3/4仍用默认引脚完全重映射外设的所有引脚全部转移到备用引脚默认引脚完全失效STM32的USART1完全重映射TX/RX全部从PA9/PA10转移到PB6/PB7四、重映射的实现步骤裸机开发通用流程以STM32 USART1为例重映射的配置核心是使能重映射时钟 配置重映射寄存器 配置GPIO为复用功能步骤如下使能相关时钟使能外设时钟如USART1时钟使能复用功能时钟如STM32的AFIO时钟重映射功能依赖此时钟使能重映射目标引脚的GPIO时钟。// STM32F103示例使能时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);配置重映射寄存器选择重映射模式部分/完全以USART1部分重映射为例// 将USART1重映射到PB6/PB7GPIO_PinRemapConfig(GPIO_PartialRemap_USART1,ENABLE);配置目标GPIO为复用功能模式重映射后的引脚需要配置为复用推挽输出/浮空输入根据外设功能不能配置为普通GPIO// 配置PB6为USART1_TX复用推挽输出GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_PinGPIO_Pin_6;GPIO_InitStruct.GPIO_ModeGPIO_Mode_AF_PP;// 复用推挽输出GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStruct);// 配置PB7为USART1_RX浮空输入GPIO_InitStruct.GPIO_PinGPIO_Pin_7;GPIO_InitStruct.GPIO_ModeGPIO_Mode_IN_FLOATING;// 浮空输入GPIO_Init(GPIOB,GPIO_InitStruct);正常配置外设功能重映射后外设的初始化代码如波特率、数据位、校验位无需修改与默认引脚配置完全一致。五、重映射的关键注意事项重映射后默认引脚失效一旦开启重映射外设的默认引脚会失去外设功能变为普通GPIO或高阻态具体看芯片手册不能再作为外设引脚使用。避免引脚复用冲突部分引脚可能同时支持多个外设的重映射如某引脚可重映射为SPI1_MOSI或TIM2_CH1需确保同一时刻只有一个外设占用该引脚。并非所有单片机都支持重映射中低端单片机如51系列、STM8S基础款通常无重映射功能只有中高端MCU如STM32全系列、ESP32、GD32才支持。重映射不影响外设性能重映射是芯片内部的通路切换不会降低外设的通信速率、采样精度等性能指标。六、易混淆概念区分重映射 vs 引脚复用新手很容易把两者搞混核心区别如下概念本质应用场景引脚复用一个引脚同时具备“普通GPIO”和“外设功能”两种属性通过配置GPIO模式切换默认功能引脚未被占用时直接使用外设的默认引脚引脚重映射改变外设功能的引脚绑定关系将外设从默认引脚转移到备用引脚默认引脚被占用或需要优化PCB走线时总结单片机引脚重映射的核心是外设引脚的灵活转移它是解决硬件布局冲突的“利器”实现方式是通过寄存器配置内部多路选择器。掌握重映射能大幅提升嵌入式硬件设计的灵活性减少PCB改版的概率。二 重映射示例// CAN STB脚配置 #defineCAN_STB_PINGPIO_PIN_3#defineCAN_STB_PORTGPIOB#defineCAN_STB_CLKRCU_GPIOB#defineCAN_STBPBout(3)voidhal_can_stb_init(void){rcu_periph_clock_enable(CAN_STB_CLK);rcu_periph_clock_enable(RCU_AF);//默认设置为正常模式gpio_init(CAN_STB_PORT,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,CAN_STB_PIN);gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);CAN_STB1;}GD32C113TB芯片PB3上电默认JTDO,重映射PB3使用怎么理解一句话理解gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);是AFIO重映射把PB3从默认JTAG调试引脚JTDO释放出来变成普通GPIO同时保留SWD下载调试功能PA13/PA14仍然可用仿真器。GD32C113TB的PB3上电复位默认功能JTDOJTAG调试数据输出不是普通GPIO。你直接gpio_init配置成推挽输出IO电平控制无效因为引脚被调试硬件占用必须修改SWJ_CFG位释放引脚。SWJ三种常用模式GD32标准库宏SWJ Serial Wire JTAGAFIO_PCF0寄存器里的SWJ_CFG[2:0]控制GPIO_SWJ_SWDPENABLE_REMAP你代码里用的JTAG关闭SWD保留释放PA15、PB3、PB4 → 可做普通GPIO保留PA13(SWDIO)、PA14(SWCLK)仿真器依然可以下载、调试✅开发阶段推荐就是你CAN_STB这个场景GPIO_SWJ_NONJTRST_REMAPJTAG开启无NJTRST全部调试引脚占用PB3依然是JTDO不能拿来做普通IOGPIO_SWJ_DISABLE_REMAPJTAG、SWD全部关闭PA13/PA14/PA15/PB3/PB4全部释放为普通IO⚠️ 风险烧录进这段代码后下次无法用SWD下载程序只能靠串口ISP重新烧录量产代码慎用。逐行解析你的函数voidhal_can_stb_init(void){rcu_periph_clock_enable(CAN_STB_CLK);// 使能GPIOB时钟rcu_periph_clock_enable(RCU_AF);// AFIO时钟必须打开重映射靠AFIO外设//配置PB3为推挽输出50Mgpio_init(CAN_STB_PORT,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,CAN_STB_PIN);//【核心】SWJ重映射关闭JTAG保留SWD释放PB3、PB4、PA15gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);CAN_STB1;// CAN芯片STB脚置1CAN进入正常工作模式看硬件手册STB1正常0待机}关键点RCU_AF时钟必须开启AFIO是专门做引脚复用/重映射的外设不开时钟remap配置无效。容易踩坑的点顺序问题gpio_pin_remap_config建议放在gpio_init之前。先释放引脚再配置GPIO模式你现在顺序反过来虽然大部分芯片能跑但规范写法要调换。量产代码风险如果改成GPIO_SWJ_DISABLE_REMAP一旦代码跑起来SWD直接失效后续没法J-Link/GD-Link下载。只针对PA13 PA14 PA15 PB3 PB4这5个调试脚别的IO不需要SWJ重映射。你的用途CAN收发器STB待机控制PB3做普通GPIO输出这个remap选型是合理的。修正后的规范版本推荐替换voidhal_can_stb_init(void){rcu_periph_clock_enable(CAN_STB_CLK);rcu_periph_clock_enable(RCU_AF);// 先重映射释放PB3gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP,ENABLE);// 再配置GPIOgpio_init(CAN_STB_PORT,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,CAN_STB_PIN);CAN_STB1;}补充重映射本质是片内多路选择开关每个引脚内部有多个信号源外设、调试模块、GPIOAFIO寄存器用来切换选哪一路信号输出到引脚。PB3默认接到JTAG的JTDO模块SWJ重映射之后多路开关切到GPIO模块你才能用PBout(3)控制高低电平。要不要我顺带说明CAN收发器STB引脚的常见硬件注意点上下拉、上电时序

相关新闻

AI应用架构设计:图解动态能力组合与落地避坑指南

AI应用架构设计:图解动态能力组合与落地避坑指南

1. 这不是画PPT,是给AI系统搭骨架“图解AI应用架构设计”这六个字,乍看像培训课件标题,实则藏着当前一线AI落地最常踩的深坑——很多人花三个月调出一个98%准确率的模型,上线后却卡在日均处理200条请求就超时;也有人把…

2026/10/11 4:49:23 阅读更多 →
HIL-SERL:通过人机协作强化学习实现精确灵巧的机器人操作

HIL-SERL:通过人机协作强化学习实现精确灵巧的机器人操作

目录 1.仓库核心架构 1.1 整体方法:HIL-SERL 1.2 系统架构 1.3 代码结构 2.复现过程 2.1 硬件 2.2 环境搭建 基于UR5e真机部署的源码 SERL:RL+Vision+Touch实现搜孔和插拔 传统力控搜孔插孔:预先规划好移动的轨迹,这个规划的轨迹会覆盖搜孔区域,实际搜孔的过程中,需要紧贴…

2026/10/11 4:49:23 阅读更多 →
claude-mem:给Claude加装长期记忆,终结AI对话失忆

claude-mem:给Claude加装长期记忆,终结AI对话失忆

先别急着往下看,我问你一个场景:你天天在终端里和 Claude 聊需求、调代码、捋思路,是不是每次新开一个会话,它都像第一次见你一样,把你之前说过的技术栈、项目结构、踩过的坑全忘得干干净净?你只能一遍遍复…

2026/10/11 4:49:23 阅读更多 →

最新新闻

5G 小区搜索与选择 (一)

5G 小区搜索与选择 (一)

1. 前言: 通信原理相关: 终端所接收的是数字信号,大部分信息(声音等)本是模拟信号通过ADC(模数转换:采样eg:奈奎斯特采样 保持 量化:归一到离散电平 编码:转为二进制)变为数字信号能被识别&a…

2026/10/11 5:34:46 阅读更多 →
从K8s单体架构教训看AI智能体运行环境的架构拆解与落地

从K8s单体架构教训看AI智能体运行环境的架构拆解与落地

1. 为什么说 K8s 的“单体教训”,正好打在 AI 智能体运行环境的软肋上做开发的人大概都有过这种阶段:最开始觉得“一个进程啥都能干”,等规模真上来了,改一行代码都战战兢兢。K8s 当年就是这样走过来的。它最早的控制平面把 API、…

2026/10/11 5:34:46 阅读更多 →
HR 数智化预算会上,要问系统外工作少没少

HR 数智化预算会上,要问系统外工作少没少

摘要:HR 数智化预算复盘不能只看上线模块和使用人数,还要看系统外工作有没有减少。肯耐珂萨提醒管理层,把隐性人工成本纳入判断里。预算复盘会上,PPT 上的数字看起来不差。模块上线了,账号开通了,流程也从线…

2026/10/11 5:34:46 阅读更多 →
深入理解进程与线程:从并发原理到线程池与虚拟线程实战

深入理解进程与线程:从并发原理到线程池与虚拟线程实战

1. 先搞清楚进程和线程各自是什么1.1 进程:程序运行时的独立容器“进程和线程的区别”这个问题,我一年能碰见几十次。面试里问,工作群里问,甚至有一次线上服务挂掉,同事第一句话就是“那是进程挂了还是线程卡了”。想真…

2026/10/11 5:34:46 阅读更多 →
微信二次开发如何设计消息回放沙箱?WechatApi 在不触发真实客户动作的情况下验证新业务逻辑

微信二次开发如何设计消息回放沙箱?WechatApi 在不触发真实客户动作的情况下验证新业务逻辑

官网友情链接 wechatapi.net 个人微信二次开发系统不断升级以后,除了自动回复规则,还会修改很多底层逻辑: 客户识别; 消息分类; 工单生成; AI Prompt; 客户标签; 文件分类&#xff1…

2026/10/11 5:34:46 阅读更多 →
591行GLSL与真实的引力透镜:Ghostty Blackhole如何逐像素光线追踪黑洞

591行GLSL与真实的引力透镜:Ghostty Blackhole如何逐像素光线追踪黑洞

【免费下载链接】ghostty-blackhole Ghostty Blackhole puts a real, ray-traced black hole inside your terminal. It grows as Claude Codes context window fills up, live. A fresh session is a quiet hole in the corner. A full one swallows half your screen. Youll …

2026/10/11 5:33:46 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →