stm32-GPIO
简介引脚可输入或输出0~3.3V的电压容忍的意思是1部分引脚可以接受输入5V电压内部结构GPIO的运行都挂载在APB2总线上命名为GPIOA,GPIOB,GPIOC......一个GPIO对应十六个引脚由内部寄存器的每一位控制一个引脚由于stm32是32位的寄存器所以只有低16位控制高十六位不起作用驱动器是增强驱动能力的。输入模式两个保护二极管控制输入电压的输入如果电压高于3.3V,接VDD的二极管导通高电压直接走了不会进入如果电压低于VSS可以说是负电压此时接VSS的二极管导通有电流从这里流出负电压也不会进入。符合0~3.3V的电压进入内部接了两个弱上拉和弱下拉电阻避免浮空状态随后经过施密特触发器去除波形不稳定的变化防止抖动最后进入寄存器输出模式一种方式是通过位设置/清除寄存器去改变输出寄存器中特定的一位位设置寄存器中将这一位设1就会将对应输出寄存器的这一位变为1而位清除寄存器中这一位设为1对应输出寄存器的这一位就会变为0库函数就是如此操作另一种就是直接配置寄存器。对于推挽输出模式随后如果输出1经过输出控制PMOS导通接到VDD输出高电平反之输出0NMOS导通接到VSS输出低电平所以推挽输出可以主动输出高低电平且都有驱动能力。对于开漏输出模式一样是输出0NMOS导通输出低电平但是PMOS是不工作的不能主动输出高电平外部会接上拉电阻拉高至5V可以输出5V的高电平。只有低电平有驱动能力高电平没有。对于关闭模式NMOS,PMOS均不工作则是开启的输入模式。八种工作模式对于浮空/上拉/下拉输入此时不能输出。输入电路上两个上下拉电阻开关断开即浮空输入上拉电阻打开下拉关闭就是上拉输入反之为下拉输入。均可读取引脚电平这三种都是数字输入对于模拟输入此时不能输出施密特触发器也是关闭的GPIO无效引脚接入了内部的ADC是模拟输入对于开漏/推挽输出此时也可以输入。使用开漏输出模式和推挽输出模式。对于复用开漏/推挽输出此时也可以输入。输出时引脚由片上外设控制可输出高低电平。四种输出均为数字输出。使用GPIO标准库代码先开启端口时钟RCC这是不断高低电平跳变的方波信号相当于动力RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);变量是GPIOx和使能/失能然后对GPIO初始化由于初始化函数里需要结构体所以先定义结构体并填充参数参数为输入输出模式引脚和速度引脚电平切换的速度GPIO_InitTypeDef GPIO_InitStruct;//结构体 GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;//结构体里的变量设置推挽输出模式 GPIO_InitStruct.GPIO_PinGPIO_Pin_0;//变量设置引脚 GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;//变量设置速度接下来初始化GPIO_Init(GPIOA,GPIO_InitStruct);变量是GPIOx和结构体的地址完成这一步后对应GPIO的对应引脚就会被设置成相应模式和速度之后就可以用其他函数控制这个引脚