MSPM0G3507之按键KEY

*更新记录*

        2024-6-28:更正按键电平的读取方式,对DL_GPIO_readPins()进行了测试验证。

1、前言

MSPM0G3507之LED点灯icon-default.png?t=N7T8https://blog.csdn.net/m0_72300717/article/details/139786566?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522171889361616800213055136%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=171889361616800213055136&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-139786566-null-null.nonecase&utm_term=MSPM0G3507%E4%B9%8BLED%E7%82%B9%E7%81%AF&spm=1018.2226.3001.4450

        通过前面LED的学习,大家需要重点关注DL_GPIO_readPins()这个函数以及Sysconfig的上下拉电阻配置。

2、相关配置

        主控:MSPM0G3507SPTR(48角)

        编译器:Keil,版本:5.33

3、Sysconfig配置

        在Sysconfig配置中需要注意的是,GPIO的上下拉电阻需要根据外部硬件电路设计,如我的按键按下为低电平,那么我的GPIO就需要进行上拉。如果我选择下拉,那么无论我按下按键还是不按下按键,GPIO口都会是低电平,无法对外部按键进行判断。 

4、GPIO函数设计

DL_GPIO_readPins(PORTA_PORT,PORTA_KEY1_PIN);

         判断IO口的输入电平,我们认识这一个函数就行了,“readPins”就是读取引脚的值。

        这里需要特别注意DL_GPIO_readPins()这个函数的返回值并非0或1,而是u32的数据类型。例如,我们要读取B18和B19的电平,当外部输入为高电平时(或者内部上拉,外部悬空),DL_GPIO_readPins()的返回值为0x0008 0000和0x0004 0000,并非为1;当外部输入为低电平时,DL_GPIO_readPins()的返回值为0x0000 0000和0x0000 0000;

        因此我们在设计代码时, 以下代码的写法是错误的(笔者的个人看法,有误还请指正),高电平的返回值并不一定为1。

        错误示范:

if (DL_GPIO_readPins(KEY2_PORT, KEY2_PIN2_PIN) == 1) // 若引脚为高电平
    LED_RED_ON; // 红灯亮

         正确的写法是:

/*----------------------------读取方式1------------------------------*/
/* 高电平的判断方式 */
if (DL_GPIO_readPins(KEY2_PORT, KEY2_PIN2_PIN) > 0) // 若引脚为高电平
{
	/* 用户代码 */
}
/*----------------------------读取方式2------------------------------*/
/* 低电平的判断方式 */
if (DL_GPIO_readPins(KEY2_PORT, KEY2_PIN2_PIN) == 0) // 若引脚为低电平
{
	/* 用户代码 */
}
/*----------------------------读取方式3------------------------------*/
/* 高、低电平的判断方式 */
if (DL_GPIO_readPins(KEY2_PORT, KEY2_PIN2_PIN)) // 若引脚为高电平
{
	/* 用户代码 */
}
else // 不是高电平,那就是低电平
{
	/* 用户代码 */
}
/*-------------------------------------------------------------------*/

        对相关函数进行封装,方便调用。 

/**
 * @函数介绍: 读取按键值
 * @输入参数: 无
 * @输出参数: 无
 * @说明: 按键值变化,LED灯发生相应变化
 * 按键默认配置为PA10,输入模式为上拉输入
 */
void Read_Key_Value(void)
{
    if (DL_GPIO_readPins(PORTA_PORT,PORTA_KEY1_PIN) > 0) // 若引脚为高电平
        LED_RED_ON; // 红灯亮
    else
        LED_RED_OFF; // 红灯灭
}

        主函数直接调用就行了,也可以直接放主函数里进行测试。 

/**
 * @函数介绍: main函数 
 * @说明: 无
 */
int main(void)
{
	SYSCFG_DL_init(); // 芯片资源初始化,由SysConfig配置软件自动生成
	while(1)
	{
		Read_Key_Value(); // 读取按键值
	}
}

5、实验效果

        实验所用的按键为自锁按键,会固定状态。 

         通过实验我们可以发现,按键每做一次切换,LED就能做出对应的显示(这里可能不太清楚,但实际效果是OK的,能够正确读取高低电平)。

6、总结

         按键配置是比较基础的,主要注意:

        1、按键的上下拉配置

        2、DL_GPIO_readPins()函数的使用,高电平返回值不一定是1!!!

 2024-6-28-17:12,雨还在下(。-ω-)zzz

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值