资讯详情

GPIO简介

GPIO简介

1.介绍

GPIO它是通用输入输出端口的缩写,简单地说就是STM32可控引脚,STM32芯片的GPIO引脚与外部设备连接,实现与外部通信、控制和数据采集的功能。STM32芯片的GPIO每组有16个引脚,如型号为STM32F103VET6型芯片有GPIOA、GPIOB、GPIOC至GPIOE共5组GPIO,芯片一共1O0个引脚,其中GPIO占了很大一部分,一切GPIO引脚具有基本的输入输出功能。

最基本的输出功能是由STM32控制引脚输出高低电平,实现开关控制GPIO引脚接入到LED灯,可以控制LED灯亮灭,引脚接入继电器或三极管,可通过继电器或三极管控制外部大功率电路的通断。

最基本的输入功能是检测外部输入电平,如把手GPIO将引脚连接到按钮上,区分按钮是否按下电平。

1.1 保护二极管及上下拉电阻

**两根保护引脚的二次管可防止引脚外部电压输入过高或过低,**当引脚电压高于时VDD当引脚电压低于时,当引脚电压低于Vss下二极管导通,防止异常电压引入芯片导致芯片烧毁。虽然有这样的保护,但并不意味着STM32的引脚可以直接连接到大功率驱动器件,如直接驱动电机,强制驱动要么电机不转动,要么芯片烧坏,必须增加功率和隔离电路驱动。

1.2 P-MOS 管和N-MOS 管

GPIO引脚线通过两个保护二极管后,向上流向输入模式结构,向下流向输出模式结构。首先看输出模式部分,线路通过一个PMOS和N-MOS由管道组成的单元电路。

所谓的,根据这两个MOS命名管道的工作模式。**在结构中输入高电平时,反向后,上方P-MOS导通,下面的N-MOS关闭,对外输出高电平;在结构中输入低电平时,反向后,N-MOS管导通,P-MOS关闭,对外输出低电平。*****当引脚高低电平切换时,两根管道轮流导通,P负责灌电流,N管道负责拉电流,大大提高了其负载能力和开关速度。*推拉输出的低电平为0伏,高电平为3.3伏,具体参考图推拉等效电路,是推拉输出模式下的等效电路。

而在时,

typedef enum  { 
              GPIO_Mode_AIN = 0x0, // 模拟输入      GPIO_Mode_IN_FLOATING = 0x04, // 浮空输入      GPIO_Mode_IPD = 0x28, // 下拉输入      GPIO_Mode_IPU = 0x48, // 上拉输入            GPIO_Mode_Out_OD = 0x14, // 开漏输出      GPIO_Mode_Out_PP = 0x10, // 推挽输出      GPIO_Mode_AF_OD = 0x1C, // 复用开漏输出      GPIO_Mode_AF_PP = 0x18 // 复用推挽输出  } GPIOMode_TypeDef; 

流程

1)使能IO调用口时钟:

RCC_ABP2PeriphColckCmd( )

  1. 初始化IO口模式,调用:

GPIO_Init( )

  1. 操作IO口,输出高低电平

GPIO_SetBits( )

GPIO_ResetBits( )

#为了增加代码的可移植性,硬件的相关宏定义是 bsp_LED.h 中 #ifndef _BSP_LED_H #define _BSP_LED_H  #define LED1_GPIO_CLK RCC_APB2Periph_GPIOA #define LED1_GPIO_PORT GPIOA #define LED1_GPIO_PIN GPIO_Pin_8

#define LED2_GPIO_CLK RCC_APB2Periph_GPIOD
#define LED2_GPIO_PORT GPIOD
#define LED2_GPIO_PIN GPIO_Pin_2

#include "stm32f10x.h"
void LED_GPIO_Config(void);
#endif/*_BSP_LED_H*/

LED初始化配置

#include "./LED/bsp_led.h"
void LED_GPIO_Config(void)
{ 
        
	GPIO_InitTypeDef GPIO_InitType_struct_A;
	GPIO_InitTypeDef GPIO_InitType_struct_D;
	
	/*第一步打开外设时钟*/
	RCC_APB2PeriphClockCmd(LED1_GPIO_CLK,ENABLE);
	RCC_APB2PeriphClockCmd(LED2_GPIO_CLK,ENABLE);
	/*第二步配置外设初始化结构体*/
	GPIO_InitType_struct_A.GPIO_Pin = LED1_GPIO_PIN; 
	GPIO_InitType_struct_A.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitType_struct_A.GPIO_Speed = GPIO_Speed_10MHz;
	
	GPIO_InitType_struct_D.GPIO_Pin = LED2_GPIO_PIN;
	GPIO_InitType_struct_D.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitType_struct_D.GPIO_Speed = GPIO_Speed_10MHz;
	
	/*第三步调用初始化函数,把配置好的结构体成员写到寄存器中*/
	GPIO_Init(LED1_GPIO_PORT,&GPIO_InitType_struct_A);
	GPIO_Init(LED2_GPIO_PORT,&GPIO_InitType_struct_D);

主程序

#include "stm32f10x.h"
#include "./LED/bsp_led.h"

void delay(uint32_t count)
{ 
        
	for(;count!=0;count--);
}

int main(void)
{ 
        
	LED_GPIO_Config( );
	
	while(1)
	{ 
        
		GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN);
		GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
		delay(0xfffff);
		GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN);
		GPIO_ResetBits(GPIOD,LED2_GPIO_PIN);
		delay(0xfffff);
		
	}
}

标签: bsp62三极管2af05继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台