GPIO
1、GPIO简介
general porpose intput output:通用输入输出端口。芯片与外部设备通过GPIO相连接,从而实现与外部的通信,控制以及数据采集的功能。
2、GPIO的工作模式
输入 | 输出 |
---|---|
输入浮空 | 开漏输出 |
输入上拉 | 开漏复用功能 |
输入下拉 | 推挽输出 |
模拟输入 | 推挽式复用功能 |
2.1 四种输入输出模式的区别
输入 | 说明 |
---|---|
输入浮空 | IO口的电平取决于其连接的外部的电平 |
输入上拉 | 默认接上拉电阻,没有外部电平时IO口电平默认高 |
输入下拉 | 默认接下拉电阻,没有外部电平时IO口电平默认低 |
模拟输入 | 模拟外部输入的信号,常用语ADC转换 |
输出 | 说明 |
---|---|
开漏输出 | 只能输出强低电平,高电平靠外部电阻拉高 |
开漏复用功能 | |
推挽输出 | 可以输出强高强低电平,连接数字器件 |
推挽式复用功能 |
3、相关寄存器
3.1、RCC AHB1外设时钟使能寄存器(RCC_AHB1EBR)
3.2、GPIO端口模式寄存器(GPIOx_MODER)
这些位通过软件写入,用于配置 I/O 方向模式。
00:输入(复位状态)
01:通用输出模式
10:复用功能模式
11:模拟模式
3.3、GPIO端口输出类型寄存器(GPIOx_OTYPER)
这些位通过软件写入,用于配置 I/O 端口的输出类型。
0:输出推挽(复位状态)
1:输出开漏
3.4、GPIO端口输出速度寄存器(GPIOx_OSPEEDR)
这些位通过软件写入,用于配置 I/O 输出速度。
00: 2 MHz(低速)
01: 25 MHz(中速)
10: 50 MHz(快速)
11: 30 pF 时为 100 MHz(高速)( 15 pF 时为 80 MHz 输出(最大速度))
3.5、GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR)
这些位通过软件写入,用于配置 I/O 上拉或下拉。
00:无上拉或下拉
01:上拉
10:下拉
11:保留
3.6、GPIO 端口输入数据寄存器 (GPIOx_IDR)
这些位为只读形式,只能在字模式下访问。它们包含相应 I/O 端口的输入值。
3.7、GPIO 端口输出数据寄存器 (GPIOx_ODR)
这些位可通过软件读取和写入。
4、位操作点亮LED
以STM32F407IGT6为例
int main(void)
{
sys_stm32_clock_init(336, 8, 2, 7); /* 设置时钟,168Mhz */
delay_init(168); /* 延时初始化 */
usart_init(84, 115200); /* 串口初始化为115200 */
RCC->AHB1ENR |=1<<4; //使能 PORTF 时钟 GPIOE使能
GPIOE->MODER &= ~(0x0F); //对应位清零
GPIOE->MODER |= 0x05; //0101
GPIOE->OSPEEDR &= ~(0x0F);
GPIOE->OSPEEDR |= 0x0A; //1010
GPIOE->PUPDR &= ~(0x0F);
GPIOE->PUPDR |= 0x05;
GPIOE->OTYPER &= 0x00;
GPIOE->ODR |= 0x03; // 11
while (1)
{
GPIOE->ODR = 0x00;
delay_ms(500);
GPIOE->ODR = 0x03;
delay_ms(500);
}
}