BearPi Std 板从入门到放弃 - 先天神魂篇(5)(RT-Thread 按键响应)

本文介绍了如何使用BearPiIOTStd开发板上的STM32L431单片机,配合两个按键和一个LED实现灯的开关控制。通过RT-Thread,设置GPIO模式,编写按键和LED操作的函数,并在适当的时间间隔进行消抖处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

使用BearPi IOT Std开发板及主板自带两颗按键与用户灯, 实现按键控制灯亮灯灭

主板:
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出\ 高电平点亮
串口: Usart1
KEY1 : PB2 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
KEY2 : PB3 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)

电路原理图

  1. 按键电路 在这里插入图片描述
  2. LED电路在这里插入图片描述

步骤

  1. 创建基础项目
    参考 BearPi RT-Thread项目创建

  2. 初始化按键与LED

/* defined the LED pin: PC13 */
#define USER_LED_PIN    GET_PIN(C, 13)
#define USER_KEY_ON_PIN GET_PIN(B, 2)
#define USER_KEY_OFF_PIN GET_PIN(B, 3)

rt_err_t user_keys_led_init(void)
{
	rt_pin_mode(USER_LED_PIN, PIN_MODE_OUTPUT); // 设置模式输出
	rt_pin_mode(USER_KEY_ON_PIN, PIN_MODE_INPUT_PULLUP); // 上拉输入
	rt_pin_mode(USER_KEY_OFF_PIN, PIN_MODE_INPUT_PULLUP); // 上拉输入
	return RT_EOK;
}
  1. 加入功能代码
    a. 直接在main函数里加, 毕竟main函数也是一个执行线程
    b. 自己创建线程
	static void user_keys_led_entry(void *parameter)
{
	user_keys_led_init();
	
	while (1)
	{
		if (PIN_LOW == rt_pin_read(USER_KEY_ON_PIN))
		{
			rt_thread_mdelay(100); // 消抖
			if (PIN_LOW == rt_pin_read(USER_KEY_ON_PIN))
			{
				rt_kprintf("led on.\n");
				rt_pin_write(USER_LED_PIN, PIN_HIGH);
			}
		}
		if ( PIN_LOW == rt_pin_read(USER_KEY_OFF_PIN) )
		{
			rt_thread_mdelay(100); // 消抖
			if (PIN_LOW == rt_pin_read(USER_KEY_OFF_PIN))
			{
				rt_kprintf("led off.\n");
				rt_pin_write(USER_LED_PIN, PIN_LOW);
			}
		}
		rt_thread_mdelay(50); // 消抖
	}
}
int user_keys_led_control(void)
{
	 rt_thread_t tid;
	 rt_err_t ret = RT_EOK;
	 tid = rt_thread_create("ukl_ctrl",
												user_keys_led_entry,
												RT_NULL,
												512,
												RT_THREAD_PRIORITY_MAX / 3,
												20);
	 if (tid != RT_NULL)
	 {
			rt_thread_startup(tid);
	 }
	 else
	 {
			ret = RT_ERROR;
	 }
	 return ret;
}

  1. 在RT-Thread加载完毕时执行功能代码
INIT_APP_EXPORT(user_keys_led_control); // 应用自动初始化
  1. 编译烧录

  2. 测试
    Key1按下LED 亮, Key2 按下LED 灭

项目代码

项目完整代码

参考

RT-Thread 工程创建

RT-Thread API参考手册

RT-Thread 系统初始化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听我一言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值