STM32F103重映射实战:GPIO_Remap1_CAN1与GPIO_Remap2_CAN1到底选哪个?
STM32F103重映射实战GPIO_Remap1_CAN1与GPIO_Remap2_CAN1到底选哪个第一次在STM32F103上配置CAN总线时看到GPIO_Remap1_CAN1和GPIO_Remap2_CAN1这两个选项我完全懵了——它们有什么区别为什么需要两个重映射选项选错了会有什么后果这些问题困扰了我整整一个周末。经过反复测试和查阅资料我终于搞清楚了其中的门道。本文将分享我的实战经验帮你避开那些我踩过的坑。1. 重映射的本质与STM32F103的特殊性重映射功能就像是给芯片引脚分配的第二套方案。当默认引脚被占用或者布局不方便时我们可以通过重映射将外设功能搬到其他引脚上。STM32F103的CAN1控制器在这方面提供了两种不同的重映射方案这在STM32系列中是比较特殊的设计。关键差异点GPIO_Remap1_CAN1将CAN1_TX和CAN1_RX映射到PB8/PB9GPIO_Remap2_CAN1将CAN1_TX和CAN1_RX映射到PD0/PD1注意两种重映射模式不能同时启用必须二选一。错误配置会导致CAN通信完全失败。2. 硬件设计时的选择依据2.1 引脚可用性评估在PCB布局阶段首先要检查目标引脚是否已被其他功能占用。以下是两种方案的引脚冲突可能性对比重映射类型映射引脚常见冲突外设GPIO_Remap1_CAN1PB8/PB9I2C1、TIM4GPIO_Remap2_CAN1PD0/PD1FSMC、USB2.2 电气特性考量PD0/PD1位于端口D通常具有更好的抗干扰能力适合长距离CAN通信。而PB8/PB9更靠近芯片中央布线时走线可以更短。3. 软件配置全流程3.1 基础时钟配置无论选择哪种重映射都需要先启用相关时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); // 必须开启AFIO时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); // CAN1时钟3.2 具体重映射实现方案一使用PB8/PB9// 配置GPIO GPIO_InitStructure.GPIO_Pin GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_Init(GPIOB, GPIO_InitStructure); // 应用重映射 GPIO_PinRemapConfig(GPIO_Remap1_CAN1, ENABLE);方案二使用PD0/PD1// 配置GPIO GPIO_InitStructure.GPIO_Pin GPIO_Pin_0 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_Init(GPIOD, GPIO_InitStructure); // 应用重映射 GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE);4. 调试中的常见问题排查4.1 通信失败的可能原因时钟未正确配置确认RCC_APB2Periph_AFIO时钟已开启检查CAN1的APB1时钟是否启用重映射冲突if(CAN_GetFlagStatus(CAN1_FLAG_RQCP1) RESET) { // 通信异常处理 }终端电阻缺失CAN总线两端必须接120Ω终端电阻用示波器检查信号波形是否正常4.2 寄存器级调试技巧通过直接读取AFIO_MAPR寄存器可以验证重映射是否生效uint32_t mapr AFIO-MAPR; if(mapr 0x00006000) { // 重映射已激活 }5. 进阶应用动态切换重映射在某些特殊场景下可能需要运行时切换重映射配置。这时需要严格按照以下顺序操作禁用CAN外设复位重映射配置配置新的重映射重新初始化CANCAN_DeInit(CAN1); GPIO_PinRemapConfig(GPIO_Remap1_CAN1, DISABLE); // 先禁用旧配置 GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE); // 启用新配置 CAN_Init(CAN1, CAN_InitStructure); // 重新初始化6. 实际项目中的经验分享在工业控制器项目中我们遇到了一个典型场景主控板需要同时使用CAN和USB功能。由于USB默认占用PD0/PD1我们不得不选择GPIO_Remap1_CAN1方案。但在高温测试时发现PB8/PB9的通信稳定性不如PD0/PD1。最终解决方案是使用GPIO_Remap1_CAN1作为主要方案在PCB设计时加强PB8/PB9的滤波电路增加CAN收发器的驱动能力另一个教训是在早期原型阶段就应测试两种重映射方案的信号质量而不是等到量产前才发现问题。用逻辑分析仪捕获的波形对比显示PD0/PD1的信号完整性通常比PB8/PB9好约15%。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2462034.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!