实验目的
使用板子上的用户自定义按键控制LED亮灭,当按键按下时LED亮起来,不按下则不亮
电路图
按键电路
板子有两组按键,分别是系统复位按键和用户自定义按键,这里我们选择控制用户自定义按键,可以看到MCU_USER_BTN
是通过上拉电阻接入电源的
按键引脚图
MCU_USER_BTN
对应的是引脚P6.2
LED电路
板子有两个自主控制的LED,为绿色,通过上拉方式接入GPIO,MCU_USER_LED1
对应P0.0
程序设计
以下程序用于使用用户自定义按键控制LED亮灭
#include <rtthread.h>
#include <rtdevice.h>
#include "drv_gpio.h"
#define LED0_PIN GET_PIN(0, 0)
#define USER_KEY GET_PIN(6, 2)
void irq_callback()
{
int val = rt_pin_read(USER_KEY);
if(val == 1) {
rt_pin_write(LED0_PIN, PIN_HIGH);
}
else {
rt_pin_write(LED0_PIN, PIN_LOW);
}
}
int main(void)
{
rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
rt_pin_mode(USER_KEY, PIN_MODE_INPUT_PULLUP);
rt_pin_attach_irq(USER_KEY, PIN_IRQ_MODE_RISING_FALLING, irq_callback, RT_NULL);
rt_pin_irq_enable(USER_KEY, PIN_IRQ_ENABLE);
return 0;
}
GET_PIN
宏是HAL_Drivers中一个用于访问指定编号GPIO口的宏,在头文件drv_gpio.h
中
rt_pin_mode
是RT-Thread提供的引脚模式设置接口
rt_pin_write
是RT-Thread提供的引脚高低电平设置接口
实验效果
可以看到当按键按下时,绿色LED(位于Infineon logo下方)亮起来,恢复时LED不亮
按键控制LED