嵌入式按键原理、中断过程与中断程序设计(键盘扫描程序)

按键去抖动
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,电压信号波型如下图。由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为
5ms~10ms。

低电平有效

  • CNFy=10 → 上拉/下拉输入模式。

  • MODEy=00 → 输入模式(忽略速度)。

 


 中断

从发展过程来看:
中断 (interrupt) 最初被用来替换 I/O 操作的轮询处理方式,以提高I/O 处理的效率。
随后,中断又包含了自陷 (trap ,也称为内部中断或是软件中断) 的功能。
后来,中断的概念得到进一步扩大,被定义为 导致程序正常执行流程发生改变的事件 ( 不包括程序的分支情况) 。可把概念被扩大的中断称为广义中断。
实际应用中,广义的中断通常被分为中断(Interrupt)、自陷 (Traps)和异常(exception)等类别。
中断 是由于 CPU 外部的原因而改变程序执行流程的过程,属于异步事件,又称为硬件中断。自陷和异常则为同步事件;
自陷 表示通过处理器所拥有的软件指令、可预期地使处理器正 在执行的程序的执行流程发生变化,以执行特定的程序。自陷是显式的事件,需要无条件地执行;
Motorola 68000 系列中的 Trap 指令
ARM 中的 SWI 指令
Intel 80x86 中的 INT 指令
异常 CPU 自动产生的自陷,以处理异常事件。
如被 0 除、执行非法指令和内存保护故障等。
异常没有对应的处理器指令,当异常事件发生时,处理器也需要无条件地挂起当前运行的程序,执行特定的处理程序

 STM32的中断

CM3 内核支持256 个中断,其中包含了16 个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32 只用了CM3 内核的一部分。
STM32 有 76 个中断 ,包括16 个内核中断和60 个可屏蔽中断,具有 16 级 可编程的中断 优先级
常用的就是这60 个可屏蔽中断,以下介绍的就是这60 个可屏蔽中断。
NVIC 是(Nested vectoredinterrupt controller,嵌套向量中断控制器);用于为中断分组,从而分配抢占优先级和响应优先级。
ISER[2]:ISER 全称是:Interrupt Set-Enable Registers, 这是一个 中断使能寄存器组 。上面说了STM32 的可屏蔽中断 只有 60 个 ,这里用了2 个32 位的寄存器,总共可以表示64 个中断。而STM32 只用了其中的前60 位。
ISER[0]的 bit0~bit31 分别对应中断0~31。ISER[1]的bit0~27对应中断32~59;这样总共60 个中断就分别对应上了。你要 使能某个中断,必须设置相应的ISER位为1 ,使该中断被使能(这里
仅仅是使能,还要配合中断分组、屏蔽、IO 口映射等设置才算是一个完整的中断设置)。

 

IPR[15]:全称是:Interrupt Priority Registers,是一个 中断优先级控制的寄存器组 。这个寄存器组相当重要!STM32 的中断分组与这个寄存器组密切相关。
IPR 寄存器组由15 个32bit 的寄存器组成 ,每个可屏蔽中断占用8bit,这样总共可以 表示15*4=60 个可屏蔽中断 。刚好和STM32 的可屏蔽中断数相等。IPR[0]的[31~24], [23~16],[15~8],[7~0]分别对应中中断3~0,依次类推,总共对应60 个外部中断。

EXTI External interrupt/event controller 外部中断/ 事件控制器,管理了控制器的 20 个中断 /
事件线。每个中断 / 事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿
的检测。 EXTI 可以实现对每个中断 / 事件线进行单独配置,可以单独配置为中断或者事件,以及
触发事件的属性。
EXTI 支持配置 20 个中断和事件屏蔽位;
GPIO 端口连接到 16 个外部中断 / 事件线上 ;EXTI_Line0—EXTI_Line15
EXTI_Line16 连接到 PVD 输出 ;
EXTI_Line17 连接到 RTC 闹钟事件 ;
EXTI_Line18 连接到 USB 唤醒事件 ;
EXTI_Line19 连接到以太网唤醒事件 ( 只适用于互联型产品 );

 

 

 


STM32键盘中断编程
1 ) 初始化IO口为输入。
这一步设置你要作为外部中断输入的 IO 口的状态,可以设置为上拉/ 下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。 在干扰较大的地方,就算使用了上拉/ 下拉,也建议使用外部上拉/ 下拉电阻,这样可以一定程度防止外部干扰带来的影响。
GPIOC->CRL&=0XFFFFF000;//PC0-2设置成输入   清零PC0、PC1、PC2的配置位
GPIOC->CRL|=0X00000888;  设置PC0、PC1、PC2为上拉/下拉输入
  • CNFy[1:0]=10:上拉/下拉输入模式。

  • MODEy[1:0]=00:输入模式(忽略输出速度)。

