简介这份资源整理自STM32F103RCT6芯片引脚功能详解面向嵌入式初学者、ARM开发工程师及电子竞赛备赛人员用于快速掌握该型号微控制器的引脚分类与配置方法。文档从GPIO、复用功能、ADC/DAC、外部中断、时钟及JTAG/SWD调试接口六个维度展开覆盖输入输出模式、串口/SPI/I2C通信、模拟信号采集、波形生成、定时与调试等典型应用场景方便对照选型与电路设计。资源为单个docx文档压缩包整体约14KB内容结构清晰、可直接查阅。目前已有2462人学习下载适合作为STM32入门阶段的案头参考资料尤其有助于在开发板原理图阅读、引脚初始化配置及外设功能选择时快速定位所需信息。1. stm32f103rct6引脚功能先看懂这块芯片能干什么再谈点灯拿到一份写着“stm32f103rct6引脚功能”的文档多数人第一反应是翻到引脚图那一页对着丝印找PA9、PB3然后赶紧把杜邦线插上去点个LED。我建议你先别急。RCT6这颗芯片在项目里出现频率极高因为它用48脚封装做到了256KB Flash、48KB RAM、3路USART、2路SPI、2路I2C、1路CAN还带12位ADC和高级定时器价格和资源卡的刚刚好。做电机控制、CAN节点、传感器采集、小型人机交互都够用但引脚复用关系也最容易让人翻车。这篇笔记就是把引脚功能从“看明白”讲到“用顺手”尤其会拆开那些数据手册里不会直接写清楚的复用冲突、启动模式和下载调试注意事项。适合正在画原理图、写CubeMX初始化或者被某个外设引脚卡住的开发者新手照着做能少走弯路熟手也可以看看边界设置有没有踩坑。2. RCT6引脚资源大盘点48脚里到底藏了多少外设2.1 引脚分组和电源引脚先把“地基”接对拿到LQFP48封装先别急着数外设把电源和地弄明白。VDD、VDDA、VSS、VSSA这些引脚如果不接对后面一切现象都很玄学。常见做法是给VDDA和VREF之间加一个1uF和0.1uF的退耦电容VSSA同样要用磁珠或0欧电阻接模拟地ADC采样的稳定性很大程度取决于这两个引脚的处理。VREG和VCAP通常不需要外部元件但VCAP引脚在部分批次上要求对地接电容原理图阶段就考虑进去比后期改板省事。NRST引脚有内部上拉但在强干扰环境里还是建议外部接一个100nF到地的电容复位电路的时间常数不要小于1ms。BOOT0和BOOT1这两个引脚在运行时会被复用为PB2和PB2的普通IO注意是BOOT0对应PB2不对重新理一下。BOOT0是独立引脚BOOT1复用为PB2。很多人在画板时把PB2直接当普通IO用结果发现下载程序时进不了bootloader其实就是因为BOOT1引脚状态被外部电路拉高了这是很典型的一个坑。2.2 三大通信接口的物理引脚分布RCT6的USART1固定占用PA9/PA10做TX/RX这个没什么争执。USART2的TX/RX在PA2/PA3但部分参考手册会标注它也能映射到PD5/PD6注意RCT6没有PD端口因为它是48脚封装PD口只引出了PD0/PD1/PD2三个引脚用于外部晶振和RTC校准。所以当你看到源码里出现PD5复用TX除非你用的是LQFP64的RBT6否则PD5引脚根本不存在。SPI1在PA5/PA6/PA7上可以做硬件NSS或软件的片选SPI2就要用到PB13/PB14/PB15而这组引脚同时也能复用到I2C2的SCL/SDA以及USB的DP/DM不RCT6的USB DP/DM在PA11/PA12那是另一个故事。CAN的RX和TX固定在PA11/PA12和USB共用引脚这种物理层面的互斥关系在选型时就要注意不能既想上USB又想上CAN除非你用重映射到PB8/PB9但那时又要牺牲掉I2C1。2.3 定时器引脚和PWM输出通道对照RCT6的定时器资源很丰富TIM1是高级定时器CH1到CH4在PA8/PA9/PA10/PA11上同时也能重映射到PE9到PE12但48脚封装没有PE口所以实际可用还是默认引脚。TIM2的四个通道分布在PA0到PA3TIM3在PA6/PA7/PB0/PB1TIM4在PB6到PB9。如果你已经用掉了USART1占用的PA9/PA10还想用TIM1_CH2输出PWM那就只能用重映射到PB0不对TIM1_CH2重映射是PB0仔细查一下TIM1_CH2默认是PA9重映射到PB0但PB0同时是TIM3_CH3所以这里要小心。比较实用的做法是画一张自己项目的引脚分配表把外设、默认引脚、重映射引脚、冲突外设四列写清楚再贴到CubeMX里验证。很多“引脚不够用”的错觉其实是因为没有用上重映射或者没注意到重映射会抢占另一组外设的默认引脚。3. 用CubeMX配置RCT6引脚从选封装到生成初始化代码3.1 创建工程时的关键选项RCT6 vs RBT6别选错打开STM32CubeMX第一步是选芯片型号搜索栏输“STM32F103RC”注意后缀T6是LQFP48封装如果你选了RBT6看起来引脚数相同但Flash是128KB代码大了就下载不进去。这一类选型问题在实际项目中出过事故某开发者做的量产固件在RCT6上开发调试一切正常后来采购换成RBT6以为管脚兼容烧录时才发现固件超过128KB直接报错最后只能改代码裁功能。新建工程时还要注意勾选“Initialize all peripherals with their default settings”这个选项通常会默认把没用到的引脚也初始化成GPIO反而会造成干扰。我的习惯是只在“Pinout Configuration”视图里手动配置用到的外设其余引脚保持复位状态既减少功耗也避免误触发。PLL配置这块RCT6最高主频72MHz外部晶振HSE通常用8MHzPLL倍频系数设为9分频器保持默认这样系统时钟正好72MHz。3.2 引脚分配实操点几下鼠标把LED、串口、ADC都配出来在Pinout视图里点PA5把它设置为GPIO_Output这就是板载LED最常见的接法再点PA9和PA10设置为USART1的TX和RX然后点PA0选ADC1_IN0一个电位器采样通道就有了。CubeMX里引脚旁边的颜色会随功能变化绿色表示已被分配黄色表示可复用但还没分配红色表示冲突或不可用这是一张很直观的冲突地图。配置完外设后切换到Clock Configuration页确认APB2总线上的ADC时钟不要超过14MHz这是F1系列的硬限制。USART1挂在APB2上TIM1也在APB2上其余大部分外设在APB1工程默认会把APB1分频到36MHzAPB2到72MHz这些时钟关系在生成代码前要扫一眼。代码生成选项里“Generate peripheral initialization as a pair of .c/.h files per peripheral”建议勾上这样每个外设单独一个文件后续改配置时不容易把初始化代码全部冲掉。3.3 生成的初始化代码怎么看两个容易被忽略的函数调用顺序生成的main.c里MX_GPIO_Init、MX_USART1_UART_Init、MX_ADC1_Init这几个函数依次被调用顺序由CubeMX根据外设依赖关系自动排定。你如果手动调整代码顺序比如把ADC初始化放到GPIO之前ADC的校准可能会拿到一个未稳定基准的采样值虽然不会报错但采集结果会出现规律性偏差。另一个容易忽略的是HAL_PWR_EnableBkUpAccess这个函数在RTC和备份寄存器相关工程里会用到但默认生成代码不一定调用需要自己加在初始化之后。看生成的引脚定义HAL库会用GPIO_InitStruct这个结构体把模式、速度、上下拉都配好。比如PA5输出模式里Pin参数是GPIO_PIN_5Mode是GPIO_MODE_OUTPUT_PPPull是GPIO_NOPULLSpeed是GPIO_SPEED_FREQ_LOW。想把LED点亮速度调快一些把Speed改成HIGH即可这对GPIO翻转频率的影响比很多人以为的要大尤其在做IO模拟通信时低速配置会让波形上升沿变缓导致对端设备采样失败。活到老学到老F1系列GPIO的输出速度上限是50MHz但实际翻转频率往往受制于代码效率而不是这个上限。4. 引脚复用与重映射的边界RCT6选型时最容易踩的冲突4.1 什么是默认复用什么是重映射以及CubeMX怎么帮你避开F1系列的引脚功能分三层一是纯粹的GPIO二是内部外设的默认映射三是通过AFIO重映射寄存器换到另一组引脚。比如USART2的TX默认在PA2重映射后在PD5但RCT6没有PD5所以USART2在这个封装下只有默认引脚可用。这个逻辑要理清很多开发者拿着RBT6的代码往RCT6上移植恰恰是重映射引脚不存在导致编译通过但运行时外设无输出这类问题只看原理图根本发现不了必须回到数据手册的引脚定义表里核对第二功能和第二功能重映射。CubeMX里分配引脚时如果一个外设只有一组引脚可用那在Pinout视图里就可能点出两个可选位置但右边会提示“redefine”表示重映射。它会自动配置AFIO时钟并生成对应的GPIO_AFIO_Remap代码这一点比手动写寄存器安全。但代价是当几个外设都想抢同一组重映射引脚时CubeMX会直接报错这时就得评估哪个外设可以换到别的硬件资源上。4.2 三个高频冲突组合和替代方案第一个组合是USART1和TIM1_CH2抢PA9USART1的TX是默认不可变的所以电机控制PWM最好选TIM1_CH1在PA8、TIM1_CH3在PA10或TIM1_CH4在PA11避开PA9这条串口主线。第二个组合是SPI1和I2C1抢PB3/PB4PB3和PB4在复位后是JTAG的TDO和NJTRST要先把调试端口配置成SWD模式并关闭JTAG功能否则这俩脚永远是JTAG信号而不是SPI。第三个组合是CAN和USB抢PA11/PA12如果项目既需要总线通信又要USB转串口那就只能选带两个USB外设的型号或者把CAN换到SPI外接控制器。处理JTAG和SWD的引脚冲突是新手常见的翻车现场。默认情况下PB3、PB4、PA15、PA13、PA14都是调试相关引脚其中PA13和PA14是SWDIO和SWCLK通常会保留给下载器。如果整个工程的引脚紧张可以把PA15配置成普通IO但此时必须确认下载配置里选的是SWD而非JTAG否则下载器连不上。网上很多“芯片锁死”的求助帖其实就是把SWD引脚也复用成普通IO又没有预留一个复位脚最后只能靠拉低NRST连下载器擦除。4.3 重映射后的时钟配置和AFIO时钟开关在HAL库里调用引脚重映射前要先使能AFIO时钟这个在CubeMX生成的代码中是自动完成的但如果你从标准外设库移植就要手动操作。具体做法是__HAL_RCC_AFIO_CLK_ENABLE()然后调用__HAL_AFIO_REMAP_SPI1_ENABLE之类的宏。这里有个坑重映射配置是全局性的不是每个引脚单独设置所以如果两个外设共用同一个重映射开关它们会互相影响。典型例子是TIM2的重映射位有两位可以配置成完全重映射或部分重映射改错一个位就可能让PWM在完全不同的引脚上输出而CubeMX生成的代码里往往用的是位操作肉眼检查时需要对照参考手册的位定义表。另外一个和重映射绑定的坑是I2C1的SCL/SDA在PB6/PB7默认引脚上但如果你的板子里PB6/PB7被复用作TIM4_CH1和TIM4_CH2然后又想用I2C1就必须把I2C重映射到PB8/PB9而PB8/PB9又和I2C2的默认引脚冲突最终只能在I2C1和I2C2之间二选一。这种链式冲突在带多个传感器的板子里特别常见我的习惯是画原理图之前先列一张“外设-引脚-复用-优先级”表宁可表格多花半小时也不等板子打样回来再焊飞线改。5. 避坑指南RCT6引脚使用中的七个血泪经验5.1 现象程序烧录后第一次能跑复位后就死机原因是启动模式下Boot0引脚的状态被外部上下拉电阻影响导致芯片从错误地址启动。解决方法是把Boot0用10k电阻下拉到地Boot1同理确保VDD上电后处于主Flash启动模式。如果板子上Boot0接了跳线帽平时默认接地下载时再拉高那就要检查下载器复位时序是否和跳线操作冲突。5.2 现象ADC采样值漂移尤其湿度高的环境更明显原因是VDDA和VREF引脚没有独立滤波模拟电源受数字开关噪声污染。解决方法是VDDA引脚单独走线到电源输入端串磁珠VREF加1uF陶瓷电容靠近引脚放置同时把ADC采样时间配置长一些比如ADC_SAMPLETIME_55CYCLES_5能明显降低内部采样保持电容的噪声耦合。5.3 现象USART发送乱码波特率设置正确但波形异常原因是外部晶振频率不准或者代码里用HSI而板子实际焊了HSE。RCT6的HSE引脚在OSC_IN/OSC_OUT上如果晶体没焊或者焊错HAL库初始化时会卡在HSE超时等待然后自动切回HSI这时串口波特率就变成按HSI计算和上位机对不上。解决方法是先用逻辑分析仪测TX引脚的波特率再用示波器对照两个晶振引脚波形确认晶体起振。5.4 现象PWM输出有周期性毛刺电机抖动原因是TIM1的刹车引脚和另一组外设复用比如BKIN引脚在没有初始化时处于浮空状态干扰信号会误触发刹车保护。解决方法是把所有不用的TIM1_BKIN引脚配置成上拉输入或者直接把这些引脚复用成普通IO避免高阻态。另一种情况是重映射后的引脚没配置成复用功能GPIO模式选成了输出PP而不是AF_PP这样PWM信号会变成固定电平看起来像偶尔正常偶尔失控。5.5 现象代码里用到了所有字节但程序下载后校验失败原因是Flash容量超了。RCT6是256KB但如果你为了省事把代码段链接到了0x08040000以上的地址即使实际文件没超过256KB也会因为地址不对导致校验失败。解决方法是检查链接脚本里的FLASH长度是不是0x40000同时确认启动文件选择了适配的ld文件有些工程是从RBT6的例程复制过来的链接脚本还停在128KB。5.6 现象PB3接按键按下没反应原因是JTAG功能默认开启PB3作为TDO引脚是JTAG调试输出普通GPIO读不到按键状态。解决方法是把调试端口设置成SWD模式代码里调用__HAL_AFIO_REMAP_SWJ_NOJTAG()或者CubeMX里把PA15、PB3、PB4都释放出来。注意释放后下载器就不能再以JTAG模式连接了但SWD不受影响对日常调试没有损失。5.7 现象I2C总线死锁SDA一直为低原因是I2C引脚配置成开漏输出后外部上拉电阻缺失或者上拉电阻值太大导致上升沿太慢。解决方法是I2C的SCL/SDA必须外接4.7k或2.2k上拉不能只靠内部上拉因为内部上拉太弱高速通信时波形会被拉歪。另一个常见原因是某次通信中主机复位而从机仍处于输出低电平状态这时只需要把SCL连续翻转9个时钟就能释放总线很多调试助力都是从这点衍生出来的。6. 引脚功能验证三板斧最小系统测试、寄存器巡检和长期稳定性观测6.1 最小系统点灯测试从原理图到LED闪起来的最快路径画完板子第一次上电我不会急着跑完整业务逻辑而是写一个只初始化GPIO的裸机程序把板子上所有LED引脚全部配成输出每200ms翻转一次然后用逻辑分析仪看波形是否存在且频率稳定。这个测试能一次性暴露晶振未起振、NRST引脚被误拉低、电源滤波不足三个问题。代码可以参考这样写void led_blink_test(void) { GPIO_InitTypeDef gpio_init {0}; __HAL_RCC_GPIOA_CLK_ENABLE(); gpio_init.Pin GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7; gpio_init.Mode GPIO_MODE_OUTPUT_PP; gpio_init.Pull GPIO_NOPULL; gpio_init.Speed GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, gpio_init); while (1) { HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7); HAL_Delay(200); } }上面这段代码的核心是先把目标引脚所在的GPIOA时钟打开再通过GPIO_InitTypeDef把引脚号、模式、上下拉、翻转速度一次性配好。HAL_Delay函数依赖SysTick中断如果系统时钟配置不正确这个延时函数就会失效导致LED狂闪或不动所以点灯测试同时也在验证时钟链路。引脚号可以用按位或的方式同时操作多个脚节约代码行数但逻辑分析仪测试时最好分别触发避免多个引脚翻转重叠。6.2 用“读寄存器再写寄存器”的方式定位引脚配置漂移有时候代码跑得好好的某一天突然某路PWM没输出了重新烧录后恢复正常这种玄学问题大概率是运行过程中某个外设的寄存器被错误改写。定位方法是在出问题的引脚对应的GPIOx_MODER寄存器处下断点观察该寄存器的值是否在运行中被改变。如果发现MODER被改成输入模式那就得回头查是不是有DMA写入越界或者某个ISR里误操作了GPIO基地址。常见做法是把关键寄存器的地址打印出来每次启动后校验一次。比如GPIOA的MODER在地址0x40020000它的低两位对应PA0值0b11是模拟模式0b01是通用输出0b10是复用功能。如果PA0需要做ADC输入就应该保持0b11你看到变成0b01就说明有代码动了配置。这个方法比单纯仿真时看变量更可靠因为寄存器变化可能发生在中断上下文里断点不一定每次都能命中。6.3 长期稳定性观测让板子在温箱里跑48小时只监测引脚电平跳变数引脚功能在常温下都正常不代表高低温可靠。RCT6的I/O在环境温度变化时内部上拉电阻阻值会有漂移开漏输出的低电平电压也会略有变化。靠谱的验证方法是把板子放进温箱从-20℃到70℃循环每10分钟记录一次PWM的占空比和串口误码率。我通常用一个定时器统计USART接收错误标志的次数当作引脚信号完整性的间接指标。这个观测没有捷径但可以提前在原理图阶段减少变量信号线尽量短高速信号要在源端串联33欧电阻I2C上拉不要超过4.7k。如果温箱测试里出现偶发性误码优先检查靠近晶振的走线是否被GPIO翻转干扰必要时把GPIO翻转速率从HIGH降到MEDIUM。另一个习惯是给每一个外部中断引脚加一个10nF对地电容过滤毛刺不要让GPIO的EXTI触发在边沿抖动上。这些技巧单拎出来都不复杂但组合起来能避免绝大多数“过几天就抽风”的售后问题。7. 调试技巧收官用SWD引脚做“第二串口”和复用冲突快速定位调试阶段最痛苦的是串口不够用USART1给了上位机USART2给了蓝牙临时还想看调试日志怎么办。这时候可以借用SWD的SWO引脚也就是PB3它在SWD模式下会输出ITM跟踪信息不需要额外占用USART硬件接口。只需要在调试器端开启SWO并配置好时钟代码里调用ITM_SendChar就能把调试字符送到IDE的调试终端。这个功能在F1系列上使用频率不高但遇到串口资源耗尽场景实在好用。还有一个小技巧当某个引脚功能“看起来不工作”时先用万用表测引脚对地电压输出模式下如果电压是0V先别怀疑外设配置检查是不是引脚被外部电容拉到地如果是输入模式却读到固定高电平查一下是不是板上有上拉电阻把它顶死了。这类问题十有八九是原理图网络标号连错了和芯片本身无关。排查时我会把CubeMX生成的引脚报告导出成CSV再和原理图网络表逐一比对基本一轮下来就能找到网标错位。引脚分配这件事说到底是在资源、封装、成本之间做权衡。RCT6给你256KB Flash和一堆外设但48脚封装也让每个脚都背负多重身份用之前花十分钟画一张复用表比之后改板省几周时间。我自己就被PA9和TIM1_CH2的冲突坑过一回后来每次选型都先用CubeMX扫一遍所有外设的可分配引脚再决定布局。希望这篇笔记帮你在RCT6上少交点学费。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?