STM32F4X-GPIO输出功能使用

什么是GPIO

GPIO全称通用输入输出接口,无论是低端单片机还是高端单片机,GPIO都是一个最基础的模块,如果没有GPIO,那么单片机就是一块废铁,GPIO是单片机跟外界通信的最重要的模块。GPIO一个最基础的功能是输出高低电平和接收外界的输入信号,也可以复用成其他功能,比如ADC、PWM、SPI功能等。

STM32F4X GPIO讲解

下面来了解一些STM32F4 GPIO的一些寄存器配置

GPIO 端口模式寄存器

STM32F4X-GPIO输出功能使用_第1张图片
GPIO的端口模式寄存器主要配置GPIO的模式,STM32F4X的GPIO模式有4种

输入模式 输出模式 复用模式 模拟模式
读取GPIO的电平状态 将GPIO输出高低电平 将GPIO配置成其他功能,比如ADC、PWM、SPI功能 将GPIO设置成ADC模式

GPIO 端口输出类型寄存器

STM32F4X-GPIO输出功能使用_第2张图片
STM32F4X-GPIO输出功能使用_第3张图片
推挽输出和开漏输出是GPIO的两种状态,主要区别如下:

推挽输出特点

优点:
1.输出高低电平与电源电压基本没有压差;
2.高低电平驱动能力较强,一般数字芯片推挽
3.输出IO口驱动电流最大可到20mA;
4.电平切换速度快。
缺点:
不支持线与

开漏输出特点

优点:
1.可实现电平转换,输出电平取决于上拉电阻电源;
2.可以实现IO的线与;
缺点:
1.高电平驱动能力差,取决于外部上拉电阻;
2.电平切换速率取决于外部上拉电阻

GPIO 端口输出速度寄存器

STM32F4X-GPIO输出功能使用_第4张图片
GPIO 端口输出速度寄存器是设置GPIO的输出速度,可以设置4种输出速度,分别是2MHZ、25MHZ、50MHZ和100MHZ。

GPIO 端口上拉/下拉寄存器

STM32F4X-GPIO输出功能使用_第5张图片
STM32F4X-GPIO输出功能使用_第6张图片
上下拉寄存器可以设置为无上下拉,上拉和下拉。

GPIO 端口置位/复位寄存器

STM32F4X-GPIO输出功能使用_第7张图片

GPIO 端口置位/复位寄存器是设置GPIO的高低电平状态,当需要设置GPIO为高电平时,需要把该寄存器的低15位的某个bit设置为1,当需要设置GPIO为低电平时,需要把该寄存器的高15位的某个bit设置为1。

GPIO 端口输入数据寄存器

STM32F4X-GPIO输出功能使用_第8张图片
GPIO 端口输入数据寄存器是读取GPIO的电平状态,该寄存器是只读寄存器,只能读不能写。

GPIO 复用功能寄存器

STM32F4X-GPIO输出功能使用_第9张图片
STM32F4X-GPIO输出功能使用_第10张图片
该寄存器是将GPIO复用成其他功能。

STM32F4X GPIO输出模式配置步骤

1、第一步要先把GPIO的时钟打开
2、将GPIO引脚设置成输出模式
3、将GPIO引脚设置成高低电平

STM32F4X GPIO输出配置程序

void bsp_led_init(void)
{
	
	GPIO_InitTypeDef GPIO_InitStruct;
	RCC_AHB1PeriphClockCmd(LED_RED_GPIO_CLK,ENABLE); // 打开GPIOF时钟
	
	GPIO_InitStruct.GPIO_Pin = LED_RED_GPIO_PIN; // GPIO引脚编号
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;   // GPIO模式配置成输出模式
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz; // GPIO输出速度 2MHZ
	GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; // GPIO设置成推挽输出
	GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL; // GPIO不带上下拉
	GPIO_Init(LED_RED_GPIO,&GPIO_InitStruct); // 初始化GPIO
}

void led_set_level(u8 level)
{
	switch (level)
	{
		case LED_ON:
			GPIO_SetBits(LED_RED_GPIO,LED_RED_GPIO_PIN); // 设置GPIO为高电平
		break;
		case LED_OFF:
			GPIO_ResetBits(LED_RED_GPIO,LED_RED_GPIO_PIN); // 设置GPIO为低电平
		break;
		default:
			break;
	}
}
int main(void)
{
	system_tick_init();
	bsp_led_init();	
	
  while(1){
	led_set_level(LED_ON);
	delay_ms(1000);
	led_set_level(LED_OFF);
	delay_ms(1000);
	 
	}
}

有关GPIO输出的操作函数

STM32的厂家为了让用户更快地进行产品的开发,开放了一套叫库函数的开发模式,库函数就是屏蔽了寄存器操作,提高产品的开发速度。

GPIO 操作函数

/**
函数作用:初始化一个GPIO
GPIOx:GPIO引脚所在的GPIO组
GPIO_InitStruct:GPIO对象的结构体 
**/
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

/**
函数作用:设置GPIO电平为高
GPIOx:GPIO引脚所在的GPIO组
GPIO_Pin:GPIO引脚
**/
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

/**
函数作用:设置GPIO电平为低
GPIOx:GPIO引脚所在的GPIO组
GPIO_Pin:GPIO引脚
**/
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

GPIO 对象结构体

typedef struct
{
  uint32_t GPIO_Pin;        // GPIO引脚

  GPIOMode_TypeDef GPIO_Mode;   // GPIO 模式

  GPIOSpeed_TypeDef GPIO_Speed;   // GPIO输出速率

  GPIOOType_TypeDef GPIO_OType;  // GPIO输出类型

  GPIOPuPd_TypeDef GPIO_PuPd;    // GPIO上下拉模式
}GPIO_InitTypeDef;

你可能感兴趣的:(STM32学习,stm32,嵌入式硬件)