【微处理器系统原理和应用设计第十讲】外部中断之开发键控灯亮灭功能

news2024/11/13 8:53:00

一、基础知识

外部设备所产生的信号通过EXIT触发中断。

1、与中断相关的主要寄存器

EXTI共设有6个寄存器,分别为中断屏蔽寄存器(IMR),事件屏蔽寄存器(EMR),上升沿触发选择寄存器(RTSR),下降沿触发选择寄存器(FTSR),软中断事件寄存器(SWIER)和挂起寄存器(PR)。

EXTI:外部中断/事件控制器,管理时间线EXTI0~EXTI18,对于STM32的EXTI控制器支持19个外部中断/事件请求,每个中断设有状态位,每个中断/事件都有独立的触发和屏蔽设置。

EXTI0~15:对应GPIO的输入中断

EXTI16:连接到PVD输出

EXTI17:连接到RTC闹钟事件

EXTI18:连接到USB唤醒事件

EXTIX:事件线,连接GPIO所对应的管脚

EXTICR:寄存器组,共有四个,编译器的寄存器组都是从0开始编号。EXTICR[0]~EXTICR[3]对应的是EXTICR1~EXTICR4。

EXTIi[3:0]:指每条线的选择位

EXTI13:连接GPIOC对应的PC13管脚 

2、嵌入式中断函数的一些特点

(1)不能返回值

中断服务函数的调用是硬件级别的,中断产生时,PC指针强行跳转到对应的中断服务函数入口进入中断具有随机性,并不是通过某段代码对其进行调用,因此返回值没有意义;如果有返回值,必须压栈,但何时和如何出栈是个问题。

(2)不能向ISR传递参数

同理是由于栈结构传参数会破坏栈

(3)ISR应该尽可能短小精悍

若某个中断频繁产生而它对应的ISR相对地耗时会影响中断的响应时间,会丢掉许多的中断请求。

3、单片机中while的作用

(1)while(1)

调试代码时防止后面干扰

有些代码运行错误时会抛出错误,然后进入到while(1)

机器需要复位时,停止喂狗进入while(1)迫使看门狗超时产生硬件复位。

(2)while(1){代码}

使用while(1)防止程序跑飞。因为大多数情况下执行完某程序后PC不会停止,仍会继续从ROM中读取指令并执行。

4、EXTI中断中中断与事件的区别

(1)事件:检测到某一动作(电平边沿)触发事件发生了;中断:有某个事件发生并产生中断,并跳转到对应的中断处理程序

(2)中断有可能被更优先级的中断屏蔽,而事件不会。

(3)事件的本质是一个触发信号(脉冲),用来唤醒特定的外设或者核心本身。

而中断时一个固定的电平信号。

(4)事件是中断的触发源,事件可以触发中断(开放了对应的中断屏蔽位),也可以不触发。

(5)中断一定要有中断服务函数,而事件没有

(6)事件可以在不需要CPU干涉的情况下执行操作,而中断必须要有CPU介入。

二、 功能需求

开发键控灯功能,即灯灭时,按一下按钮灯亮,灯亮时,按一下按钮灯熄灭。

三、设计思路

将PA5设置为数字推挽输出,PC13配置为数字输入和外部中断EXTI13线。当按下按钮时产生下降沿触发EXTI13中断,在中断处理函数中PA5值翻转。PA5初始化输出高电平。

四、软件流程图

五、程序设计

1、EXTI中断配置函数

采用ExIntInit函数配置EXTI信号源为PC13,下降沿触发。代码如下:

void ExIntInit(void)
{
	
	RCC->AHB1ENR|=1<<2; //使能GPIOC时钟
	RCC->APB2ENR|=1<<14; //使能SYSCFG时钟
	SYSCFG->EXTICR[3]=(SYSCFG->EXTICR[3]& ~(0xF<<4))|(2<<4); //配置EXTI13信号源为PC13
	EXTI->IMR|=1<<13; //取消对EXTI13信号线的屏蔽
	EXTI->FTSR|=1<<13; //设定EXTI13中断触发信号为下降沿
	NVIC->ISER[1]|=1<<8; //在NVIC中设置EXTI15_10中断使能

}

2、中断服务函数

