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

简介

使用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 系统初始化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/278584.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UML-认识6种箭头(画类图无烦恼)

文章目录 一、背景二、箭头详解2.1 泛化(Generalization)2.2 实现(Realize)2.3 依赖(Dependency)2.4 关联(Association)2.5 聚合(Aggregation)2.6 组合&#…

媒体直播平台有哪些,活动直播如何扩大曝光?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体直播平台包括人民视频、新华社现场云、中国网、新浪新闻直播、搜狐视频直播、凤凰新闻直播、腾讯新闻直播等。活动直播想要扩大曝光,可以考虑以下方式: 1.选择…

【Unity】简单实现生成式电子围栏

【Unity】简单实现生成式电子围栏 三维电子围栏是一种通过使用三维技术和电子设备来建立虚拟围栏,用于监控和控制特定区域的系统。它可以通过使用传感器和摄像头来检测任何越界行为,并及时发出警报。这种技术可以应用于安防领域以及其他需要对特定区域进…

股票交易信息实时大屏(Kafka+storm+Redis+DataV)

目录 引言 需求分析: 思路 数据源: 数据传输: 数据处理: 数据统计: 数据可视化: 数据提取: 技术栈 技术实现 前端界面搭建 布局: ​ 组件: 通信&#x…

Netty常见的设计模式

简介 设计模式在软件开发中起着至关重要的作用,它们是解决常见问题的经过验证的解决方案。而Netty作为一个优秀的网络应用程序框架,同样也采用了许多设计模式来提供高性能和可扩展性。在本文中,我们将探讨Netty中使用的一些关键设计模式&…

修改yocto容量和编译

方法1: 1、修改bitbake.conf cd /home/yocto_build/axxia_support/yocto_build/poky/meta/conf/ vi bitbake.conf修改倍数参数,1.3为5G,13为50G IMAGE_OVERHEAD_FACTOR修改这个参数容量,大于initramfs,不然会报错 I…

目标检测图片截取目标分类图片

如果要训练一个分类模型却没有特定的分类数据集怎么办呢?可以换一种思路,将带有该目标的图片对所有想要的目标进行画标注框然后进行截图,就能得到特定的分类数据了。这么做的目的是:带有该目标的图片可能不会少,但是带…

Go 与 Rust:现代编程语言的深度对比

在快速发展的软件开发领域中,选择合适的编程语言对项目的成功至关重要。Go 和 Rust 是两种现代编程语言,它们都各自拥有一系列独特的特性和优势。本文旨在深入比较 Go 和 Rust,从不同的角度分析这两种语言,包括性能、语言特性、生…

UG NX二次开发(C++)-库缺少需要的入口点的原因与解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、“库缺少需要的入口点”错误展示3、可能出现的原因与解决方案3.1 对于采用CTRL+U方式调用3.2 对于menu菜单下调用1、前言 在UG NX二次开发过程中,有时会遇到形形色色的bug,比如有个读…

使用React实现随机颜色选择器,JS如何生成随机颜色

背景 在标签功能中,由于有「背景色」属性,每次新增标签时都为选择哪种颜色犯难。因此,我们思考如何通过JS代码生成随机颜色,提取一个通用的随机颜色生成工具,并基于React框架封装随机颜色选择器组件。 实际效果 原理…

Leaflet.Graticule源码分析以及经纬度汉化展示

目录 前言 一、源码分析 1、类图设计 2、时序调用 3、调用说明 二、经纬度汉化 1、改造前 2、汉化 3、改造效果 总结 前言 在之前的博客基于Leaflet的Webgis经纬网格生成实践中,已经深入介绍了Leaflet.Graticule的实际使用方法和进行了简单的源码分析。认…

插头是什么

插头 电工电气百科 文章目录 插头前言一、插头是什么二、插头的类别三、插头的作用原理总结前言 插头的设计和结构会根据不同的国家和地区的标准和电源类型而有所不同。所以,在使用插头时,需要注意使用符合当地标准和规定的插头,以确保电气安全以及插入正确的电源插座 一、…