简介
使用BearPi IOT Std开发板及主板自带两颗按键与用户灯, 实现按键触发中断控制灯亮灯灭
主板:
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出\ 高电平点亮
串口: Usart1
KEY1 : PB2 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
KEY2 : PB3 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
电路原理图
- 按键电路
- LED电路
步骤
创建项目
参考 BearPi RT-Thread项目创建
用户代码
RT-Thread 关于PIN设备相关函数,将使用到如图框出几个
- 初始化 及 中断处理函数
/* 回调函数, 作为中断函数 */
void key_irq_callback(void *arg)
{rt_base_t keyNum = (rt_base_t) (arg);if (USER_KEY_ON_PIN == keyNum){rt_pin_write(USER_LED_PIN, PIN_HIGH);rt_kprintf("key-on pressed, led on.\n");}else if (USER_KEY_OFF_PIN == keyNum){rt_pin_write(USER_LED_PIN, PIN_LOW);rt_kprintf("key-off pressed, led off.\n");}
} /* 相关功能组件引脚初始化,包含中断方式初始化及启用 */
rt_err_t user_keys_irq_led_init(void)
{rt_pin_mode(USER_LED_PIN, PIN_MODE_OUTPUT); // LED 设置引脚为输出模式rt_pin_mode(USER_KEY_ON_PIN, PIN_MODE_INPUT_PULLUP); // Key_ON 设置为 上拉输入模式rt_pin_attach_irq(USER_KEY_ON_PIN, PIN_IRQ_MODE_FALLING, key_irq_callback, (void*)USER_KEY_ON_PIN); // 设置中断 下降沿触发/中断回调key_irq_callback/参数USER_KEY_ON_PINrt_pin_irq_enable(USER_KEY_ON_PIN, ENABLE); // 使能中断 / disable可以关闭中断rt_pin_mode(USER_KEY_OFF_PIN, PIN_MODE_INPUT_PULLUP); // Key_OFF 设置为 上拉输入模式rt_pin_attach_irq(USER_KEY_OFF_PIN, PIN_IRQ_MODE_FALLING, key_irq_callback, (void*)USER_KEY_OFF_PIN); // 设置中断 下降沿触发/中断回调key_irq_callback/USER_KEY_OFF_PINrt_pin_irq_enable(USER_KEY_OFF_PIN, ENABLE); // 使能中断 / disable可以关闭中断return RT_EOK;
}
- 函数调用
a. main函数中调用
int main(void)
{user_keys_irq_led_init();return 0;
}
b. 使用宏定义, RT-Thread自动加载
此方式需要修改 user_keys_irq_led_init 的函数定义, 如下
int user_keys_irq_led_init(void)
{rt_pin_mode(USER_LED_PIN, PIN_MODE_OUTPUT); // LED 设置引脚为输出模式rt_pin_mode(USER_KEY_ON_PIN, PIN_MODE_INPUT_PULLUP); // Key_ON 设置为 上拉输入模式rt_pin_attach_irq(USER_KEY_ON_PIN, PIN_IRQ_MODE_FALLING, key_irq_callback, (void*)USER_KEY_ON_PIN); // 设置中断 下降沿触发/中断回调key_irq_callback/参数USER_KEY_ON_PINrt_pin_irq_enable(USER_KEY_ON_PIN, ENABLE); // 使能中断 / disable可以关闭中断rt_pin_mode(USER_KEY_OFF_PIN, PIN_MODE_INPUT_PULLUP); // Key_OFF 设置为 上拉输入模式rt_pin_attach_irq(USER_KEY_OFF_PIN, PIN_IRQ_MODE_FALLING, key_irq_callback, (void*)USER_KEY_OFF_PIN); // 设置中断 下降沿触发/中断回调key_irq_callback/USER_KEY_OFF_PINrt_pin_irq_enable(USER_KEY_OFF_PIN, ENABLE); // 使能中断 / disable可以关闭中断return RT_EOK;
}INIT_APP_EXPORT(user_keys_irq_led_init); // 应用自动初始化
项目代码
完整项目代码
参考
RT-Thread API 参考手册 - PIN设备管理
BearPi Std 板从入门到放弃 - 先天神魂篇(4)(RT-Thread 按键响应)