中断服务函数名按照之前的约定设置为EXTI15_10_IRQHandler。中断处理代码如下:

void EXTI15_10_IRQHandler(void)
{
	EXTI->PR|=1<<13; //清楚当前已经产生的EXTI13中断
	LedSw(); //反转LED灯的亮灭状态
	
}

 

 

 

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

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

相关文章

Ubuntu | 安装 Truffle 框架(安装缓慢)

目录 预备工作具体步骤Step1&#xff1a;安装 nvma. 官方方式&#xff08;可能失败&#xff09;b. 压缩包安装方式 Step2&#xff1a;安装 node.js 和 npmStep3&#xff1a;安装 Truffle 参考博客 前言&#xff1a;昨天安装 Truffle 框架&#xff0c;结果缓冲条转了一晚上都没安…

利士策分享,如何平衡物质追求与心理健康?

利士策分享&#xff0c;如何平衡物质追求与心理健康? 在快节奏的现代社会&#xff0c;物质追求与心理健康仿佛成了人们生活中不可或缺的两极。 一方面&#xff0c;科技的飞速发展和经济的繁荣让我们拥有了前所未有的物质享受&#xff1b; 另一方面&#xff0c;高压的工作环…

前端基础 | HTML基础:HTML结构,HTML常见标签

文章目录 HTML1、HTML结构1.1HTML标签1.1.1标签1.1.2标签含义 1.2HTML文件基本结构1.3标签层次结构1.4 快速生成代码框架 2、HTML常见标签2.1注释标签2.2标题标签&#xff1a;h1–h62.3段落标签&#xff1a;p2.4 换行标签&#xff1a;br2.5格式化标签2.6 图片标签&#xff1a;i…

细致刨析JDBC ② 进阶篇

目录 一、JDBC拓展 1.实体类和ORM Ⅰ、ORM思想封装单个对象 Ⅱ、ORM思想封装集合 2.主键回显 3.批量操作 ① 循环逐条数据进行添加 ② 批量进行添加 二、连接池 1.现有问题 2.连接池 3.常见连接池 4.Druid连接池使用 使用步骤&#xff1a; 硬编码 软编码 5.HikariCP连接池使用 …

(详细文档)javaswing学生成绩管理系统(mysql)+详细报告

摘要 在现今信息时代&#xff0c;生活速度的加快&#xff0c;使得人们越来越向信息化、数字化发展。 随着学校的规模不断扩大&#xff0c;学生数量急剧增加&#xff0c;有关学生的各种信息量也成倍增 长&#xff0c;尤其是学生的考试成绩数据。面对庞大的学生的成绩&#xff0…

@Value读取properties中文乱码解决方案

前几天碰到使用Value中文乱码的问题&#xff0c;英文字符则不会出现问题 原因&#xff1a;SpringBoot在加载properties配置文件时&#xff0c;使用的默认编码是&#xff1a;ISO_88599_1 解决方式&#xff1a;将properties改成yml就可以读取成功了 Data Component PropertySou…

数据结构(邓俊辉)学习笔记】排序 1——快速排序:算法A

文章目录 1. 分而治之2. 轴点3. 构造轴点4. 单调性 不变性5. 实例 1. 分而治之 主题就是排序。实际上我们对于排序问题并不陌生。你应该记得在最开始的几章&#xff0c;我们就分别介绍过起泡排序、插入排序、选择排序以及归并排序&#xff0c;而在介绍散列技术时&#xff0c;我…

Tableau 2023下载安装教程最新教学附软件包百度网盘分享链接地址

Tableau 2023介绍 Tableau 2023下载安装教程最新教学附软件包百度网盘分享链接地址&#xff0c;Tableau 是一款强大的数据可视化软件。它能连接多种数据源并整合&#xff0c;操作简单&#xff0c;通过拖放即可创建可视化报表和仪表盘。具有高效的分析处理能力&#xff0c;支持…

windows下安装并使用nvm

目录 一.准备工作&#xff1a;卸载node 卸载步骤 二.下载nvm 三.安装nvm 三.配置下载源【重要】 四.使用nvm安装node.js 五.nvm常用命令 六.卸载nvm 一.准备工作&#xff1a;卸载node 如果电脑上已经有node&#xff0c;那么我们需要先完全卸载node&#xff0c;再安装…

