一、STM32的GPIO
HAL库操作GPIO时,根据GPIO的分组,和GPIO的编号来确定需要操作的GPIO。
二、输入输出模式
2.1 GPIO结构图
2.2 模式介绍
STM32的GPIO可配置为输入或输出模式。
输出模式有4种:
- 推挽输出:推挽结构由两个MOS管按互补对称的方式连接,任意时刻总是其中一个三极管导通,另一个三极管截
止。推挽模式,让“输出控制”变为了VDD/Vss输出,使得输出电流增大,提高了输出引脚的驱动能力,提高
了电路的负载能力和开关的动作速度。 - 开漏输出:开漏模式下,“输出控制”不会控制P-MOS管,“输出控制”只会向N-MOS管栅极加一定电压,两个
MOS管都处于截止状态,两个漏极处于悬空状态,称之为漏极开路。开漏输出模式需要外接上拉电阻或使能内部上拉电阻才能输出高电平。 - 复用功能推挽/开漏输出:GPIO引脚除了作为通用输入/输出引脚使用外,还可以作为片上外设(USART、I2C、SPI等)专用引脚,即一个引脚可以有多种用途,但同一时刻一个引脚只能使用复用功能中的一个。当引脚设置为复用功能时,可选择复用推挽输出模式或复用开漏输出模式,在设置为复用开漏输出模式时,需要外接上拉电阻。
输入模式也有4种:
- 上拉输入模式:VDD经过开关、上拉电阻,连接外部I/O引脚。当开关闭合,外部I/O无输入信号时,默认输入高电平。该模式的典型应用就是外接按键,当没有按键按下时候,MCU的引脚为确定的高电平,当按键按下时候,引脚电平被拉为低电平。
- 下拉输入模式:Vss经过开关、下拉电阻,连接外部I/O引脚。当开关闭合,外部I/O无输入信号时,默认输入低电平。
- 浮空输入模式:两个上/下拉电阻开关均断开,既无上拉也无下拉,I/O引脚直接连接TTL肖特基触发器,此时I/O引脚浮空,读取的电平是不确定的,外部信号是什么电平,MCU引脚就输入什么电平。MCU复位上电后,默认为浮空输入模式。
- 模拟输入模式:两个上/下拉电阻开关均断开,同时TTL肖特基触发器开关也断开,引脚信号直接连接模拟输入,实现对外部信号的采集。
三、按键输入电路
按键抬起时PA0端口输入高电平,按键按下后PA0端口输入低电平。在按键按下和抬起的过程中,存在按键抖动,程序检测按键时需做按键去抖处理,防止一次按键下时出发多次按键事件。去抖方法是第一次检测到按键低电平后,延时一段时间(数十毫秒),然后在判断按键是否仍为低电平,若为低电平,则认为确有按键按下。程序实现上可采用软件延时或定时器延时实现,后者更高效,不阻碍其他任务的执行。
四、时钟
时钟对于一款芯片非常重要,其作用相当于人的心脏,人只有在心率正常稳定的情况下才能健康生活,同样的,芯片只有工作在合法正常的时钟频率下才能保证程序得到正常的运行。上图为STM32F103系列的时钟树,如图所示,左侧的①HSI(内部高速时钟)、②HSE(外部高速时钟)、③LSE(外部低速时钟)、④LSI(内部低速时钟)为时钟源,右侧的各种片上外设。图中矩形框内用“/”加数字表示分频器,如:,;数字表示几分频;矩形框内用“X”加数字表示的为锁相环,如:,;数字表示几倍频;倒梯形表示选择器,长边表示多个输入,短边表示选择其中一个输出。系统时钟SYSCLK最高为72MHz,外设总线APB1最高36MHz,外设总线APB2最高72MHz。
通过STM32CubeMx可方便的进行时钟配置,当然使用HAL库手动进行配置更为灵活,必须掌握。具体配置方法查看HAL库源码或HAL用户手册即可。