封面
GPIO,即通用输入输出接口
GPIO接口是嵌入式系统和微控制器中用于数字信号交互的可编程硬件接口,通过软件控制实现外部设备连接与信号传输。
这是开发板的单片机接线图,从图中看出,除了VDD和VSS电源,其他的18个引脚都是GPIO,这接口利用率可太高了。
每个IO端子,都可以配置为8种模式:
模拟输入,浮空输入,上拉输入,下拉输入,推挽输出,开漏输出,复用推挽输出,复用开漏输出。
这是一个IO的内部电路
下面以板载按钮为例说明上拉输入的原理,这是板载按钮电路图,按钮一端接地,一端接PA2
要想按钮有控制作用,PA2必须有高电平,所以通过配置,单片机内部把PA2的上接了一个电阻接到Vdd上。
按钮未按下PA2=1,按钮按下PA2=0
再以板载LED为例说明开漏输出的原理,这是板载LED电路图,LED阳极接了3.3V,要想LED点亮,阴极必须是低电平。
通过程序配置,把PA11定义为开漏输出,内部的NMOS受控。
PA11=高电平,NMOS截至,LED灭。PA11=低电平,NMOS处于导通状态,LED亮。
上面我们知道了IO上拉输入和开漏输出的实现原理,下面通过程序测试一下.
新建了一个项目,再led.c进行IO配置
初始化IO后,PA2和PA11就是上拉输入和开漏输出了。
下面继续再led频闪的功能,这里用了GPIO_ResetBits复位和GPIO_SetBits置位功能,时序逻辑是:
PA11=0,亮灯
延时
PA11=1,关灯
延时
然后再main.c调用一下
下载运行,间隔100ms频闪的视频
再做一下用按键控制LED的亮灭
用了一个if条件判断来控制LED亮灭。
如果PA2=0(按钮被按下),则PA11=0(LED亮),否则PA11=1(LED灭).
这里用了一个新功能,读取GPIO的状态,GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2) == Bit_RESET,就是PA2=0的意思。
在主程序调用一下
按亮松灭的运行视频
本次从硬件内部原理上理解了GPIO,以及GPIO的配置和基础应用。
附件是整个项目文件,用keil打开即可使用。
全部评论