上位机图像处理和嵌入式模块部署(mcu的按键输入)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        做技术的同学,大部分都会把精力放在技术本身,却忽视了学的东西有什么实际的用途。就拿gpio来说,一般我们点灯也好、做输入也好,最多也就是当成一个实验demo在使用。可是大家有没有思考过,其实这样一个模块就已经是一个完整的输入、输出的系统了。简单的方面,我们可以做一个2-4译码器、3-8译码器,复杂一点的,我们可以做玩具、做一个设备改造的模块。

        很多同学不理解这个设备改造的模块,还是以卷帘门为例。过去卷帘门,一般就是向上按键按下去,卷帘门上升;向下按键按下去,卷帘门下降。如果我们想扩展一下这个功能,比如向上按下去的时候,为了安全需要,不仅卷帘门上升,还要有一个语音和红绿灯显示,这个时候就可以用这样一个模块来完成了。过去可能非标领域一般都是通过plc来完成,现在我们自己学会了mcu开发,就很自然地想通过mcu来完成。

1、按键输入

        按键输入是和按键输出对应的。按键输出,一般是led点亮、熄灭,又或者是蜂鸣器呼叫等等而按键输入,更多时候来自于外部的反馈,它表示使用的人员希望开启、使用或者是关闭某个功能。

2、main函数分析

        首先,我们还是看下整个demo的原貌,

int main(void)
{SystemClock_Config();LED_GPIO_Config();	 Key_GPIO_Config();while(1)                            {	   if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  ){LED1_ON;}else{LED1_OFF;}}
}

        和之前相比较,整个流程多了两部分,第一个是添加Key_GPIO_Config,这个主要是告诉mcu,哪些按键希望被当做是key输入使用。第二个是Key_Scan,主要用于检测当前KEY1_PIN是不是已经被按下。如果是被按下了,那么LED1点亮,反之熄灭。

3、配置按键输入

        前面我们说过,要配置按键输入,需要看下Key_GPIO_Config是如何实现的。这部分关注的重点,集中在它和之前GPIO输出有什么差别。

void Key_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;KEY1_GPIO_CLK_ENABLE();GPIO_InitStructure.Pin = KEY1_PIN; GPIO_InitStructure.Mode = GPIO_MODE_INPUT; GPIO_InitStructure.Pull = GPIO_NOPULL;HAL_GPIO_Init(KEY1_GPIO_PORT, &GPIO_InitStructure);
}

        这里的KEY1_PIN是a0,不过不是重点。重点在于,当key处于输入状态的时候,它的mode和pull是不一样的。这部分,大家可以对比一下之前led的设置,这样看起来效果更好。

void LED_GPIO_Config(void)
{GPIO_InitTypeDef  GPIO_InitStruct;LED1_GPIO_CLK_ENABLE();GPIO_InitStruct.Pin = LED1_PIN;	GPIO_InitStruct.Mode  = GPIO_MODE_OUTPUT_PP;  GPIO_InitStruct.Pull  = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;HAL_GPIO_Init(LED1_GPIO_PORT, &GPIO_InitStruct);	LED_RGBOFF;
}

4、轮询检查key的状态

        较早读书的时候,我会认为轮询是非常低效的一种情况。但是到了mcu这里,轮询是非常常见的一种开发方式。特别是功能比较单一的时候,轮询其实很简洁、很鲁棒,几乎不会出错,

uint8_t Key_Scan(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin)
{			if(HAL_GPIO_ReadPin(GPIOx,GPIO_Pin) == KEY_ON )  {return 	KEY_ON;	 }else{return KEY_OFF;}
}

5、测试方法

        之前野火提供的测试demo其实不是这样,它的case其实是依据它自身的开发板实现的。上面有现成的实体按键。这边的话,我们既然是用一个stm32f103的核心板进行测试,那么就用一根短接线进行测试好了。

        短接线的一头连接在a0上面,另外一头可以连接到电源3.3v,又或者是gnd上面。如果是连接在电源3.3v上面,c13应该亮起;反之则熄灭。通过这样的方式,也可以观察到按键输入的实际效果。另外还有一点要注意的是,我们核心板上面只有一个c13可以点灯,这和野火官方的demo不太一样,所以同样需要改造一下,

