gaoyang9992006 发表于 2020-4-21 07:19

【MM32 eMiniBoard测评报告】按键例程适配

本帖最后由 gaoyang9992006 于 2020-4-21 10:52 编辑

官方提供的开发包里面的例子与本开发板不符,另外要注意原理图的按键不能明确看出来内部连接,需要测试。
K1,K2,K3,K4默认悬空,按下后K1连接高电平,K2,K3,K4连接到低电平。所以作为按键使用上模式有区别,首先都要是输入模式,其次
K1,应该配置下拉保证没有按下时候是低电平,其他三个按键要设置为上拉模式,确保按下产生下降沿。
好了,原理图细节分析到此,奉上我修改后的例程工程。
按下K1,点亮或者关闭LED1,……,按下K4,点亮或者关闭LED4

注释已更新

gaoyang9992006 发表于 2020-4-21 07:20

#include "delay.h"
#include "sys.h"
#include "led.h"
#include "key.h"
/********************************************************************************************************
**函数信息 :main(void)                     
**功能描述 :
**输入参数 :无
**输出参数 :无
********************************************************************************************************/
int main(void)
{
    u8 t=0;
   
    delay_init();       
    LED_Init();                                   //初始化与LED连接的硬件接口
    KEY_Init();                    //初始化与按键连接的硬件接口
   
    while(1)
    {
        t=KEY_Scan(0);                  //得到键值

        switch(t)
        {                               
        case KEY1_PRES:         //K1默认不连PC13,默认连接reset复位按键,所以按下K1会复位
          LED1_TOGGLE();
          break;
        case KEY2_PRES:
          LED2_TOGGLE();
          break;
        case KEY3_PRES:                               
          LED3_TOGGLE();
          break;
        case KEY4_PRES:                               
          LED4_TOGGLE();
          break;
        default:
          delay_ms(10);       
        }
    }
}



gaoyang9992006 发表于 2020-4-21 07:21

以上是main.h
主要是修改硬件配置
#include "key.h"
#include "delay.h"
//////////////////////////////////////////////////////////////////////////////////       
//开发板
//按键输入 驱动代码                  
//////////////////////////////////////////////////////////////////////////////////       

//按键初始化函数
//PB1、PB2、PB10、PB11对应K1,K2,K3,K4
//K1端口特殊,按下后为高电平,松手为悬空。因此配置上K1,设置为下拉输入,
//K2,K3,K4按下后为低电平,松手为悬空,所以配置上应设置为上拉输入。
void KEY_Init(void)
{
   
    GPIO_InitTypeDef GPIO_InitStructure;
   
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);//使能GPIOB时钟
   
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_2|GPIO_Pin_10|GPIO_Pin_11;//PB2,PB10,PB11(K2,K3,K4)
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0设置成上拉输入
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB.10,11

    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_1;//PB1,K1
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //PB1设置成下输入
    GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化GPIOB.1       
}
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//返回值:
//0,没有任何按键按下
//KEY1_PRES,KEY1按下
//WKUP_PRES,WK_UP按下
//KEY3_PRES,KEY3按下
//KEY4_PRES,KEY4按下
u8 KEY_Scan(u8 mode)
{       
    static u8 key_up=1;//按键按松开标志
    if(mode)key_up=1;//支持连按                  
    if(key_up&&(KEY1==1||KEY2==0||KEY3==0||KEY4==0))
    {
      delay_ms(10);//去抖动
      key_up=0;
         if(KEY1==1)return KEY1_PRES;
         if(KEY2==0)return KEY2_PRES;
         if(KEY3==0)return KEY3_PRES;
         if(KEY4==0)return KEY4_PRES;
    }else if(KEY1==0&&KEY2==1&&KEY3==1&&KEY4==1)key_up=1;              
    return 0;// 无按键按下
}






gaoyang9992006 发表于 2020-4-21 07:22

#include "led.h"

/********************************************************************************************************
**函数信息 :LED_Init(void)                        
**功能描述 :LED初始化
**输入参数 :无
**输出参数 :无
********************************************************************************************************/
void LED_Init(void)
{
   
    GPIO_InitTypeDefGPIO_InitStructure;
   
   
   
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA|RCC_AHBPeriph_GPIOB, ENABLE);//开启GPIOA,GPIOB时钟
   
   
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
   
    GPIO_InitStructure.GPIO_Pin= GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
   
    LED1_ON();
    LED2_ON();
    LED3_ON();
    LED4_ON();
}

gaoyang9992006 发表于 2020-4-21 07:22

也就是要将例子中用到的管脚与实际的管脚要对应,模式要符合开发板的实际需求。

gaoyang9992006 发表于 2020-4-21 07:23

备注我没有全部修改,请有选择的看备注,

gaoyang9992006 发表于 2020-4-21 07:30

等我不忙了,修改一下备注重新发

天灵灵地灵灵 发表于 2020-4-22 13:14

非常NICE的例子。

paotangsan 发表于 2020-5-9 17:16

非常感谢楼主分享

renzheshengui 发表于 2020-5-9 17:16

直接拿过来能用吗

wakayi 发表于 2020-5-9 17:17

程序和哪个板子是匹配的啊

wowu 发表于 2020-5-9 17:17

非常感谢楼主分享

xiaoqizi 发表于 2020-5-9 17:17

太好了 我下载去看看

gaoyang9992006 发表于 2020-5-9 17:32

wakayi 发表于 2020-5-9 17:17
程序和哪个板子是匹配的啊

论坛活动送的这个板子是配套的,好像是板子编号是023

gaoyang9992006 发表于 2020-5-9 17:32

renzheshengui 发表于 2020-5-9 17:16
直接拿过来能用吗

是的,直接用。
页: [1]
查看完整版本: 【MM32 eMiniBoard测评报告】按键例程适配