简介
使用BearPi IOT Std开发板及主板自带两颗按键与用户灯, 实现按键控制灯亮灯灭
主板:
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出\ 高电平点亮
串口: Usart1
KEY1 : PB2 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
KEY2 : PB3 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
电路原理图
- 按键电路
- LED电路
步骤
-
创建基础项目
参考 BearPi RT-Thread项目创建 -
初始化按键与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;
}
- 加入功能代码
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;
}
- 在RT-Thread加载完毕时执行功能代码
INIT_APP_EXPORT(user_keys_led_control); // 应用自动初始化
-
编译烧录
-
测试
Key1按下LED 亮, Key2 按下LED 灭
项目代码
项目完整代码
参考
RT-Thread 工程创建
RT-Thread API参考手册
RT-Thread 系统初始化