普通IO口,用于测量端口电平,输出使能端口电平。
模转数端口,由于某些传感器采集回来的参数不是高低电平的,而是可变电平的(0V~3.3V)。主要用于采集传感器的值,并且该传感器仅仅是输出模拟电压数值的传感器。
数转模端口,这类端口为输入端口,根据电压大小来控制外部设备。用途:音量控制,音频解码器的输入等。
复用模式:仅仅只是将一些特殊的输入输出电平次序组合成一套标准,并且将这套标准集合在硬件上。用在串口通讯、IIC通讯、SPI通讯、USB通讯等。
#include "bsp_GPIO.h"
#include "stm32f4xx.h"
//函数输入:
//1. GPIOx : 选择需要初始化的端口组
//2. GPIO_Pin : 选定端口组的引脚
//3. GPIO_Mode :端口的模式 0 : 输出 0 : 输入
//4. GPIO_OType : 端口输出类型(仅在端口为输出状态使用)
//5. GPIO_PuPd : 上拉\下拉\悬空
//函数返回 : 无
//函数功能 : 根据初始化内容进行数据初始化
void GPIO_Initilize(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef GPIO_Mode,GPIOOType_TypeDef GPIO_OType,GPIOPuPd_TypeDef GPIO_PuPd)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(GPIOx == GPIOA)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
else if(GPIOx == GPIOB)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
else if(GPIOx == GPIOC)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);
else if(GPIOx == GPIOD)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
else if(GPIOx == GPIOE)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitStruct.GPIO_Mode = GPIO_Mode;
GPIO_InitStruct.GPIO_OType = GPIO_OType;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd;
GPIO_InitStruct.GPIO_Speed = GPIO_High_Speed;
GPIO_Init(GPIOx,&GPIO_InitStruct);
}
//函数输入 :
//1. GPIOx : 选择需要初始化的端口组
//2. GPIO_Pin : 选定端口组的引脚
//3. out : 函数输出 0:输出低电平 1:输出高电平
//函数返回 : 无
//函数功能 : 设定指定引脚的高低电平状态
void GPIO_Set(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,unsigned char out)
{
if(out == 0)
GPIO_ResetBits(GPIOx,GPIO_Pin);
else if(out == 1)
GPIO_SetBits(GPIOx,GPIO_Pin);
}
//函数输入 :
//1. GPIOx : 选择需要初始化的端口组
//2. GPIO_Pin : 选定端口组的引脚
//函数返回 : 指定引脚的状态 0:低电平 1:高电平
//函数功能 : 读取当前端口的高低电平的状态
uint8_t GPIO_Get(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{
return GPIO_ReadOutputDataBit(GPIOx,GPIO_Pin);
}
//函数返回 : 初始化4个LED灯的状态
//函数功能 : 初始化4个LED灯,且除了LED2默认为亮,其他LED灯为灭
void LED_Init(void)
{
GPIO_Initilize(GPIOE,GPIO_Pin_0,GPIO_Mode_OUT,GPIO_OType_PP,GPIO_PuPd_UP);
GPIO_Initilize(GPIOE,GPIO_Pin_1,GPIO_Mode_OUT,GPIO_OType_PP,GPIO_PuPd_UP);
GPIO_Initilize(GPIOE,GPIO_Pin_2,GPIO_Mode_OUT,GPIO_OType_PP,GPIO_PuPd_UP);
GPIO_Initilize(GPIOE,GPIO_Pin_3,GPIO_Mode_OUT,GPIO_OType_PP,GPIO_PuPd_UP);
GPIO_Set(GPIOE,GPIO_Pin_0,1);
GPIO_Set(GPIOE,GPIO_Pin_1,0);
GPIO_Set(GPIOE,GPIO_Pin_2,1);
GPIO_Set(GPIOE,GPIO_Pin_3,1);
}
//GPIO_Mode_IN:输入模式
//GPIO_Mode_OUT:输出模式
//GPIO_Mode_AF:复用模式,将gpio端口复用到别的外设功能。
//GPIO_Mode_AN:模拟输入。用来ADC模拟输入或低功耗省电。
//GPIO_OType_PP:推挽模式。当配合输出模式时,可以输出高低电平,0或1。
//GPIO_OType_OD:开漏模式。用于连接不同电平的器件,当接上拉电阻时才能输出高电平,否则只能输出低电平。