目录
3. 端口输入数据寄存器(GPIOX_IDR(input data register))
4. 端口输出数据寄存器(GPIOX_ODR(output data register))
5. 端口位设置/清除寄存器(GPIOX_BSRR(bit set reset register))
***************************************GPIO*************************************
一、GPIO结构与模式介绍
1.肖特基触发器(施密特触发器)
肖特基管
P-MOS N-MOS
2.GPIO八种工作模式
(参见GPIO工作原理图)
a.四种输入(输入驱动器)
输入浮空 上下拉电阻关闭,肖特基触发器打开,空闲时状态不确定(高阻态),由外部环境确定
输入上拉 上拉电阻打开,下拉电阻关闭,肖特基触发器打开, IO无输入时,高电平
输入下拉 上拉电阻关闭,下拉电阻打开,肖特基触发器打开, IO无输入时,低电平
模拟功能 上下拉电阻关闭,肖特基触发器关闭,输入到片上外设(ADC DAC)
b.四种输出(输出驱动器)
(输入驱动器的上下拉电阻关闭,肖特基触发器打开,故输出模式时可以读IO的状态)
开漏输出 CPU输出,P-MOS管始终不导通,不能输出高电平(除非有外部或内部(F4、F7、H7)上拉),软件IIC的SDL、SCL
推挽输出 驱动能力强(Vdd),25mA,通用输出(可输出高低电平)
开漏式复用功能 片上外设输出,P-MOS始终不导通,不能输出高电平(除非有外部或内部(F4、F7、H7)上拉)
推挽式复用功能 片上外设输出,驱动能力强(Vdd),25mA,通用输出(可输出高低电平)
++++++++++++++++++++++++++++++++++++++++++++++++++++++
二、GPIO寄存器(F1系列每个GPIOx有七个寄存器)
---------------------------------------------------------------------------------------------
(F1系列)GPIO通用寄存器GPIOx_yyy
---------------------------------------------------------------------------------------------
CRL CRH | IDR | ODR | BSRR | BRR | LCKR
---------------------------------------------------------------------------------------------
配置工作模式 | 输入数据 | 输出数据 | 设置ODR | | CRL、CRH
输出速度 寄存器的值 配置锁定
---------------------------------------------------------------------------------------------
1. 端口配置低寄存器(GPIOX_CRL)
(配置PX0-7引脚)共32位
[3:2]、[7:6]~[31:30] : CNFy[1:0]
[1:0]、[5:4]~[29:28] : MODEy[1:0]
4个位控制一个IO口 (CNFy[1:0] MODEy[1:0])--->控制PXy
例 对于GPIOA_CRL(CNF2[1:0] MODE2[1:0])--->控制PA2引脚的工作模式与速度
上下拉输入模式时,由ODR寄存器来确定上下拉 若PxODR为0 则下拉输入,为1则上拉输入
2. 端口配置高寄存器(GPIOX_CRL)
(配置PX8-15引脚)共32位
[3:2]、[7:6]~[31:30] : CNFy[1:0]
[1:0]、[5:4]~[29:28] : MODEy[1:0]
3. 端口输入数据寄存器(GPIOX_IDR(input data register))
共32位
[0:15] 只读 只能以字(16位)读出,值为IO口状态
[16:31] 保留
4. 端口输出数据寄存器(GPIOX_ODR(output data register))
共32位
ODRy [0:15] 即对 PXy设置
[0:15] 可读可写 只能以字(16位)操作
[16:31] 保留
5. 端口位设置/清除寄存器(GPIOX_BSRR(bit set reset register))
共32位
[31:16] BRy 清除端口x的位y 写“1”有效 例:对端口A的BR10写“1”,则对应ODR10=0
[15: 0] BSy 设置端口x的位y 写“1”有效 例:对端口A的BR10写“1”,则对应ODR10=1
ODR和BSRR寄存器控制输出的区别:
使用ODR在读和修改访问之间产生中断时,可能会发生风险;BSRR无风险
BSRR VS ODR
ODR修改:读->改->写 GPIOB->ODR |=1<<3;/* PB3=1 */
BSRR修改:写 GPIOB->BSRR=0x 0000 0000 0000 1000;/* PB3=1 */
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三、通用外设驱动模型(四步法)GPIO配置步骤
1.通用外设驱动模型
a.初始化
时钟设置(选择时钟源(对于有默认时钟源的外设,忽略此步),开启时钟)、
参数(工作模式)设置、
(可选)IO设置(复用) 中断设置(开中断、设置NVIC)
b.读函数(可选)
从外设读取数据
c.写函数(可选)
向外设写入数据
d.中断服务函数(可选)
根据中断标志,处理外设各种中断事务
2.GPIO配置步骤(4个函数)
a. 使能时钟
__HAL_RCC_GPIOx_CLK_ENABLE();(GPIO有默认时钟源,固定挂载在APB2总线上)
功能:开启GPIO时钟
寄存器:(F1)RCC_APB2ENR
b.设置工作模式
HAL_GPIO_Init();
功能:初始化GPIO
寄存器:CRL CRH ODR
c. 设置输出状态(可选)
HAL_GPIO_WritePin();
功能:控制IO输出高低电平
HAL_GPIO_TogglePin();
功能:每次调用IO输出电平翻转
寄存器:BSRR
d.读取输入状态(可选)
HAL_GPIO_ReadPin();
功能:读取IO状态
寄存器:IDR
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
总结
1.什么是GPIO?
General Purpose Input Output 通用输入输出
2.STM32 GPIO简介
3.IO端口基本介绍
4.GPIO八种模式
5.GPIO寄存器介绍
6.通用外设驱动模型
7.GPIO配置关键步骤
8.点亮一个LED
9.通过一个按键控制一个LED灯亮灭