hayden0 发表于 2020-4-22 22:31

【MM32 eMiniBoard测评报告】MB-023开发板LED按键

本帖最后由 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一一对应,控制翻转亮灭了!

页: [1]
查看完整版本: 【MM32 eMiniBoard测评报告】MB-023开发板LED按键