GPIO(引脚)

1、引入
俗称 “引脚”,芯片四周的那些银白色的线是从芯片内部引伸出来的,就是芯片的引脚。

	它负责芯片内部的控制单元与外部相应外设的连接。	
	引脚其实本质上就是一根电线。

芯片:整个系统的核心,相当于人类的大脑,会提供引脚与外部电路相连。

引脚拥有输入/输出功能,比如:

  1)引脚可以输入/输出一个电平信号(1/0)
		这个电平信号是对于CPU来说的,因为CPU只能识别 0/1
  2)引脚可以输入/输出一个高低电压。
		因为对于外部电路来说,外部电路的工作是采用的模拟电信号(电压值)。
		
单片机最小系统组成:
	CPU + 供电电路 + 晶振电路 + 复位电路
	
一个完整的系统的组成:
	单片机最小系统组成 + 项目所需要的其它硬件(外设)

2、STM32F4xx GPIO内部结构
GPIO配置功能如下:
(1) 输入功能
CPU可以获取该GPIO口的对应的外部电路输入的一个电平状态。

	a.	输入悬空(Input Floating):不接上拉电阻,也不接下拉电阻
		上拉电阻:经过一个小阻值的电阻,接入到VDD(VCC)
		下拉电阻:经过一个小阻值的电阻,接入到VSS(GND)
				每一个GPIO内部都有一个上拉电阻和下拉电阻可以供用户选择。
		悬空:就是逻辑器件的输入引脚内部,既不接上拉电阻也不接下拉电阻	
		IO引脚的电平状态完全由外部电路输入所决定,此时CPU可以通过读取数据的操作获知外部电路的工作状态。

	b.	带上拉的输入(Input pull-up):通过上拉电阻,接入VCC
		此时,IO引脚没有外部输入信号时,CPU也能获取到一个高电平。
		唯有在外部电路输入低电平的时候,CPU才能读取到一个低电平。
				
	c.	带下拉的输入(Input pull-down):通过下拉电阻,接入GND
		此时,IO引脚没有外部输入信号时,CPU也能获取到一个低电平。
		唯有在外部电路输入高电平的时候,CPU才能读取到一个高电平。
		
	d.	模拟输入(Input Analog)
		该引脚被设置为模拟输入时,能够获取到模拟信号,通过AD转化为数字量。

(2) 输出功能
CPU可以往该GPIO口输出一个电平状态。

	a.	输出推挽(PP)
		CPU可以向外部电路输出高电平也可以输出低电平。
		
	b.	输出开漏(OD)
		不输出电平。
		CPU写0时,引脚接地。
		CPU写1时,悬空(如果用户接了上拉电阻,则CPU在写1的时候,IO口会接到用户的上拉电阻上去)。

(3) 复用功能(AF:Alternate Function)
复用功能是指GPIO口用户其它的外设功能口线。
如: I2C/USART/SPI等。

每一个GPIO口都可以配置成多达16种复用功能。

3. STM32F4xx GPIO引脚简介
GPIO: General Purpose Input Output 通用功能输入输出

	GPIO就是从芯片内部印出来的一根功能可以复用的电线。

STM32F4xx 共有144个GPIO引脚。

分为9组,记为GPIOA/GPIOB....GPIOI,简写PA/PB/PC...PI
每组的引脚数量为16个,编号0~15
比如GPIOA:
	GPIOA0		PA0
	GPIOA1		PA1
	...
	GPIOA15		PA15
这些GPIO口如果用户想使用他们,就必须先配置他们。
这些GPIO口的功能都有独立的寄存器组来配置他们。

边界地址:指寄存器组的起始地址(基址)和结束地址
外设:该寄存器组对应的硬件控制器
总线:该硬件控制器所处的系统时钟总线。

任何一个硬件控制器想要正常工作的话,都必须实现开启(使能)时钟。而总线就是给硬件控制器提供时钟用的。

4、STM32F4xx GPIO寄存器说明
每个通用 I/O 端口包括
1)4 个 32 位配置寄存器
GPIOx_MODER: 功能模式选择寄存器
偏移地址:0x00

	基址 + 偏移地址 = 寄存器地址
	比如:GPIOF_MODER 的地址 0x4002 1400 + 0x00
	
	该寄存器用来控制GPIOx(x = A/B/C...I)组的16个GPIO引脚的模式(模式:输入/输出/复用/模拟)
	每一个GPIO口占用2个bit,编号为y(y=0...15)的GPIO引脚在该寄存器中的bit位为:GPIOF_MODER[2y+1:2y]
	其具体的配置如下:
	GPIOF_MODER[2y+1:2y]		        模式
			 00						  输入模式 
			 01						通用输出模式 
			 10						复用功能模式 
			 11						  模拟模式

GPIOx_OTYPER: Output Type Register 输出类型选择寄存器
偏移地址:0x04

	该寄存器用来配置GPIOx(x=A/B...I)组的16个GPIO引脚的输出类型。
	每一个GPIO引脚占1个bit,编号为y(y=0..15)的GPIO引脚在该寄存器中的bit位为: GPIOx_OTYPER[y]
	其具体的配置如下:
			GPIOx_OTYPER[y]		输出类型
			      1				输出开漏
				  0				输出推挽

