RT-Thread studio STM32 与 5向导航按键模块 5D 使用教程

5向导航按键模块如下:

RT-Thread studio STM32 与 5向导航按键模块 5D 使用教程_第1张图片

COM可以接VCC和GND,接线不同它的中断模式也会不同。

如COM 接 VCC 中断模式是:PIN_IRQ_MODE_RISING (上升沿触发模式)

如COM 接 GND 中断模式是:PIN_IRQ_MODE_FALLING(下降沿触发模式)

中断触发模式 mode 可取如下 5 种宏定义值之一:

#define PIN_IRQ_MODE_RISING 0x00         /* 上升沿触发 */
#define PIN_IRQ_MODE_FALLING 0x01        /* 下降沿触发 */
#define PIN_IRQ_MODE_RISING_FALLING 0x02 /* 边沿触发(上升沿和下降沿都触发)*/
#define PIN_IRQ_MODE_HIGH_LEVEL 0x03     /* 高电平触发 */
#define PIN_IRQ_MODE_LOW_LEVEL 0x04      /* 低电平触发 */

加了一个LED引脚作为反馈,导航键使用UP键,其它键可以举一反三。

全部main.c程序代码:

/*
 * Copyright (c) 2006-2020, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2020-08-22     RT-Thread    first version
 */

#include 
#include 
#include 

#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include 

#define KEYUP_PIN GET_PIN(A, 0)
#define LEDO_PIN GET_PIN(C, 13)

void key_up(void *args)
{
    rt_kprintf("up!\n");
    if(rt_pin_read(LEDO_PIN)==PIN_LOW)
    {
    rt_pin_write(LEDO_PIN,PIN_HIGH);
    }
    else {
    rt_pin_write(LEDO_PIN,PIN_LOW);
    }
}

int main(void)
{
     rt_pin_mode(LEDO_PIN,PIN_MODE_OUTPUT);
     /* 按键up引脚为输入模式 */
     rt_pin_mode(KEYUP_PIN,PIN_MODE_INPUT_PULLUP);
     /* COM连接VCC时绑定中断,上升沿模式,回调函数名为key_up */
     rt_pin_attach_irq(KEYUP_PIN, PIN_IRQ_MODE_RISING, key_up, RT_NULL);
     /* COM连接GND时绑定中断,下降沿模式,回调函数名为key_up */
     //rt_pin_attach_irq(KEYUP_PIN, PIN_IRQ_MODE_FALLING, key_up, RT_NULL);
     /* 使能中断 */
     rt_pin_irq_enable(KEYUP_PIN, PIN_IRQ_ENABLE);
    return RT_EOK;
}

运行截图:

RT-Thread studio STM32 与 5向导航按键模块 5D 使用教程_第2张图片

参考资料:官方PIN使用文档

你可能感兴趣的:(RT-Thread,Studio,单片机,stm32,物联网)