文档库 最新最全的文档下载
当前位置:文档库 › 第7章 STM32外设之GPIO

第7章 STM32外设之GPIO

9个GPIO ,140个引脚GPIO A :PA0 ~ PA15 GPIO B :PB0 ~ PB15 GPIO C :PC0 ~ PC15 GPIO D :PD0 ~ PD15 GPIO E :PE0 ~ PE15 GPIO F :PF0 ~ PF15 GPIO G :PG0 ~ PG15 GPIO H :PH0 ~ PH15 GPIO I :PI0 ~ PI11GPIO 最简单的功能是输出高低电平,GPIO 还可以被设置为输入功能,用于读取外部输入信号,比如按键、开关等信号。很多高级外设也有功能引脚,并且是与GPIO 共用的,具体引脚功能可以通过软件编程设置对应的寄存器内容实现的。

图中最右边的“I/O引脚”

就是芯片实物的引脚,

焊接时用到。保护二极

管用于防止因为引脚外

部输入电压过高或过低

烧坏芯片,虽然有保护

作用,但这种保护也是

有限的,大电流大电压

还是很容易烧毁芯片的,这要求实际应用中我们

要注意保护芯片,必要

时设计引脚保护电路。

图中上半部分属于引脚

输入功能,通过一个电阻和一个开关(可以通过寄存器控制开关状态)可以把输入线拉高或者拉低,这个电阻阻值大概为4.7K~10K欧。做为普通的输入引脚,I/O引脚的电平通过触发器后保存在输入数据寄存器内。

图中上半部分属于引脚

输入功能,通过一个电阻和一个开关(可以通过寄存器控制开关状态)可以把输入线拉高或者拉低,这个电阻阻值大概为40K欧。做为普通的输入引脚,I/O引脚的电平通过触发器后保存在输入数据寄存器内。

图中下半部分是引脚输

出功能,通过一个PMOS管和一个NMOS管组合而成一个反相器驱动输出。对于普通的引脚电平控制,根据需要设置置位或者复位寄存器的值,这两个寄存器的值会改变输出数据寄存器值,通过输出控制电路驱动反相器从而改变引脚的状态。

每个GPIO包括10个寄存器来配置GPIO的具体功能(每个引脚功能都是完全可以独立配置,互不影响):

GPIOx_MODER:GPIO 端口模式寄存器

GPIOx_OTYPER:GPIO 端口输出类型寄存器

GPIOx_OSPEEDR:GPIO 端口输出速度寄存器

GPIOx_PUPDR:GPIO 端口上拉/下拉寄存器

GPIOx_IDR:GPIO 端口输入数据

GPIOx_ODR:GPIO 端口输出数据寄存器

GPIOx_BSRR:GPIO 端口置位/复位寄存器

GPIOx_LCKR:GPIO 端口配置锁定寄存器

GPIOx_AFRL:GPIO 复用功能低位寄存器

GPIOx_AFRH:GPIO 复用功能高位寄存器

为实现不同工作条件要求,GPIO 有8种工作模式:

模式配置

模式寄存器

MODER位[0:1]

输出类型寄存器

OTYPER位

输出速度寄存器

OSPEEDER位

上/下拉寄存器

PUPDR位[0:1]

输入浮空00

不使用不使用00

输入上拉0001输入下拉0010模拟功能1100开漏通用输出011

00-速度2MHz 01-速度25MHz 10-速度50MHz 11-速度100MHz 00-无上下拉01-上拉

10-下拉

11-保留

推挽通用输出010复用推挽输出100复用开漏输出101

1.当GPIOx_MODER模式寄存器位[1:0]设置为00,上/下拉寄存器PUPDR[1:0]

位设置为00时

2.STM32复位之后默认模式

I/O引脚信号接入到施密特触发器的输入端,在每来一个AHB1(168MHz)时钟脉冲就把输入端的信号传输到触发器的输出端,施密特触发器的输出端又是与输入数据寄存器(GPIOx_IDR)连通的,所以该数据就保存在输入数据寄存器内,寄存器本身就是一个存储单元(起到缓冲区效果),所以输入数据寄存器保存着I/O引脚电平。另外,CPU随时都可以读取寄存器数据,从而得知当前引脚状态。

1.在浮空输入模式基础上使能输入电路中的上拉开关

2.上拉开关由上/下拉寄存器PUPDR[0:1]设置为01来使能。

1.在浮空输入模式基础上使能输入电路中的下拉开关

2.下拉开关由上/下拉寄存器PUPDR[0:1]设置为10来使能。

1.当STM32需要进行ADC或DAC转换时,需要把引脚设置为模拟输入模式

2.该模式需要配合ADC或DAC外设使用,否则没有意义。

通用输出模式就是做为普通用途的输出模式,比如简单地控制引脚输出高低电平。GPIO的输出是由一个PMOS管和一个NMOS管组合形成的反相器驱动。

1.开漏电路概念中的“漏”是指MOS管的漏极(D),实际只是利用到NMOS

管,PMOS管在开漏模式下是没有用到的

2.设置输出高电平时引脚实际是高组态

1.目的:控制I/O引脚开漏输出高电平。STM32实际流程:CPU把端口位设置/清除寄存

器(GPIOx_BSRR)引脚对应外设置为1,然后驱动端口输出数据寄存器(GPIOx_ODR)对应位为1,实际上也可以让CPU直接往GPIOx_ODR寄存器引脚对应位写入1。GPIOx_ODR 寄存器通过一个选择电路(与复用功能输出做选择)后输入到输出控制电路,经过输出控制电路后在NMOS控制线输出低电平,这时NMOS管截止(PMOS管不被激活),引脚呈高阻状态,不会有电流流动。

2.目的:控制I/O引脚开漏输出低电平。STM32实际流程:CPU把端口位设置/清除寄存

器(GPIOx_BSRR)对应引脚位复位置为1,然后驱动输出数据寄存器(GPIOx_ODR)对应位为0,实际上也可以让CPU直接望GPIOx_ODR寄存器引脚对应位写入0。GPIOx_ODR寄存器通过一个选择电路(与复用功能输出做选择)后输入到输出控制电路,经过输出控制电路后在NMOS控制线输出高电平,这时NMOS管导通(PMOS管不被激活),引脚呈低电平状态,允许有电流从引脚流入。

3.另外,整个过程施密特触发输入是被被激活的,出现在I/O脚上的数据在每个AHB1时

钟被采样到输入数据寄存器,对输入数据寄存器的读访问可得到I/O状态。

1.推挽输出把PMOS管和NMOS管都用上

2.设置输出高电平时引脚实际是有电流从引脚流出

一个I/O引脚可以做为普通的IO接口,还可以做为其他外设的特殊功能引脚,有些引脚可能有4、5种不同功能,这种现象就叫做复用。引脚复用为特殊功能引脚,那引脚状态就由该外设决定。

相关文档