野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 20466|回复: 0

STM32POLLING-按键

[复制链接]
发表于 2015-3-10 00:56:31 | 显示全部楼层 |阅读模式
目的——理解按键控制LED灯亮灭程序原理
Bsp.key.cbsp.key.h两个板级支持包导入到user文件夹内
\USER\stm32f10x_conf.h文件内
#include "stm32f10x_gpio.h"    GPIO头文件
#include "stm32f10x_rcc.h"     RCC时钟控制寄存器"
这两个外设头文件需要包含进去
keil中将target option 里面的c/c++中的include paths添加user\key\
现在进入main.c函数
因为是按键点亮led灯,所以头文件需要包括stm32f10x.h文件,还有ledkey.h文件
三个头文件需要包含进去
Led灯初始化配置(上一讲有详细笔记)
点亮led(带参宏对GPIOB Pin0的控制)
按键初始化
Key_GPIO_Config();
进入bsp.key.c文件可以看到         key_GPIO_Config();的详细配置
GPIO_InitTypeDefGPIO_InitStructure;
GPIO初始化
固件库P126
/*Initialize the GPIO Init Structure parameters */;
初始化GPIO的初始结构参数
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_StructInit(&GPIO_InitStructure);
使能按键端口GPIOC端口的时钟,就是APB2外设总线时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
固件库P208
/*Enable GPIOA, GPIOB and SPI1 clocks */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_SPI1,ENABLE);
设置引脚P13
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_13;
GPIO上拉输入
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IPU;
?????
GPIO_Init(GPIOC,&GPIO_InitStructure);
端口配置例程
固件库P125
/*Configure all the GPIOA in Input Floating mode */
配置GPIOA所有在浮点输入模式下的端口
GPIO_InitTypeDef GPIO_InitStructure;
首先初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
第二配置Pin引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
第三引脚速率(因为是输入,可以不用配置)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
第四配置输入模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
进入循环
while(1)                           
{           
          if( Key_Scan(GPIOC,GPIO_Pin_13) == KEY_ON  )
          {
                    /*LED1反转*/
                    LED1_TOGGLE;
          }   
}
进入Key_Scan定义可以在bsp.key.c文件中看到
uint8_tKey_Scan(GPIO_TypeDef* GPIOx,u16 GPIO_Pin)
固件库p128
voidGPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin)
设定制定的数据端口位
流程
file:///C:/Users/YLenovo/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png
读取制定的端口输入(就是检测有没有按键按下)
GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY ON
若为真,则判定KEYON
设定一个延时程序消除抖动引起的按键
第二次判定是否按键按下
if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_ON
若为真,则进入按键释放检测循环
当读取GPIO端口输入为真时,说明还没有放开按键,继续循环
while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)== KEY_ON);   
                    return    KEY_ON;
若放开按键则返回值KEY OFF(此时灯灭)

回复

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-12-7 03:06 , Processed in 0.036413 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表