2 ) 开启IO口复用时钟,设置IO口与中断线的映射关系。
STM32 IO 口与中断线的对应关系需要配置外部中断配置寄存器 EXTICR ,这样我们要先开启复用时钟,然后配置 IO 口与中断线的对应关系。才能把外部中断与中断线连接起来。
RCC->APB2ENR|=1<<4; // 使能 PORTC 时钟
3 ) 开启与该IO口相对的线上中断/ 事件,设置触发条件。
这一步,我们要配置中断产生的条件, STM32 可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置,
同时要开启中断线上的中断。这里需要注意的是:如果使用外部中断,并设置该中断的EMR 位的话,会引起软件仿真不能跳 到中断,而硬件上是可以的。而不设置EMR ,软件仿真就可以
进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。
Ex_NVIC_Config(GPIO_C,0,FTIR); // 下降沿触发
Ex_NVIC_Config(GPIO_C,1,FTIR); // 下降沿触发
Ex_NVIC_Config(GPIO_C,2,FTIR); // 下降沿触发
4 ) 配置中断分组(NVIC),并使能中断。
这一步,我们就是配置中断的分组,以及使能,对 STM32 的中断来说,只有配置了NVIC 的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。
MY_NVIC_Init(2,2,EXTI0_IRQChannel,2); //抢占2,子优先级2,组2
5 ) 编写中断服务函数。
这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起 硬件错误,从而导致程序崩溃!所以在开启了某个中断后,一定
要记得为该中断编写服务函数。在中断服务函数里面编写你要执行的中断后的操作。
void EXTI0_IRQHandler(void)
{ …………
EXTI->PR=1<<0; //清除LINE0上的中断标志位
}

 

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

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

相关文章

数据结构之哈夫曼树

8.哈夫曼树 8.1 哈夫曼编码 哈夫曼编码&#xff08;Huffman Coding&#xff09;&#xff0c;又称霍夫曼编码&#xff0c;是一种可变字长编码&#xff08;VLC&#xff09;方式 这种编码方法完全依据字符出现的概率来构造异字头的平均长度最短的码字&#xff0c; 因此有时也被…

机器学习实操 第一部分 机器学习基础 第5章 支持向量机(SVM)

机器学习实操 第一部分 机器学习基础 第5章 支持向量机&#xff08;SVM&#xff09; 内容概要 第5章深入介绍了支持向量机&#xff08;SVM&#xff09;&#xff0c;这是一种功能强大且应用广泛的机器学习模型。SVM适用于线性或非线性分类、回归以及 novelty detection。本章详…

Webug4.0靶场通关笔记14- 第18关 文件上传之Nginx解析缺陷

目录 第18关 渗透实战 1.打开靶场 2.构造php脚本 3.源码分析 &#xff08;1&#xff09;客户端源码 &#xff08;2&#xff09;服务的源码 4.Nginx解析法渗透 &#xff08;1&#xff09;缺陷原因 &#xff08;2&#xff09;缺陷条件 &#xff08;3&#xff09;构造脚…

【QT】QT中的网络编程(TCP 和 UDP通信)

QT中的网络编程&#xff08;TCP 和 UDP通信&#xff09; 1.tcp1.1 tcp通信1.1.1 相比linux中tcp通信:1.1.2 QT中的tcp通信: 1.2 tcp通信流程1.2.1 服务器流程&#xff1a;1.2.1.1 示例代码1.2.1.2 现象 1.2.2 客户端流程&#xff1a;1.2.2.1 示例代码1.2.2.2 现象&#xff1a; …

架构思维:使用懒加载架构实现高性能读服务

文章目录 一、引言二、读服务的功能性需求三、两大基本设计原则1. 架构尽量不要分层2. 代码尽可能简单 四、实战方案&#xff1a;懒加载架构及其四大挑战五、改进思路六、总结与思考题 一、引言 在任何后台系统设计中&#xff0c;「读多写少」的业务场景占据主流&#xff1a;浏…

永磁同步电机控制算法--基于PI的位置伺服控制

一、原理介绍 永磁同步伺服系统是包含了电流环、速度环和位置环的三环控制系统。 伺服系统通过电流检测电路和光电编码器检测电动机三相绕组电流和转子位置θ&#xff0c;通过坐标变换&#xff0c;计算出转矩电流分量iq和励磁电流分量id。 位置信号指令与实际转子位置信号的差…

linux系统线程实现原理浅析

背景 对进程和线程的理解&#xff0c;之前一直都是凭一些零碎不完整的信息在理解&#xff1b; linux的进程和线程基本上一样&#xff0c;线程是轻量级进程&#xff0c;彼此有关联又独立。 得亏内核支持的好&#xff0c;写用户态程序可以不依赖于实现的理解&#xff0c;只需要…

MySQL连接报错处理:1130-host ... is not allowed to connect to this MySql server