GPIOx_OSPEEDR: 端口输出速度寄存器
偏移地址:0x08

	该寄存器用来配置GPIOx(x=A/B...I)组的16个GPIO引脚的输出速率。
	每一个GPIO引脚占2个bit,编号为y(y=0..15)的GPIO引脚在该寄存器中的bit位为:GPIOx_OSPEEDR[2y + 1:2y]
	其具体的配置如下:
			GPIOx_OSPEEDR[2y + 1:2y]		速率
			      00					2 MHz(低速) 
				  01					25 MHz(中速) 
				  10					50 MHz(快速) 	<-------主要用的
				  11   		 30 pF 时为 100 MHz(高速)(15 pF 时为 80 MHz 输出(最大速度))

GPIOx_PUPDR: 端口上拉/下拉寄存器
偏移地址:0x0C

	该寄存器用来配置GPIOx(x=A/B...I)组的16个GPIO引脚的上下拉电阻选择。
	每一个GPIO引脚占2个bit,编号为y(y=0..15)的GPIO引脚在该寄存器中的bit位为:GPIOx_PUPDR[2y + 1:2y]
		
		其具体的配置如下:
			GPIOx_PUPDR[2y + 1:2y]			上下拉选择
					00					    无上拉或下拉 
					01							上拉 
					10							下拉 
					11							保留

2)2 个 32 位数据寄存器
GPIOx_IDR: 端口输入数据寄存器
偏移地址:0x10

	该寄存器用来表示GPIOx(x=A/B...I)组的16个GPIO引脚的输入电平值。		
	每一个GPIO引脚占1个bit。该寄存器中,位31:16是保留的,位15:0表示x组的16个GPIO引脚的输入电平。
	GPIOx_IDR[0] --> GPIOx0的输入电平状态

GPIOx_ODR: 端口输出数据寄存器
偏移地址:0x14
该寄存器用来表示GPIOx(x=A/B…I)组的16个GPIO引脚的输出电平值。

	每一个GPIO引脚占1个bit。该寄存器中,位31:16是保留的,位15:0表示x组的16个GPIO引脚的输出电平值。

3)1 个 32 位置位/复位寄存器
GPIOx_BSRR: 端口置位/复位寄存器
偏移地址:0x18

	Bit Set     置位   	bit置1
	Bit Reset	复位	bit置0
	
	该寄存器用来表示GPIOx(x=A/B...I)组的16个GPIO引脚的输出电平值。
	其中:
		bit31:16为端口复位寄存器
		bit15:0为端口置位寄存器
		写1有效,写0无效
	
	将GPIOx_BSRR[31:16]置1,表示将GPIOx15~GPIOx0设置为0
	将GPIOx_BSRR[15:0]置1,表示将GPIOx15~GPIOx0设置为1

4)1 个 32 位锁定寄存
GPIOx_LCKR: 端口配置锁定寄存器

5)2 个 32 位复用功能选择寄存
GPIOx_AFRH: 复用功能低位寄存器
偏移地址:0x20
GPIOx_AFRL: 复用功能高位寄存器
偏移地址:0x24

GPIOx_AFRH 和 GPIOx_AFRL 两个寄存器是放在一起使用的。
GPIO引脚编号为0~7的引脚的复用功能由GPIOx_AFRL进行配置。

5、STM32F4xx GPIO时钟的使能

  • 根据上述寄存器,就可以实现对所有基于GPIO能够完成的功能配置啦。
    但是,硬件控制器想要工作,必须要使能时钟
    –> 所有的GPIO分组都是处于AHB1时钟总线上
    时钟相关的配置,

    RCC:Reset Clock Control 复位时钟控制。
    基址:0x40023800
    目的:使能GPIOF组的时钟

    RCC AHB1 外设时钟使能寄存器 (RCC_AHB1ENR)
    偏移地址:0x30
    
    此寄存器第0位到第8位分别控制GPIOA到GPIOI组时钟的使能,比如:
    		使能GPIOF组的时钟
    		RCC_AHB1ENR[5] --> 1
    

总结:
GPIO使用流程:

	a.	使能GPIO分组的时钟(RCC_AHB1ENR)	
	
	b.	配置GPIO
		1)	配置GPIO功能模式(GPIOx_MODER)
		2)	配置GPIO输出类型(GPIOx_OTYPER)
		3)	配置输出速率(GPIOx_OSPEEDR)
		4)	配置上下拉的选择(GPIOx_PUPDR)
		
	c.	如果配置成了输入模式,则通过GPIOx_IDR可以获取外部电路的工作电平啦。
		如果配置成了输出模式,则通过GPIOx_ODR或者GPIOx_BSRR就可以向外部电路输出电平啦。
		如果配置成了复用模式,则看复用的是什么功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

m0_60265426

都是好兄弟

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值