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

简介

使用BearPi IOT Std开发板及主板自带两颗按键与用户灯, 实现按键触发中断控制灯亮灯灭
主板:
主芯片: STM32L431RCT6
LED : PC13 \ 推挽输出\ 高电平点亮
串口: Usart1
KEY1 : PB2 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)
KEY2 : PB3 \ 上拉 \ 按下下降沿触发(一次)/上下沿触发(两次,实现按下开、松开关)

电路原理图

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

步骤

创建项目

参考 BearPi RT-Thread项目创建

用户代码

RT-Thread 关于PIN设备相关函数,将使用到如图框出几个
在这里插入图片描述

  1. 初始化 及 中断处理函数
/* 回调函数, 作为中断函数 */
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;
}
  1. 函数调用
    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 按键响应)

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

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

相关文章

j1冒个泡-排序的演变--扩展题

100 哥随机数 。从小到大排序 #include <stdio.h> #include <time.h> #include <stdlib.h> #define NUM 100 void bbule(int *arr,int size){for (int i 0; i < size-1; i)// 运行O(n)次{/* code */for (int j 0; j < size-1-i; j)// 要减i哟{/* co…

vue中预览pdf的方法

使用vue-pdf 备注&#xff1a;这里只介绍了一页的pdf <div class"animation-box-pdf"><pdf :src"http://xxxx" /> </div>import Pdf from vue-pdf // src可以是文件地址url&#xff0c;也可以是文件流blob&#xff08;将blob转成url&a…

使用kibana查看es数据

前提 已安装好es还有kibana&#xff0c;启动es及kibana 修改kibana配置文件 在kibana文件中配置es的地址及索引&#xff0c;我的kibana安装在mac端了 修改配置文件 /usr/local/opt/kibana/config/kibana.yml 重启kibana 配置kibana 下面查询数据 例如查询 traceId 为192…

240Wqps,美团用户中台, 如何使用DDD架构?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&#x…

记删除CK不彻底问题 及 新增表TTL机制

问题背景&#xff1a;对CK表进行删除时&#xff0c;发现无法彻底删除&#xff0c;并报错如下&#xff1a; 同时也会有下面的报错信息&#xff1a; 解决过程&#xff1a; 确认CK 节点是否健康存活&#xff0c;select * from system.clusters 可以查看&#xff1b;确认CK元数据是…

月入百W的热门项目:盲盒小程序

盲盒作为当下热门行业&#xff0c;深受广大消费者欢迎&#xff0c;尤其是对于二次元玩家&#xff0c;对盲盒更是没有抵抗力。而一些盲盒手办也具有较高的收藏价值&#xff0c;即使不喜欢了也可以转卖出去。 盲盒的规则大家应该都清楚&#xff0c;拥有不确定性和未知性&#xf…

【云原生kubernets】Pod详解

一、Pod介绍 1.1.概念 Pod是kubernetes中最小的资源管理组件&#xff0c;Pod也是最小化运行容器化应用的资源对象。一个Pod代表着集群中运行的一个进程。kubernetes中其他大多数组件都是围绕着Pod来进行支撑和扩展Pod功能的&#xff0c;例如&#xff0c;用于管理Pod运行的State…

【毕业设计】基于STM32的解魔方机器人

1、方案设计 1.采用舵机作为魔方机器人的驱动电机&#xff0c;从舵机的驱动原理可知&#xff1a;舵机运行的速度和控制器的主频没有关系&#xff0c;所以采用单片机和采用更高主频的嵌入式处理器相比在控制效果上没有什么差别。单片机编程过程简单&#xff0c;非常容易上手&am…

服务器数据恢复—raid5热备盘未激活崩溃导致上层oracle数据丢失的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌X系列服务器&#xff0c;4块SAS硬盘组建了一组RAID5阵列&#xff0c;还有1块磁盘作为热备盘使用。服务器上层安装的linux操作系统&#xff0c;操作系统上部署了一个基于oracle数据库的OA&#xff08;oracle已经不再为该OA系统提供后续服务…

数据预处理(二)(附带实例)

一、主要目的&#xff1a; 数据预处理是整个数据分析过程中最为重要的环节&#xff0c;数据预处理主要包括数据清洗、数据抽取、数据交换和数据计算等。熟悉在Python开发环境中支持相应数据预处理环节的可用模块以及其中的方法&#xff0c;通过查阅相关说明文档掌握python中相…

[已解决】uniapp内置插件,editor富文本报错(附quill.min.js、image-resize.min.js文件)

在使用uni-app运行内置插件editor时&#xff0c;无法输入内容&#xff0c;控制台报错 原因&#xff1a;查看官网得知&#xff0c;需动态引入quill.min.js、image-resize.min.js文件 解决方法&#xff1a; 1.下载quill.min.js、image-resize.min.js到项目static/eidtor文件中 2…

提升英语学习效率,尽在Eudic欧路词典 for Mac

Eudic欧路词典 for Mac是一款专为英语学习者打造的强大工具。无论您是初学者还是高级学习者&#xff0c;这款词典都能满足您的需求。 首先&#xff0c;Eudic欧路词典 for Mac具备丰富的词库&#xff0c;涵盖了各个领域的单词和释义。您可以轻松查询并学习单词的意思、用法和例…