在MySQL安装完成后&#xff0c;很多开发者会遇到这样一个问题&#xff1a; 错误代码 1130&#xff1a;host xxx.xxx.xxx.xxx is not allowed to connect to this MySql server 这个错误通常出现在你尝试通过远程工具&#xff08;如 Navicat、DBeaver 等&#xff09;连接 MySQL …

Linux系统之----进程控制

1.进程创建 进程创建部分由于就是fork函数&#xff0c;还有写时拷贝&#xff0c;在上一篇已经讲述过了&#xff0c;这里不在进行赘述&#xff0c;有疑问的读者可以前往上一篇博文《Linux系统--程序地址空间》中阅读&#xff01; 这里在多说一嘴写时拷贝吧 我们可以对比一下写…

Spring框架的设计目标,设计理念,和核心是什么 ?

Spring框架是一个为简化企业级应用开发而设计的开源框架&#xff0c;它提供了全面的基础设施支持&#xff0c;使得Java应用开发更加简单、快速和可维护。下面我将详细解释Spring框架的设计目标、设计理念以及核心组件。 设计目标 简化Java企业级应用开发&#xff1a;通过提供…

Red Hat6.4环境下搭建DNS服务器

DNS服务器&#xff08;Domain Name System Server&#xff09;是互联网中用于将域名&#xff08;如 www.example.com&#xff09;解析为IP地址&#xff08;如 192.0.2.1&#xff09;的服务器。它是互联网基础设施的重要组成部分&#xff0c;帮助用户通过易于记忆的域名访问网站…

Nginx核心功能 02

目录 Nginx代理技术核心概念 &#xff08;一&#xff09;正向代理&#xff08;Forward Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 &#xff08;二&#xff09;反向代理&#xff08;Reverse Proxy&#xff09; 1. 基本定义 2. 技术原理 3. 应用场景 一、…

关于Python:3. Python标准库和常用模块

1. os 和 sys&#xff08;系统编程基础&#xff09; 这两个模块是进行系统层面操作&#xff08;如文件管理、路径处理、环境变量访问等&#xff09;必不可少的工具。 os 模块 os 主要是用于与操作系统交互的&#xff0c;比如&#xff1a; 文件和目录操作 获取系统信息 运行…

Java基于SaaS模式多租户ERP系统源码

目录 一、系统概述 二、开发环境 三、系统功能介绍 一、系统概述 ERP&#xff0c;全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统&#xff0c;它通过信息技术手段&#xff0c;将企业的各个业务流程和资源管理进行整合&#xff0c;以提高企业…

个人健康中枢的多元化AI网络革新与精准健康路径探析

引言 随着数字化转型的深入推进,个人健康中枢作为集成化健康管理系统,正在从传统的单一功能向多元化的AI驱动方向快速发展。在这一背景下,新兴网络硬件技术,特别是DPU(数据处理单元)和全光网络的出现,为个人健康中枢的革新提供了前所未有的机遇。本研究将深入探讨这些技…

AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用

AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用 一、引言:AI是“铁人三项”,但训练+推理常常“掉链子” 如今的人工智能系统越来越强,像ChatGPT、Stable Diffusion、Segment Anything等模型不断刷新技术天花板。但你是否也注意到: 明明模型设计得挺好,训练…

《MATLAB实战训练营:从入门到工业级应用》工程实用篇-自动驾驶初体验:车道线检测算法实战(MATLAB2016b版)

《MATLAB实战训练营&#xff1a;从入门到工业级应用》工程实用篇-&#x1f697; 自动驾驶初体验&#xff1a;车道线检测算法实战&#xff08;MATLAB2016b版&#xff09; 大家好&#xff01;今天我要带大家一起探索自动驾驶中一个非常基础但又至关重要的技术——车道线检测。我…

模型部署——cuda编程入门

CUDA中的线程与线程束 kernel是在device上线程中并行执行的函数&#xff0c;核函数用__global__符号声明&#xff0c;在调用时需要用<<<grid_size, block_size>>>来指定kernel要执行的线程数量。在CUDA中&#xff0c;每一个线程都要执行核函数&#xff0c;并…

WordPress不支持中文TAG标签出现404的解决方法

我们在后台编辑文章时输入中文标签会发现出现404的情况&#xff0c;其实中文TAG标签链接无法打开的原因是WordPress不支持中文的编码。那么解决的方法也很容易&#xff0c;只要改代码让WordPress能支持中文的编码形式&#xff0c;也就是UTF-8和GBK编码即可&#xff0c;无需用到…

金融信贷公司所需的技术和风控体系及其带来的价值

金融信贷公司的技术架构通过集成传统大型机系统与现代数据平台&#xff0c;能够有效支持金融信贷业务的运作&#xff0c;同时通过大数据、ETL、报表开发、数据仓库等技术为公司带来更高效的数据驱动决策、精准的风控分析和更灵活的业务支持。 一、公司技术架构 数据仓库架构&…