搜索

简述端口复用和端口复用重映射

发表于 2026-10-17 05:59:10 来源:烟消火灭网

STM32的简述引脚不够用,这是端口很多人画板子时遇到的第一个硬茬。比如你选了LQFP48封装的复用F103,定时器想要三路PWM输出,和端串口还要占两个脚,口复SPI再接个屏幕,用重映射数着数着就发现引脚分配不过来了。简述这时候如果还不知道端口复用和重映射,端口基本就只能换更多引脚的复用封装,白白增加成本。和端

端口复用说白了就是口复——一个GPIO引脚,除了能当普通IO口读写高低电平,用重映射还能被"借"给芯片内部的简述外设模块去用。STM32的端口每个引脚在出厂时就已经规划好了能承载哪些外设功能,比如PA9这个脚,复用默认状态下就是普通GPIO,但它的复用功能列表里写着USART1_TX。你要用串口1发送数据,就得把PA9配置成复用模式,而不是继续当普通IO用。

配置的过程不复杂。以标准库为例,先开GPIO时钟,再开对应外设的时钟,然后调用GPIO_Init的时候把模式设成GPIO_Mode_AF_PP(复用推挽输出)。关键的一步是别忘了开AFIO时钟——RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE)。这个坑我踩过不止一次,外设时钟开了,GPIO时钟也开了,代码编译烧录一切正常,但串口就是没波形。查了半天才发现AFIO时钟没使能,复用功能根本没生效。

复用解决了"一个脚能当什么用"的问题,但还有个更实际的麻烦:默认的复用引脚位置和你PCB走线对不上。比如USART1默认在PA9/PA10,可你板子画完了发现这两个脚被别的东西占了,或者走线绕得实在难受。这时候就需要重映射出场了。

重映射的本质是把外设的引脚连接从默认位置搬到备用位置。还是USART1,重映射之后TX和RX就跑到了PB6和PB7上。操作上也直接:在开AFIO时钟的前提下,调用GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE)就行了。之后你再初始化PB6和PB7为复用推挽和浮空输入,串口就能在新引脚上正常工作。

但重映射不是想怎么搬就怎么搬的。每个外设的重映射选项是芯片设计时固定的,你只能从它提供的几组备用引脚里选,不能自由指定任意GPIO。比如USART1只有一组重映射,而USART3在某些型号上可以部分重映射也可以完全重映射,灵活性不一样。查参考手册的AFIO章节能看到完整的重映射对照表,这个表比任何教程都靠谱。

有个细节容易被忽略:重映射之后,原来的默认引脚就释放出来了,可以当普通GPIO用。这其实是重映射最实用的地方——不是为了"换脚",而是为了把被外设占住的脚抢回来给其他功能用。我之前做一个小板子,TIM3默认占了PA6/PA7,但这两个脚要接编码器,把TIM3重映射到PB4/PB5之后,PA6/PA7就空出来了,省了一堆飞线。

还有一点:部分重映射和完全重映射的区别要搞清楚。以TIM2为例,部分重映射只搬走一部分通道,完全重映射把所有通道都搬走。选错了的话,你以为某个脚已经释放了,实际上外设还占着它,配置普通IO的时候怎么都不对。这种问题在调试时特别隐蔽,因为代码不报错,只是行为不对。

实际项目里,我一般先在纸上把需要的外设列出来,对照数据手册的引脚定义表,看看默认分配能不能满足。如果冲突太多,再查重映射表看能不能错开。很多时候,合理利用重映射能让你用48脚的芯片干成64脚才能干的事,BOM成本直接降一档。

随机为您推荐
友情链接
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 简述端口复用和端口复用重映射,烟消火灭网   sitemap

回顶部