0. 引入
在单片机产品中,我们常常可以见到三种模块:LCD灯、KEY按键、BEEP蜂鸣器
LED灯:一个比较常见的LED电路
LED0 ---------- 通过控制LED0引脚(电线)给它一个低电平(低电压),LED灯就会亮
给它一个高电平(高电压),LED灯就会灭
1 —> 高电平
0 —> 低电平
电流:从电势高的地方流向电势低的地方
CPU ===> 往LECD0引脚去 写1,写0"output" 输出功能
KEY按键:一个比较常见的KEY电路
KEY0 ------ 通过读取KEY0引脚的电平状态来知晓用户是否按下按键高电平(1) ---> 弹起
低电平(0) ---> 按下
CPU ===> 读取KEY0引脚的电平状态"input" 输入功能
BEEP蜂鸣器:一个比较常见的BEEP电路
略
这些引脚最终是接入到MCU的某个引脚(gpio)上去的
控制LED灯、KEY按键、BEEP蜂鸣器等,可以在MCU上面写程序去控制这些引脚
1. GPIO到底是什么?
GPIO:General Purpose Input Output 通用功能的输入输出 线
GPIO就是从芯片(芯片 = CPU + 总线 + 外设控制器)内部引出一根功能复用的口线("电线"),可以由CPU配置成不同的功能
如:输入功能,输出功能,其他复用功能等
芯片或CPU控制整个世界就是通过这样的引脚(口线,GPIO)STM32F4xx共有144个GPIO口线(引脚,pin),分为9组,记为GPIOA,GPIOB,GPIOC,GPIOD,GPIOE,GPIOF,GPIOG,GPIOH,GPIOI. 每组管理16个GPIO引脚,编号从0~15
如:GPIOA这一组有16个引脚,分别记为GPIOA0,GPIOA1,GPIOA2,... GPIOA15
其他组类似GPIOA0 -----> PA0
GPIOB3 ------> PB3
......
这些GPIO引脚都是功能复用的,并且由GPIO控制器来控制它们的
所有的外设都是由"外设控制器"来控制
GPIO控制器由不同的寄存器来配置或控制它们(GPIOs)
每组GPIO地址分配如下:GPIOA 0x4002 0000 ~ 0x4002 03ff GPIOB 0x4002 0400 ~ 0X4002 07FF GPIOC 0x4002 0800 ~ 0x4002 0BFF GPIOD 0x4002 0C00 ~ 0x4002 0FFF GPIOE 0x4002 1000 ~ 0x4002 13FF GPIOF 0x4002 1400 ~ 0x4002 17FF GPIOG 0x4002 1800 ~ 0x4002 1BFF GPIOH 0x4002 1C00 ~ 0x4002 1FFF GPIOI 0x4002 2000 ~ 0x4002 23FF
2. STM32F4xx GPIO内部结构原理
每个GPIO内部都可以配置成:1. 输入功能:input mode
CPU可以获取该GPIO口的外部输入的一个电平状态
输入功能有四种模式:
(1) 输入悬空(input floating):不接上拉和下拉电阻
输入引脚处于浮空状态,即没有特定电压状态,引脚悬浮在空中
IO引脚的电平状态完全是外部输入所决定的,这时CPU能够通过读取数据的操作知道状态