#define LED1_PIN                  GPIO_PIN_13                
#define LED1_GPIO_PORT            GPIOC                     
#define LED1_GPIO_CLK_ENABLE()   __HAL_RCC_GPIOC_CLK_ENABLE()

6、美中不足

        这边按键按下去的时候,正常情况下都会delay延时一下,一段事件之后确认按键是不是真的被按下。这样做的好处是防止误触、或者是抖动的发生。当然,我们也可以让测试做的更好玩一点,比如设置成闪烁的形式,

int main(void)
{SystemClock_Config();LED_GPIO_Config();	 Key_GPIO_Config();while(1)                            {	   if( Key_Scan(KEY1_GPIO_PORT,KEY1_PIN) == KEY_ON  ){HAL_Delay(1000);LED1_ON;HAL_Delay(1000);LED1_OFF;}else{LED1_OFF;}}
}

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

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

相关文章

递归的例子

例1&#xff1a;阶乘函数 #include<iostream> using namespace std; int f(int n) {if(n0)return 1;elsereturn f(n-1)*n; } int main() {int n;cin>>n;cout<<f(n);return 0; }例2&#xff1a;Fibonacci数列 无穷数列1&#xff0c;1&#xff0c;2&#xff0…

计算机-编程相关

在 Linux 中、一切都是文件、硬件设备是文件、管道是文件、网络套接字也是文件。 for https://juejin.cn/post/6844904103437582344 fork 进程的一些问题 fork 函数比较特殊、一次调用会返回两次。在父进程和子进程都会返回。 每个进程在内核中都是一个 taskstruct 结构、for…

Python函数进阶:四大高阶函数、匿名函数、枚举、拉链与递归详解

系列文章目录 Python数据类型&#xff1a;编程新手的必修课深入探索Python字符串&#xff1a;技巧、方法与实战Python 函数基础详解Python正则表达式详解&#xff1a;掌握文本匹配的魔法Python文件操作宝典&#xff1a;一步步教你玩转文件读写Python面向对象基础与魔法方法详解…

实验五:实现循环双链表各种基本运算的算法

实验五&#xff1a;实现循环双链表各种基本运算的算法 一、实验目的与要求 目的:领会循环双链表存储结构和掌握循环双链表中各种基本运算算法设计。 内容:编写一个程序cdinklist.cpp,实现循环双链表的各种基本运算和整体建表算法(假设循环双链表的元素类型ElemType为char),并…

【加密与解密(第四版)】第十七章笔记

第十七章 软件保护技术 17.1 防范算法求逆 17.2 抵御静态分析 反汇编算法&#xff1a;线性扫描&#xff08;无法正确地将代码和数据分开&#xff09;、递归进行 巧妙构造代码和数据&#xff0c;在指令流中插入很多“数据垃圾"&#xff0c;干扰反汇编软件的判断&#xf…

百度手机号登录iApp源码V3

本源码直接对接百度网页版登录接口&#xff0c;无需跳转第三方APP或者网页&#xff0c;可直接进行输入手机号获取验证码的步骤&#xff0c;登录后可获取到用户的UID&#xff0c;名称&#xff0c;BDUSS&#xff0c;PTOKEN&#xff0c;STOKEN&#xff0c;头像直链。 源码下载&…

若依nodejs版本过高问题解决方案

由于nodejs版本过高,可能会导致vue-cli项目运行报错。 目录 方法1:每次启动项目前,输入配置命令 方法2:修改package.js

docker 网络模式

四种模式介绍 宿主机可上网,容器内便可上网.且能ping通宿主机同网段服务 Docker网络模式 配置 说明 host模式 --nethost 容器和宿主机共享Network namespace。 container模式 --netcontainer:NAME_or_ID 容器和另外一个容器共享Network namespace。 kubernetes中的pod…

【DevOps】深入浅出:Jenkins 性能监控全解析

