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.mzph.cn/news/225632.shtml

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

相关文章

网络安全项目实战(无)--报文检测

10. TFTP 应用协议报文解析 目标 了解tftp协议了解tftp基本操作方式(put/get)了解tftp协议探测方法(简洁) 10.1. tftp 基本操作 通过操作tftp client和server操作, 熟悉抓包流程 10.1.1. Server 端 安装服务 itcas…

FIFO的Verilog设计(三)——最小深度计算

文章目录 前言一、FIFO的最小深度写速度快于读速度写速度等于或慢于读速度 二、 举例说明1. FIFO写时钟为100MHz,读时钟为80Mhz情况一:一共需要传输2000个数据,求FIFO的最小深度情况二:100个时钟写入80个数据,1个时钟读…

PostgreSQL向量数据插件--pgvector安装(附PostgreSQL安装)

PostgreSQL向量数据插件--pgvector安装 一、版本二、数据库安装1. 在官网下载PostgreSQL14.0的安装包2.增加用户postgres3.解压安装 三、pgvector安装1. 从github上克隆下来2. 安装pgvector插件3. 开始使用pgvector启用pgsql命令行创建扩展 本文为本人在安装pgvector中踩过的坑…

Windows安装卸载MySQL

【官方】MySQL参考手册:介绍MySQL Server、SQL、InnoDB存储引擎、复制等。 Windows 卸载 MySQL 删除程序 【win x】 > p ,在安装的程序中卸载MySQL相关删除安装目录和数据文件夹 D:\ProgramFiles\MySQL C:\ProgramData\MySQL删除服务 【win r】 &…

ElasticSearch之cat segments API

命令样例如下: curl -X GET "https://localhost:9200/_cat/segments?vtrue&pretty" --cacert $ES_HOME/config/certs/http_ca.crt -u "elastic:ohCxPHQBEs5*lo7F9"执行结果输出如下: index shard prirep ip segment g…

25 redis 中 cluster 集群的工作模式

前言 我们这里首先来看 redis 这边实现比较复杂的 cluster集群模式 整个 cluster集群 中会包含多对 MasterSlave 的组合, 然后这多对 MasterSlave 来分解 16384 个 slot 然后 客户端这边 set, get 的时候, 先根据 key 计算对应存储的 slot, 然后 服务器这边响应 MOVED 目标…

P with Spacy:自定义文本分类管道

一、说明 Spacy 是一个功能强大的 NLP 库,其中许多 NLP 任务(如标记化、词干提取、词性标记和命名实体解析)均通过预训练模型提供开箱即用的功能。所有这些任务都由管道对象以及逐步应用于给定文本的不同函数的内部抽象来包装。该管道可以通过…

Android--UML类图使用详解

明敕星驰封宝剑,辞君一夜取楼兰 一,定义 类图(Class diagram)是显示了模型的静态结构,特别是模型中存在的类、类的内部结构以及它们与其他类的关系等。类图不显示暂时性的信息。类图是面向对象建模的主要组成部分。它既用于应用程序的系统分…

【数字电路】MacBook使用iverilog进行数字电路仿真

安装流程 在终端中用brew包管理工具进行安装仿真工具: 编译verilog代码: brew install icarus-verilog编译verilog代码: brew install verilatorMacOS系统显示UNIX GUI brew install xquartz可视化仿真波形图: brew install gtk…

基于Springboot的任务发布平台设计与实现(源码齐全+调试)

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。你想解决的问题,今天给大家介绍…

t-io 程序执行后,jvm不退出的原因

基于t-io 1.7.3 版本分析源码 1、设定当前时间,每10毫秒执行一次 (非守护线程) 2、对应线程池的核心线程在AioServer启动时全部激活,并且添加空任务到阻塞队列,让核心线程(非守护线程)一直存活

IO流学习

IO流:存储和读取数据的解决方案 import java.io.FileOutputStream; import java.io.IOException;public class Test {public static void main(String[] args) throws IOException {//1.创建对象//写出 输入流 OutputStream//本地文件fileFileOutputStream fos new FileOutputS…

RNN和LSTM学习笔记-初学者

提示: 目录 前言一、RNN介绍二、LSTM介绍总结 前言 提示: 提示: 一、RNN介绍 RNN是一种短时记忆,而LSTM是长短时记忆网络 二、LSTM介绍 总结

编译与链接

在在ANSIC的任何⼀种实现中,存在两个不同的环境:翻译环境和运⾏环境 翻译环境:在这个环境中源代码被转换为可执⾏的机器指令。 执⾏环境: 它⽤于实际执⾏代码。 一翻译环境 翻译环境是由编译和链接两个⼤的过程组成的,⽽编译⼜…

【专题】最小生成树(prim算法、kruscal算法)

目录 一、最小生成树二、Prim算法1. 算法思想2. 例题3. 性能分析 三、Kruscal算法1. 算法思想2. 例题3. 性能分析 一、最小生成树 生成树中边的权值(代价)之和最小的树。 二、Prim算法 1. 算法思想 设N(V,{E})是连通网,TE是N上最小生成树…

数据库02-04 中级SQL

01.on关键字: 主要用join…on来用多关系查询,和where关键字的相同 student关系: takes关系: 02.一般外连接 自然连接: 这个外连接(自然连接)会缺少空值的元祖(本例子中的stude…

算法--数据结构基础

文章目录 数据结构单链表栈表达式求值前缀表达式中缀表达式后缀表达式 队列单调栈单调队列KMPTrie并查集堆哈希表字符串哈希 数据结构 单链表 用数组模拟(静态链表)效率比定义Node类(动态链表)效率高些 使用数组模拟单链表&am…

如何配置pycharm来调试python代码

要配置PyCharm来调试Python代码,你可以按照以下步骤进行操作: 打开PyCharm,然后选择“File”菜单,然后选择“Settings”。 在“Settings”窗口中,选择“Python Interpreter”选项。 在“Python Interpreter”窗口中&…

力扣-排列组合问题(递归回溯)——77. 组合、46. 全排列、47. 全排列 II

一、组合 1. 问题描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 输…

Java 使用mybatis的BaseTypeHandler实现数据自动AES加密解密,通过Hutool工具类自定义注解实现数据脱【附有完整步骤和代码】

一、AES加密 1 加密工具类 使用KeyGenerator生成AES算法生成器 public class AESUtil {/*** 密钥长度: 128, 192 or 256*/private static final int KEY_SIZE 256;/*** 加密/解密算法名称*/private static final String ALGORITHM "AES";/*** 随机数生成器&#…