查看: 1756|回复: 0

奋斗stm32开发板学习日记4——GPIO按键实验

[复制链接]

该用户从未签到

发表于 2014-11-20 09:21:18 | 显示全部楼层 |阅读模式
分享到:
这期教程重点讲GPIO的按键实验。
准备材料

  • 带有按键的Stm32开发板一块
  • Stm32库函数参考,
按键实验和点灯实验其实差不多, GPIO点灯是向led的pin脚输出高低电平, 而按键则是向pin口输入高低电平。 对于按键有两种输入模式可以选择, 一,采用上拉输入模式,二,采用浮动浮空输入模式,上拉输入模式在没有按键按下的时候是默认是高电平。正好符合这个要求。电路原理图如图所示:

本实验采用了GPIO与RCC片上外设,因此要添加stm32f10x_gpio.h stm32f10x_rcc.h到工程模板中。
关键代码
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"
#define ON 1
#define OFF 0
#define KEY_ON 0
#define KEY_OFF 1
void Key_GPIO_Config()     //按键初始化
{
GPIO_InitTypeDef GPIO_InitStructrue;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructrue.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructrue.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructrue.GPIO_Mode = GPIO_Mode_IPU;    //使用上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructrue);
}
uint8_t Key_Scan(GPIO_TypeDef *GPIOx,   uint16_t GPIO_Pin)    //键盘扫描函数
{
      if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)   //读取电平状态
{
     Delay(0x7ffff);
     if(GPIO_ReadInputDataBit(GPIOx, GPIO_Pin) == KEY_ON)
{
         return KEY_ON;
}
    return KEY_OFF;
}
      else
{
     return KEY_OFF;
}
}
int main()
{
Led_GPIO_Config();  // led初始化
Key_GPIO_Config();   // 按键初始化
GPIO_SetBits(GPIOB, GPIO_Pin_5);  //点亮led灯
while(1)
{
if(Key_Scan(GPIOC, GPIO_Pin_5) == KEY_ON)   //键盘扫描函数
{
GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5))));    //led状态反转
}
}
return 0;
}
代码分析
首先从main函数开始,Led_GPIO_Config该函数是初始化按键要点亮熄灭的led灯,Key_GPIO_Config函数为初始化按键的 GPIO口,这里要注意输入模式为上拉输入,接着进入键盘扫描函数Key_Scan, 不断扫描该按键对应的pin口, 判断其电平是否有变化。
进入该函数里面用了GPIO_ReadInputDataBit该函数来读取pin口电平状态。打开stm32库函数参考手册,

可以看到, 该函数的的返回值即为输入端口额管脚值。注意:在按键中,必须要有一个防抖动的检测。判断按键是否真的被按下了。 如果真的被按下,则使led状态反转。
接下来我们来分析下这条语句GPIO_WriteBit(GPIOB, (BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_5)))); 最外层GPIO_WriteBit函数功能如图所示,

功能为设置或清除该端口值, 还有要注意第三个参数的类型, BitAction 在代码中追踪下,

便可知道,这个是个枚举类型, 这条语句的具体意思就读取PB5的当前输出电平,然后再用1减去读取电平的数据状态, 相当于与当前的输出的状态相反。给开发板供电DC5V, 插上J-Link,将编译好的程序下载到开发板, LED1亮,按下按键时, LED1熄灭。
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /4 下一条

手机版|小黑屋|与非网

GMT+8, 2024-12-19 02:17 , Processed in 0.116960 second(s), 18 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.