1318|3

445

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

【CH32X035评估板】--板载按键功能 [复制链接]

 

        本篇讲述板载按键。开发板上有两个按键,原理图如下。S1做按键复位,S2做按键控制LED1亮灭。

图1:按键原理图

1.按键S1做复位按键

        按键S1接PA21,按按键S1 MCU未硬件复位。经查资料PA21主功能是普通IO口,默认复用功能RST,因此需要配置.但SDK及资料未明确载明寄存器配置(如有寄存器配置可行的小伙伴可以相互交流下),后在WCH-LinkUtility上位机软件通过WCH-LinkE配置如下图:

图2:复位按键配置

 

2.按键S2控制LED1,没按一次,亮/灭切换

        按键S2接PC17,在这里使用外部INT中断,做按键消抖处理,没按一次,PA0(接LED1,低电平点亮)电平反转一次控制LED亮/灭.附部分代码如下:

<1>//按键IO PC17 外部中断配置


void EXTI17_INT_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};
    EXTI_InitTypeDef EXTI_InitStructure = {0};
    NVIC_InitTypeDef NVIC_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_17;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;//GPIO_Mode_IPU;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* GPIOA ----> EXTI_Line0 */
    GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource17);
    EXTI_InitStructure.EXTI_Line = EXTI_Line17;
    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
    EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    EXTI_Init(&EXTI_InitStructure);

    NVIC_InitStructure.NVIC_IRQChannel = EXTI25_16_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    printf("EXTI17_INT_INIT\r\n");
}

<2>按键消抖与控制功能

	while(1)
    {
        if(key_flag)
        {
            key_flag=0;
            Delay_Ms(100);
            if(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_17)==1)
            {
                led_status=GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_0);
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, (led_status == 0) ? (led_status=Bit_SET):(led_status=Bit_RESET));
                printf("Led Toggle!\r\n");
                if(led_status)
                {
                    printf("now led_status OFF\r\n");
                }
                else
                {
                    printf("now led_status ON\r\n");
                }

            }
        }
    }

3.运行日志

测试按键控灯及复位键功能,日志如下:

图3:测试日志

4.源代码

        全部功能代码见附件 

 
 

 

main.c

4.32 KB, 下载次数: 4

按键控灯程序

最新回复

谢谢分享,期待后续!   详情 回复 发表于 2024-1-15 19:32
点赞 关注
 
 

回复
举报

6841

帖子

11

TA的资源

版主

沙发
 

我看了大佬的消抖处理,延时100ms,我们一般是在10Ms左右,感觉演示单独功能可以,如果在实际项目中,不可取呀。你可以试一下用状态机来处理消抖。

 
 
 

回复

445

帖子

0

TA的资源

纯净的硅(初级)

板凳
 

这个跟机械按键消抖延时及原理图有些关系,这个按键没有旁路电容。知道理论上定20~50ms,实际若定20ms左右,按一次会触发多次,还是以实际调试测验为准。参数是经过测验体验定的,有调过哦,效果还可以。

 
 
 

回复

7452

帖子

2

TA的资源

五彩晶圆(高级)

4
 

谢谢分享,期待后续!

个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表