本帖最后由 hayden0 于 2020-4-22 22:33 编辑
很奇怪,这开发板硬件这么用心,却没有相应的例程,官方只有MiniBoard的开发板例程,这个例程是需要修改后才能用的。
eMiniBoard与MiniBoard的硬件基本一致,只是IO无法对应。
所以在MiniBoard例程的基础上,我改了LED和按键相应的程序。
完美的使用4个按键分别控制4个LED的亮灭!
这里注意的是原理图中Key1与其他按钮的连接方式是不同的,key1是接VDD,其他三个按键是接GND。
所以四个按键的GPIO配置程序应如下修改:
void KEY_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);//使能GPIOA,GPIOB,GPIOC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PC13,K1
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOC13
//
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//PA0,K2(WK_UP)
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //设置成下拉输入
// GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOA0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11;//PB10,PB11,K3,K4
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0设置成上拉输入
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB.10,11
}
u8 KEY_Scan(u8 mode)
{
static u8 key_up=1;//按键按松开标志
if(mode)key_up=1; //支持连按
if(key_up&&(KEY1==1||WK_UP==0||KEY3==0||KEY4==0))
{
delay_ms(10);//去抖动
key_up=0;
if(KEY1==1)return KEY1_PRES;
else if(WK_UP==0)return WKUP_PRES;
else if(KEY3==0)return KEY3_PRES;
else if(KEY4==0)return KEY4_PRES;
}else if(KEY1==0&&KEY3==1&&KEY4==1&&WK_UP==1)key_up=1;
return 0;// 无按键按下
}
LED的GPIO配置如下:
#define LED4_ON() GPIO_ResetBits(GPIOB,GPIO_Pin_5) // PA15
#define LED4_OFF() GPIO_SetBits(GPIOB,GPIO_Pin_5) // PA15
#define LED4_TOGGLE() (GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5))?(GPIO_ResetBits(GPIOB,GPIO_Pin_5)):(GPIO_SetBits(GPIOB,GPIO_Pin_5)) // PA15
#define LED3_ON() GPIO_ResetBits(GPIOB,GPIO_Pin_4) // PB3
#define LED3_OFF() GPIO_SetBits(GPIOB,GPIO_Pin_4) // PB3
#define LED3_TOGGLE() (GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_4))?(GPIO_ResetBits(GPIOB,GPIO_Pin_4)):(GPIO_SetBits(GPIOB,GPIO_Pin_4)) // PB3
#define LED2_ON() GPIO_ResetBits(GPIOB,GPIO_Pin_3) // PB4
#define LED2_OFF() GPIO_SetBits(GPIOB,GPIO_Pin_3) // PB4
#define LED2_TOGGLE() (GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_3))?(GPIO_ResetBits(GPIOB,GPIO_Pin_3)):(GPIO_SetBits(GPIOB,GPIO_Pin_3)) // PB4
#define LED1_ON() GPIO_ResetBits(GPIOA,GPIO_Pin_15) // PB5
#define LED1_OFF() GPIO_SetBits(GPIOA,GPIO_Pin_15) // PB5
#define LED1_TOGGLE() (GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_15))?(GPIO_ResetBits(GPIOA,GPIO_Pin_15)):(GPIO_SetBits(GPIOA,GPIO_Pin_15)) // PB5
这样,KEY1-KEY4就完美的和LED1-LED4一一对应,控制翻转亮灭了!
|