赞
踩
采用正点原子mini版,根据原理图得知:
KEY0 和 KEY1 是低电平有效的,而 WK_UP 是高电平有效的,除了KEY1 有上拉电阻(与 JTDI 共用),其他两个都没有上下拉电阻,所以,需要在 STM32 内部设置上下拉。
前置条件:
也就是KEY0按下,PC5为低电平;LED灯低电平有效,低电平时LED灯亮
程序:
#include "key.h"
void KEY_Init(void){ //微动开关的接口初始化
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO的初始化枚举结构
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //选择引脚组C的5号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择IO接口工作方式 //上拉电阻
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) 输入模式无需设置
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
#include "stm32f10x.h" //STM32头文件 #include "sys.h" #include "led.h" #include "delay.h" #include "key.h" int main (void) { KEY_Init(); LED_Init(); while(1) { //按键没按下,读取电平是1,则PA8置于低电平,LED点亮;按键按下,读取电平是0,PA8置于高点平,按键熄灭 if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)){ GPIO_ResetBits(GPIOA,GPIO_Pin_8);} else{ GPIO_SetBits(GPIOA,GPIO_Pin_8);} } }
同部分二
#include "key.h"
void KEY_Init(void){ //微动开关的接口初始化
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO的初始化枚举结构
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //选择引脚组C的5号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择IO接口工作方式 //上拉电阻
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) 输入模式无需设置
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
#include "stm32f10x.h" //STM32头文件 #include "sys.h" #include "led.h" #include "delay.h" #include "key.h" int main (void) { KEY_Init(); LED_Init(); while(1) { if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)) { //按键按下为低电平,!0则执行 delay_ms(20); //延时去抖动,见图解 if(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)) { //按键还是按下的,继续执行 GPIO_WriteBit(GPIOA,GPIO_Pin_8,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8))); //LED取反,GPIO_ReadOutputDataBit读取灯输出电平 while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)); //等待按键松开,如果按键按下,一直循环在这条语句,防止在按下后反复执行前面的程序 } } } }
同部分二
#include "key.h"
void KEY_Init(void){ //微动开关的接口初始化
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO的初始化枚举结构
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //选择引脚组C的5号引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //选择IO接口工作方式 //上拉电阻
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) 输入模式无需设置
GPIO_Init(GPIOC,&GPIO_InitStructure);
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。