这周进行了对stm32的学习,对GPIO有了一些了解。
GPIO简介:
GPIO(General Purpose Input Output)是通用输入输出口的简称,主要用于数字量的输入和输出,是微控制器中使用频率最高的外设。 其可配置为8种输入输出模式。
引脚电平:0V~3.3V,部分引脚可容忍5V
输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
GPIO基本结构:
在STM32中所有的GPIO都是挂在APB2外设总线上,GPIO被分为了很多组(GPIOA,GPIOB...),每个GPIO都可以看作一个单独的子模块(端口),每个子模块(端口)都接有属于自己的16个引脚(如:PA0-PA15)。GPIO中包含了寄存器和驱动器,寄存器就是一段特殊的存储器,内核可以通过APB2总线对寄存器进行读写,这样就能实现输出电平和读取电平的功能,并且GPIO也是通过寄存器来控制引脚的工作模式,输出寄存器输出1就会引脚输出高电平,输出0则引脚输出低电平。驱动器是用来负责增大驱动能力的。
GPIO的电路结构:
整个电路结构由三部分组成:端口寄存器组,输入/输出驱动器,引脚电路(从左往右的三个部分)。
GPIO的工作模式:
如图可以了解GPIO的工作模式
浮空输入:引脚电平状态不确定,完全由外部输入决定
上拉输入:引脚内部接上拉电阻,没有外部信号输入时,默认高电平
下拉输入:引脚内部接下拉电阻,没有外部信号输入时,默认低电平
推挽输出:P-MOS和N-MOS管轮流工作,可以输出高电平或低电平(我常用的)
开漏输出:P-MOS一直处于截止状态,只有N-MOS管工作,只能输出低电平
基于HAL库的一些GPIO函数介绍:
引脚初始化函数:HAL_GPIO_Init
该函数用于初始化GPIO并且是由CubeMX软件自动生成,至于如何初始化就看你CubeMX中如何设置的
引脚读取函数:HAL_GPIO_Readpin
该函数用于读取指定引脚的电平状态,需要用户自己调用。输入的两个参数,第一个是选择端口号即GPIOA/GPIOB/GPIOC,第二个是选择引脚号即PIN1/PIN2/PIN15
如:HAL_GPIO_ReadPin(Light_GPIO_Port,Light_Pin);
引脚写入函数:HAL_GPIO_WritePin
该函数用于设置引脚输出高电平或低电平,需要用户自己调用。输入的三个参数,第一个是选择端口号即GPIOA/B/C,第二个是选择引脚号即PIN1/2/15,第三个是输出高电平还是低电平。GPIO_PIN_RESET表示输出低电平,GPIO_PIN_SET表示输出高电平
如:HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);
引脚翻转函数:HAL_GPIO_TogglePin
如:HAL_GPIO_TogglePin(Light_GPIO_Port,Light_Pin);
该函数用于翻转引脚的电平状态,即原来是高电平,现在翻转为低电平,需要用户自己调用。输入的两个参数,第一个是选择端口号即GPIOA/GPIOB/GPIOC,第二个是选择引脚号即PIN1/PIN2/PIN15。
总结:
本次学习了GPIO,知道GPIO是什么,有什么功能,结构是怎么样的以及对GPIO的一些函数有了一定的了解。虽然了解这些知识都十分浅薄、基础,但对我而言这已经是一个进步了。原本在大一的时候,就学过一段时间STM32,但当时对模电,数电没有了解,什么都看不懂,越听越困导致学习的时候十分困难。现在大二了,学习数电,模电之后勉强能知道讲了什么,是什么个原理,就又燃起学习STM32的兴趣,希望以后能一直坚持吧。
参考文献:
江协科技的STM32入门教程-2023版
嵌入式系统设计——基于STM32CubeMX与HAL库