目录
一、问题的引入
学习STM32单片机前,要先了解单片机的最小系统组成
单片机的最小系统由以下四部分组成:
芯片+晶振电路+复位电路+供电电路
一个完整的系统则是:
最小系统+其它的外设
芯片:
整个系统的核心,相当于人类的大脑,会提供引脚与外部电路相连
芯片四周那些银白色的引脚是从芯片内部引申出来的。它负责芯片内部的控制单元与外部硬件的连接。
那么一个引脚其实本质上就是一根"电线"。
引脚拥有输入功能/输出功能,比如:
1.引脚可以输出/输入一个电平信号(1/0)
那么电平信号是针对于CPU来说的,因为CPU只能识别二进制0/1(数字信号)
2.也可以称引脚可以输入/输出一个高低电压
因为对于外部电路来说,外部电路的工作是采用模拟电压信号(即多少V电压)
为什么一个引脚对CPU和外部的电路的输入/输出是不一样的信号?它是怎么做到的?
这是因为引脚在芯片内部还需要通过"控制单元"才能够进入CPU
控制单元:
不同硬件对应不同的控制单元:
GPIO --->GPIO控制器
USART --->USART控制器
......
二、STM32F4xxGPIO内部结构
参考<STM32F4xx中文参考手册.pdf>,英语基础比较好的同学也可以去看<STM32F4xx英文参考手册.pdf>。这两个手册可以到官网去下载,但是一般是全英文的。想要下载中文版的可以进入意法半导体STM32/STM8技术社区www.stmcu.org.cn ,里面有着STM32/STM8相关型号的芯片的各种资料。
通过图得知,每个GPIO可以独立配置成不同的功能
GPIO配置的功能如下:
(1)输入功能
CPU可以通过该GPIO获取外部电路输入的一个电平状态
输入又分成以下几种模式:
a.浮空输入:不接上拉电阻也不接下拉电阻
在这种情况下,IO引脚的电平状态完全由外部输入决定 3.3V-->1 0V-->0
b.带上拉的输入:通过上拉电阻,接了VDD
此时,如果外部的引脚没有任何的输入的时候,CPU也能获取一个高电平(1)
只有在外部输入一个低电平的时候,才能读取到一个低电平
c.带下拉的输入:通过下拉电阻,接入了VSS
此时,如果外部的引脚没有任何的输入的时候,CPU也能获取一个低电平(0)
只有在外部输入一个高电平的时候,才能读取到一个高电平
d.模拟输入
该引脚被配置为模拟输入,能够获取到的就是模拟信号
通过ADC转换获取数字量
(2)输出功能
CPU可以通过该GPIO向外部电路输出一个电平
a.输出推挽(PP)
CPU可以向外部电路输出高电平也可以输出低电平
b.输出开漏(OD)
CPU输出不了高电平,没有P-MOS管
CPU正常输出低电平
(3)复用功能(AF)
复用功能是指GPIO用作其它的外设功能线
比如:
IIC、SPI、USART.....
每个GPIO口理论上都可以配置成16种复用功能
具体哪个引脚可以复用成什么功能,由原理图以及手册决定
三、 STM32F4xxGPIO引脚简介
GPIO是什么 ? 通用功能输入输出
GPIO就是从芯片内部引出的一根功能复用的线
功能复用:GPIO引脚可以由CPU去配置成不同的功能
比如:
输入功能、输出功能、复用功能、模拟功能等等
STM32F407 共有144个引脚
分成9组,记为GPIOA、GPIOB、.....GPIOI
简写模式:PA、PB.....
每个组有16个引脚,编号从0~15
比如GPIOA组的引脚就有:
PA0~PA15
而这些GPIO引脚的功能,都有独立的寄存器组来配置,如果我们要使用这个GPIO,那么就必须先去配置它的寄存器组
那么如果我们要去配置这些寄存器,就必须知道寄存器的地址。
每组GPIO地址分布如下:
可以通过<STM32F4xx中文参考手册>第2章可以查看
边界地址 外设 总线
0x4002 2000 - 0x4002 23FF GPIOI
0x4002 1C00 - 0x4002 1FFF GPIOH
0x4002 1800 - 0x4002 1BFF GPIOG
0x4002 1400 - 0x4002 17FF GPIOF
0x4002 1000 - 0x4002 13FF GPIOE AHB1
0x4002 0C00 - 0x4002 0FFF GPIOD
0x4002 0800 - 0x4002 0BFF GPIOC
0x4002 0400 - 0x4002 07FF GPIOB
0x4002 0000 - 0x4002 03FF GPIOA
上述的表有几个名