LeetCode 热题 100 回顾15

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

FastAPI模块化:为复杂应用程序提供清晰的结构

开题描述&#xff1a; 在现代软件开发中&#xff0c;随着应用程序规模的扩大和功能的增加&#xff0c;传统的单体架构逐渐暴露出其局限性。FastAPI&#xff0c;作为一款高性能的现代Web框架&#xff0c;通过其模块化设计提供了一种解决方案。本文将探讨FastAPI模块化如何为构建…

顶刊中的树状图如何绘制?|科研绘图·24-09-07

小罗碎碎念 本期推文主题&#xff1a;树状图 本期推文主要介绍如何绘制树状图以及它的一些变体形式&#xff0c;看完本篇推文&#xff0c;你最终能够实现的效果如下。 一、组织结构图 Dendrogram是一种网络结构&#xff0c;由一个根节点开始&#xff0c;该节点通过边或分支连接…

找商业网字体加密(TTFont方法)

网点地址&#xff1a;公司介绍-泰州名列新材料有限公司 (zhaosw.com) 问题如下&#xff1a; 在网站中看到的电话号码在页面源码中无法查看 破解步骤&#xff1a; 1.找到woff文件 查找字体的class属性&#xff0c;全文查找font-face-encrypted找到如下内容&#xff0c;可以看到…

在 Linux 上部署javaWeb项目+图文详解_java web项目部署到linux服务器

-f : force强制的意思&#xff0c;如果目标文件已经存在&#xff0c;不会询问直接覆盖 -i : 若目标已经存在&#xff0c;就会询问是否覆盖 -u : 若目标文件已经存在&#xff0c;且比目标文件新&#xff0c;才会更新 # 该命令可以把多个文件一次移动到一个文件夹中&#xff0c;但…

github删除自己创建的仓库

1.进入仓库&#xff0c;点击Settings 2.下拉至Danger Zone区域&#xff0c;点击Delete this repository 3.点击 I want to delete this repository 4.点击i have read ... 5.按提示输入&#xff0c;点击Delete this repository 总结 1.进入仓库&#xff0c;点击Settings 2.下…

推荐9个不同风格的音频频谱波形 听音乐怎么能少了它

9个不同风格的音频频谱波形 听音乐怎么能少了它。在我们沉静在听音乐的过程中&#xff0c;桌面上的频谱跳动&#xff0c;会让音乐更有动感&#xff0c;视觉化把音频表现出来。在桌面上跳动的音乐&#xff0c;更有氛围。小小编给大家带来了9种非常有特殊的音频频谱&#xff0c;看…

做一个最简单的CPU -- 计算机组成原理(六)

在上一个章节中&#xff0c;我们已经了解了一个存储是如何制作出来的&#xff0c;利用这个存储我们就可以做一个最简单的CPU 指令 我们知道CPU负责执行计算机的程序&#xff0c;而程序其实是一个个的操作指令 比如可能是计算指令&#xff0c;cpu会指示ALU进行加减运算 也可…

【web网页制作】html+css旅游家乡河南主题网页制作(5页面)【附源码】

一、&#x1f468;‍&#x1f393;网站题目 旅游&#xff0c;当地特色&#xff0c;历史文化&#xff0c;特色小吃等网站的设计与制作。 二、✍️网站描述 &#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS 等来完成页面的排版设计&#x1f469;‍&#x1f393;…

Leetcode面试经典-115.不同的子序列

解法都在代码里&#xff0c;不懂就留言或者私信 理论上提交这个就是最优解 class Solution {public int numDistinct(String s, String t) {if(s.length() < t.length()) {return 0;}if(s.length() t.length()) {return s.equals(t)? 1 : 0;}char[] sArr s.toCharArray…

【大模型基础】P2 Bag-of-Words 词袋模型

目录 词袋模型 概述词袋模型 实例第1步 构建语料库第2步 对句子进行分词第3步 创建词汇表第4步 转换词袋表示第5步 计算余弦相似度 词袋模型的局限性 词袋模型 概述 词袋模型&#xff0c;Bag-of-Words&#xff0c;是一种简单的文本表示方法&#xff0c;也是 NLP 中的一个经典模…