图中的彩色引脚是特殊功能引脚这些引脚不可编程IO引脚的通用复用和重映射通用功能GPIO通用输入/输出GPIO是引脚的最基础功能就是直接控制IO引脚输出高低电压配置为通用模式时引脚可通过寄存器直接控制高低电平或读取外部信号。GPIO模式分为输入浮空、上拉、下拉、输出推挽、开漏及模拟输入用于ADC/DAC。复用功能Alternate Function, AF复用功能指引脚被分配给片上外设如USART、SPI、TIM等由外设硬件自动控制引脚状态。例如将PA9配置为USART1_TX时发送数据由USART模块自动处理无需手动操作GPIO寄存器。复用功能重映射Function Remapping的概念复用功能重映射Function Remapping通常指在软件或硬件设计中将已有的功能模块通过重新配置或调整使其适应新的应用场景或需求。将冲突的复用功能移动到备用引脚上去GPIO的八种工作模式输出通用输出推挽 通用输出开漏 复用输出推挽 复用输出开漏输入输入上拉 输入下拉 输入浮空 模拟模式下面通过下图来解释开漏和推挽的区别推挽模式就是一对MOS管交替导通上面的闭合下面的导通下面的闭合上面的导通关于推挽模式下LED亮灭需要将LED的阳正极接IO引脚阴负极接地那么向IO引脚写0LED熄灭 向IO引脚写1LED点亮推挽模式下向IO引脚写0那么P-MOS关断N-MOS导通IO引脚接地输出低电压向IO引脚写1那么P-MOS导通N-MOS关断IO引脚接Vdd输出高电压开漏模式上面的MOS管一直断开关于开漏模式下LED亮灭需要将LED的阳正极接地阴负极接IO引脚那么向IO引脚写0输出低电平LED点亮需要上拉电阻、向IO引脚写1输出高阻抗LED熄灭开漏模式下向IO引脚写0那么P-MOS关断N-MOS导通IO引脚接Vss输出低电压向IO引脚写1那么P-MOS关断N-MOS关断IO引脚悬空此时无论是给引脚加多大的电压都不会在引脚上产生电流i0,RU/I无穷这种状态称为高阻抗总结就是推挽模式--对MOS管交替导通对外输出低电压或高电压开漏模式--PMOS保持关断可以对外输出低电压或高阻抗关于上拉输入下拉输入和浮空输入如下图所示概述当IO引脚工作在输入模式下时他的作用就是去测量外部输入信号的电压其相当于一块电压表因此它的内阻也相当于时无穷大无穷大的电阻相当于开路如下图所示而当我们不接上拉电阻和下拉电阻时那么引脚就完全悬空了悬空的引脚就相当于一根天线他会接收空间的电磁波我们会读到随机的0和1.如下图那么现在接上上拉电阻同时不接外部输入信号这时电路由两个电阻分压下面的电阻无穷大所以他会分得整个Vdd而上面电阻分得的电压是0V所以线路上的电压就是高电压Vdd,即IO引脚上会出现一个稳定的高电压所以上拉电阻的作用就是当引脚悬空时提供一个默认的高电压同理下拉电阻的作用就是当引脚悬空时提供一个默认的低电压IO最大输出速度在实际情况中高低电压的切换不会瞬间完成电压的切换是需要时间的把电压上升所需要的时间称为上升时间把电压下降所消耗的时间称为下降时间中间输出有效电平的时间成为保持时间如上面两图所示加快电压的切换速度保持时间越来越短当快到一定程度时上升沿和下降沿完全重合此时已经不能输出有效的高低电平了如下图我们使用更快的上升时间和下降时间也就是让两个斜坡更抖这样我们就可以继续输出有效的高低电压了由此可以看出上升时间和下降时间限制了IO的最大输出速度上升时间和下降时间越短最大输出速度越快关于频率的计算这里的2MHz也就是每秒钟切换2000000次而对于输出速度的选择选择满足要求的最小值即可例如驱动LED灯所需的频率一般是几百Hz所以这里选择2MHz的低速即可CubeMX-LED闪烁配置设置这里将PC13设置为开漏模式output open-drain)PA9设置为推挽输出模式(output push-pull)设置引脚电平的初始值PC13设置为HighPA9设置为Low这里设置最大输出速度为低速2MHz)上下拉电阻和自定义标签暂不使用HAL库代码编写所需的两个函数一个设施引脚高低电平一个延时函数在编写程序CubeMX生成的HAL库函数时需要注意CubeMX-按键控制LED亮灭按键一端连接引脚一端接地IO引脚设置为上拉输入当按键松开时上拉电阻会提供给IO引脚一个默认的高电压读到1当按键按下时IO引脚接地读到0