还不知道检测输入电平信号用什么输入模式?
就简单的记住: 检测端口输入低电平0要用上拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 检测端口输入高电平1要用下拉 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
你不知道你外接按键的原理图,不知道检测什么电平?
最简单的方法: 用电压表黑接地,红接输入端,一测便知。
没有外部按键模块?
骚操作:‘’所有的IO口都是外部按键‘’! 你甚至可以直接用杜邦线接VCC或地来模拟输入高低电平,起到按键效果。
看过第一篇你应该知道怎么初始化GPIO了 所以只讲一些新技巧,也就是上面三点。 下面是每一点的解释。
检测输入电平信号用什么输入模式?
PE2/PE3/PE4 按下后接地,输入为0,所以用上拉 PA0 按下后通3.3V电压,输入为1,所以用下拉
你不知道你外接按键的原理图,不知道检测什么电平?
你可以在模块上分清 VCC(中间) 和GND(—),那剩下的 Signal(S) 就是输入到STM32引脚来检测电平的。
用电压表检测 GND和Signal两端电压电压3.3V 按下后为0 这不跟上面内置的3个按键一样吗? 所以用上拉输入
水银倾斜检测模块
用电压表检测 GND和Signal两段电压电压3.3V
水银将内部连通之后 指示灯点亮 GND和Signal两端电压电压0 跟以上按键类比 是一样的道理
没有外部按键模块?
按键的检测不就是检测一个引脚的高低电平吗?
你可以直接: 上拉一个引脚 用杜邦线接地就是一次按键 下拉一个引脚 用杜邦线接VCC也是一次按键
如果你不想外部按键在PA6 想改成PE9 怎么办? 只需把初始化与PA6相关的做修改
以下为相关代码
只需改这3处 也必须要同时全部改掉这3处
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_Init(GPIOA, &GPIO_InitStructure);
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
int main(void)
{
uint8_t j;
LED_Init();
KEY_Init();
The_Key_Init();
Daley_Init();
while (1)
{
if(!S1)
{
Delay_ms(10);
if(!S1)
{
while(!S1);
LED2_REV;
}
}
if(!S2)
{
Delay_ms(10);
if(!S2)
{
while(!S2);
LED3_REV;
}
}
if(S4)
{
Delay_ms(10);
if(!The_Key)
{
while(!The_Key);
LED2_REV;
LED3_REV;
}
}
if(!The_Key)
{
Delay_ms(10);
if(S4)
{
while(S4);
for(j=0;j<10;j++)
{
LED2_REV;
LED3_REV;
Delay_ms(100);
}
}
}
}
}
#include "key.h"
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOE, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
void The_KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
#ifndef __KEY_H
#define __KEY_H
#include "stm32f10x.h"
#define S1 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4)
#define S2 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3)
#define S3 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
#define S4 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define The_Key GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_6)
void KEY_Init(void);
void The_KEY_Init(void);
#endif
|