STM32_GPIO配置及库函数讲解——独立按键2013-02-26 13:21:30| 分类:STM32F103VBT6 | 标签:stm32_gpio_key |举报|字号订阅User Button硬件连接如下图所示:当按键被按下,PB9检测到低电平,相反PB9被3.3V电源拉高。
LED硬件连接如下图所示:高电平点亮LED。
要想将PB9管脚配置成输入模式,程序所需如下步骤:(必须的)
第一步:配置系统时钟。
见STM32F103x RCC寄存器配置
除此之外,还需将GPIO外设时钟打开。
涉及到GPIO_IDR寄存器,如下所示
经过上面4步,就可以检测PB9管脚的电平状态。
按键按下,PB9管脚应该是低电平,怎么才能验证,最简单的方法是:当按键被按下,点亮所有LED。
下面给出完整程序:
还有个问题:PB9的初始状态是什么?或者说GPIO_Configuration函数后PB9管脚上是高电平还是低电平?
这要看GPIO_InitStructure结构体的GPIO_Mode成员变量初始化为什么,如果为上拉,则PB9管脚为高电平;如果为下拉,则PB9管脚为低电平。
GPIO管脚内部电路设计如图:
当GPIO初始化为输入上拉模式,由上图可知:该端口向外输出高电平,即:ODR对应位为1
当GPIO初始化为输入下拉模式,由上图可知:该端口向外输出低电平,即:ODR对应位为0
如何调试:在下面两处处设个断点。
1. GPIO初始化函数GPIO_Configuration中
可以看到:当GPIO设置成输入上拉模式时,等待GPIO初始化完毕,该管脚ODR9为1
2. 在main函数中,设置一个断点。
全速执行(F5),按住User Button不放,可以看到GPIOB_IDR的IDR9=0。
当放开按键时,再单步调试(F10),
GPIOB_IDR的IDR9=1。
总结:
1. GPIO配置成输入模式时,最好配置成浮空输入(ODR对应位为0)。
上拉、下拉只是该管脚初始化完对外表现的电平状态。
2. GPIO配置成输入模式,只关心GPIO_IDR寄存器。
检测该管脚外部输入的是高电平还是低电平。
3. GPIO配置成输出模式,只关心GPIO_ODR寄存器。
通过该管脚向外部输出高电平还是低电平。