以下都是个人的理解,不一定正确:
STM32的IO口只有俩作用:输入 输出 ,后面的模拟 和 复用 其实都是输入 输出的具体体现 然后都体现在了GPIO_Init()这个函数:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
这是函数的原型,第一个参数是哪一组,第二个参数是具体得配置,是个结构体;
GPIO_InitTypeDef GPIO_InitStruct;
//五个参数在输入和输出的时候不一定全部写,看情况写
GPIO_InitStruct.GPIO_OType=GPIO_OType_OD;
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN;
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3;
GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOE,&GPIO_InitStruct);
IN: 输入 比如IO外接传感器,上下位机通讯等
OUT:输出 外接硬件,驱动电机等
AF:复用 最显然的复用就是USART
AN:模拟 ADC转换的时候经常用
NOPULL:浮空 不上拉,也不下拉,基本没用过容易受干扰
UP:上拉 拉到高点位 引脚无输入时为高电平
DOWN:下拉 拉到低点位 引脚无输入时为低电平
PP: 推挽 可以输出高低电平 连接数字器件 提高引脚输出电流的能力
OD: 开漏 外部不加上拉电阻,默认为低电平 提高引脚输入电流的能力
已火焰传感器为例:连接后其输出一路低电平;则其引脚应该设置为上拉输入,高低电平相互链接,
#define IN_Data PEin(3) void OUTER_IN_Init() { GPIO_InitTypeDef GPIO_InitStruct; RCC_AHB1PeriphClockLPModeCmd(RCC_AHB1Periph_GPIOE,ENABLE); GPIO_InitStruct.GPIO_OType=GPIO_OType_OD; GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN; GPIO_InitStruct.GPIO_Pin=GPIO_Pin_3; GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_UP; GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOE,&GPIO_InitStruct); } int main() { LED_Init(); OUTER_IN_Init(); RED_LED=ON; BLUE_LED=OFF; while(1) { if(IN_Data==0) { RED_LED=~RED_LED; BLUE_LED=~BLUE_LED; } } return 0; }