目录 一、监控指标&#xff1a;把握系统健康状况 1、资源利用率&#xff1a; 2、 任务执行效率&#xff1a; 3、系统稳定性&#xff1a; 二、监控工具&#xff1a;选择合适的利器 1、Jenkins 内置监控 1.1、Jenkins Performance Plugin&#xff1a;系统性能指标的直观展…

性能测试工具

性能测试工具 1.Jmeter 环境搭建1.安装JDK2.安装Jmeter1.下载2.安装3.环境配置 3.Jmeter 文件目录介绍1.bin目录2.docs 目录3.printable_docs目录4.lib目录 4.修改默认配置1.汉化配置2.修改主题 5.元件的基本介绍6.元件的作用域作用域的原则 7.元件的执行顺序 1.Jmeter 环境搭建…

登录安全分析报告:创蓝云智注册

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞…

ubuntu22.04下 easyconnect+输入法安装

先使用对应ubuntu版本的easyconnect安装 sudo dpkg -i EasyConnect_x64_7_6_7_3.deb 下载压缩包servicePack&#xff0c;并解压缩 cd 下载路径/servicePack sudo cp * /usr/share/sangfor/EasyConnect/ 打开easyConnect /usr/share/sangfor/EasyConnect/EasyConnect 此处…

Windows安全应急--反隐身术

NO.1 dir命令 首先做个演示&#xff0c;把演示01这个文件夹隐藏起来&#xff0c; 在文件夹上是看不到了&#xff0c; 我们可以使用dir命令查看&#xff0c; NO.2 文件夹选项–显示隐藏 这个是非常常规的了&#xff0c; 这里不做过多介绍 有些隐藏文件很顽固&#xff0c;上面…

mysql基础概念

一 基本操作 1 SQL分类 数据库&#xff1a;database 表&#xff1a;table&#xff0c;行&#xff1a;row 列&#xff1a;column 索引&#xff1a;index 视图&#xff1a;view 存储过程&#xff1a;procedure 存储函数&#xff1a;function 触发器&#xff1a;trigger 事…

使用HiBurn烧录鸿蒙.bin文件到Hi3861开发板

鸿蒙官方文档的“Hi3861开发板第一个示例程序”中描述了——如何使用DevEco Device Tool工具烧录二进制文件到Hi3861开发板&#xff1b; 本文将介绍如何使用HiBurn工具烧录鸿蒙的.bin文件到Hi3861开发板。 获取HiBurn工具 通过鸿蒙官方文档我们知道DevEco Device Tool是一个V…

Docker访问文件权限受限问题解决

问题描述 运行项目的docker环境&#xff0c;新添加了一个数据集&#xff0c;但是数据集的访问权限受限&#xff08;Permission dinied&#xff09;&#xff0c;运行的命令如图所示 问题解决 chmod 777 xxx YYDS&#xff01;&#xff01;&#xff01;但是单纯直接运行会因为权限…

5.22R语言初步学习-1

今天上课讲R语言&#xff0c;要干什么没讲&#xff0c;分析什么&#xff0c;目的是什么没讲。助教基本上就是让我们打开窗口&#xff0c;按要求抄代码指令&#xff0c;代码原理也没讲......再加上最近正好在学概率论与数理统计&#xff0c;肯定是有用的&#xff0c;所以还是学习…

CLIP论文学习

学习来自B站bryanyzhu

【list】list库介绍 + 简化模拟实现

本节博客先对list进行用法介绍&#xff0c;再在库的基础上简化其内容和形式&#xff0c;简单进行模拟实现&#xff0c;有需要借鉴即可。 目录 1.list介绍1.1 list概述1.2相关接口的介绍 2.简化模拟实现3.各部分的细节详述3.1结点3.2迭代器细节1&#xff1a;迭代器用原生指针还是…

风控指南:国内车险欺诈呈现四大趋势

目录 车险欺诈呈现内外勾结的团伙化 防范车险欺诈需要多重合作 保险企业需要提升反欺诈能力 监管部门需要加强协同合作 2024年4月11日&#xff0c;国家金融监督管理总局官网发布国家金融监督管理总局关于《反保险欺诈工作办法&#xff08;征求意见稿&#xff09;》公开征求意见…