具体可以分为
又可以以输入输出分为
保护二极管的工作原理
如果电压在0到3.3V之间,那么两个二极管均不会导通。此时内部电路正常工作。
施密特触发器的工作原理
模拟输入连接ADC上,接收模拟量,即外部信号连续变化,接收模拟量。
复用输入用于GPIO的某些复用功能,比如串口的输入,接收数字量。
通过输入数据寄存器可以读取io口的输入值。
数字部分可以由输出数据寄存器和片上外设控制,位设置清除寄存器可以用来单独操作输出寄存器的某一位,而其他位不受影响,因为输出数据寄存器同时控制16个单口,并且只能整体读写,所以需要位设置清除寄存器来读写某一位。
如上图,N—MOS,P—MOS。通过我们给的信号来控制开关的导通和关闭。开关负责将IO口接到VDD或者VSS,在这里有三种输出方式,推挽,开漏或者关闭。
推挽模式:N—MOS,P—MOS都有效,数据寄存器为1时,上导通,下断开,输出高电平,反之输出低电平
也叫强推输出模式,STM32对IO口有绝对的控制权。
开漏模式:N—MOS工作,P—MOS无效,数据寄存器为1时,下管断开,这是输出相当于断开,也就是高阻模式,数据寄存器为0时,下管导通,输出直接接到VSS,也就是输出低电平。这种模式下,只有低电平有驱动能力,高电平没有驱动能力。开漏模式可以作为通信协议的驱动方式,比如i2C的通信引脚就是使用的开漏模式,在多机通信的模式下,这个模式可以避免各个设备的相互干扰,另外开漏模式还可以用来输出5V的电平信号,在IO口外接一个上拉到5V的电阻,当输出低电平时,有内部的N—MOS直接接VSS,当输出高电平时,由外部的上拉电阻上拉到5V,这样就可以输出5V的电平信号,兼容5V的设备,注意,此时N—MOS,P—MOS都无效。
关闭模式,就是当引脚配置为输入模式的时候,此时N—MOS,P—MOS都无效。; //开启GPIOA的时钟,使用外设必须开启
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //GPIO引脚,赋值为第0号引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //GPIO速度,赋值为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //传递给GPIO_Init函数
总结:GPIO的配置首先需要开启时钟,同时参数由引脚号,工作模式和输出输入速度组成,配置完这些参数后传递给结构体初始化函数来完成GPIO的初始化,结构体初始化函数会把这些参数传递到相应的寄存器保存下来。以备后用。同时位置设置寄存器,输出数据寄存器,输入数据寄存器负责数据的读出和写入。