05STM32EXIT外部中斷中斷系統

STM32EXIT外部中斷&中斷系統

  • 中斷系統
    • 中斷觸發條件:
    • 中斷處理流程和用途:
  • STM32中斷
  • NVIC嵌套中斷向量控制器基本結構

中斷系統

在這里插入圖片描述

中斷觸發條件:

對外部中斷來說,可以是引腳發生了電平跳變
對定時器來說,可以是定時的時間到了
對串口通信來說,可以是接收到了數據
當這些事件發生時,情況比較緊急,比如外部中斷來了,如果不處理,下一個跳變信號就跟著過來了。
比如串口接收中斷來了,如果不讀取接收到的數據,那下一個數據再過來,就會把原來的數據覆蓋掉。
所以希望當中斷條件滿足時,CPU能夠立即停下當前執行的程序,轉而去處理中斷事件的程序。

中斷處理流程和用途:

比如外部中斷來了,需要計次,那就變量++;串口中斷來了就把接收到的數據轉存起來;處理完緊急事情后,CPU回到原來程序運行的位置。
使用中斷系統,能極大地提高程序的效率,如果沒有中斷系統,為了防止外部中斷被忽略或者串口數據被覆蓋,那主程序就只能不斷地查詢是否有這些事件發生,不能在干其他的事情。
如果沒有定時器中斷,那主函數就只有靠Delay函數,才能實現定時的功能。有了中斷系統之后,主程序就可以放心執行其他事情,有中斷的時候再去處理。大大提升效率。

中斷優先級是根據程序設計的需求,自己設置的。緊急的事情優先級要設置地高一點,這樣可以更好地安排中斷事件,防止緊急的事件被別的中斷耽誤。

中斷嵌套也是為了照顧非常緊急的中斷的,能否進行中斷嵌套,由中斷優先級來決定。

在這里插入圖片描述
中斷來了,主程序都得立即暫停,程序由硬件電路自動跳轉到中斷程序中。
中斷執行前,進行現場保護
中斷執行后,會再還原現場。保證主程序即使被中斷了,回來后也能繼續運行。
用C語言編程,保護現場和還原現場并不需要我們操作(操作系統里面有中斷的概念),由編譯器做好。

C語言程序中中斷的執行流程:
一般中斷程序都是在一個子函數里面,這個函數不需要我們調用,當中斷來臨時,由硬件自動調用這個函數。

STM32中斷

在這里插入圖片描述
中斷通道就是中斷源的意思,68個是F1系列最多的中斷數量,對于一個具體的型號來說,可能沒有這么多中斷,所以這個數量看看就行,具體以對應型號的數據手冊為準。
STM32的中斷非常多,幾乎所有模塊都能申請中斷,

NVIC就是STM32中用來管理中斷,分配優先級的。

在這里插入圖片描述
灰色的部分是內核的中斷,
1.Reset復位中斷 當產生復位事件時,程序就會自動執行復位中斷函數,也就是復位后程序開始執行的位置
2.后面的各種灰色的中斷都是內核里面的,一般比較高深,看上去也難理解,但是這些中斷我們一般用不到,所以了解一下即可

不是灰色的部分的:就是STM32外設的中斷了。
比如:
WWDG 窗口看門狗,用來監測程序運行狀態的中斷,比如程序卡死了,沒有及時喂狗,窗口看門狗就會申請中斷,程序就會調到窗口看門狗的中斷程序里,在中斷程序里就可以進行一些錯誤檢查,看看出現什么問題了。
PVD 電源電壓監測,如果供電電壓不足,PVD電路就會申請中斷,在中斷里就知道,現在供電不足,是不是電池沒電了,要趕緊保存一下重要數據。
TAMPER 外設電路檢測到異常或者什么事件,需要提示CPU的時候,就可以申請中斷,讓程序調到對應的中斷函數里運行,用來處理異常或事件
EXTI0-EXTI4,EXTI9_5-EXTI15_10就是本節外部中斷對應的中斷資源。

中斷的地址的作用:因為程序中的中斷函數,它的地址由編譯器分配的,是不固定的。但是中斷的跳轉,由于硬件限制,只能跳轉到固定的地址執行程序,所以為了能讓硬件跳轉到一個不固定的中斷函數里面,就需要在內存中定義一個地址的列表。這個列表地址固定,中斷發生后,就跳到這個固定位置。然后有編譯器再加上一條跳轉到中斷函數的代碼,這樣中斷函數就可以跳轉到任意位置了。
中斷地址的列表:叫做中斷向量表,相當于中斷跳轉的一個跳板。(不過C語言編程不需要管這個中斷向量表,因為編譯器幫我們做好了)

在這里插入圖片描述
在這里插入圖片描述

NVIC嵌套中斷向量控制器基本結構

在這里插入圖片描述
在STM32中,NVIC用來統一分配中斷優先級和管理中斷的,NVIC是一個內核外設,是CPU的小助手。
STM32中斷非常多,如果把中斷都接到CPU上,那么CPU得引出很多線進行適配,設計上就很麻煩,并且很多中斷同時申請,或者中斷很多產生了擁堵,CPU就很難處理,畢竟CPU主要用來做運算的。所以中斷分配的任務就放到別的地方。所以NVIC就出現了。
NVIC有很多輸入口,有多少個中斷線路,都可以接過來。(這里斜杠上寫個n,意思是一個外設可能會同時占用多個中斷通道,所以有n條線),

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/43253.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43253.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43253.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法系列--鏈表問題

一.一些經驗總結 鏈表天然具有遞歸性質,單鏈表可以看做一個單叉樹,很多可以應用到二叉樹的題目也可以應用到鏈表的題目之中,下面是一個體現單鏈表遞歸性質很好的例子逆序打印鏈表的值 private void reversePrint(ListNode head) {if(head null) return;reversePrint(head.ne…

速盾:cdn節點作用?

CDN(Content Delivery Network)指的是內容分發網絡,是一種通過部署在全球不同地理位置的服務器節點來提供快速、高效的內容傳輸和分發的技術架構。CDN節點在網絡中的作用非常重要,下面就對其作用進行詳細解析。 提供高速內容傳輸&…

《算法筆記》總結No.6——貪心

一.簡單貪心 貪心法是求解一類最優化問題的方法,它總是考慮在當前狀態下局部最優(或較優)之后,來使全局的結果達到最優(或較優)的策略。顯然,如果采取較優而非最優的策略(最優策略可能不存在或是不易想到),得到的全局結果也無法是…

socketserver和WSGI服務端實現教程

Python socketserver 和 WSGI 服務端實現教程 在本文中,我們將詳細解析一個使用 socketserver 模塊實現的簡單 WSGI 服務器。該服務器能夠處理 HTTP 請求,支持 WSGI 應用,并正確處理響應頭和錯誤。 代碼概述 這段代碼定義了一個 run_wsgi …

【深入理解JVM】關于Object o = new Object()

1. 解釋一下對象的創建過程 “半初始化”狀態通常指的是對象在內存分配后、但在完全初始化之前的一種狀態。在Java中,雖然JVM的規范和設計努力避免對象處于這種不穩定的狀態,但在多線程環境下,由于指令重排序等并發問題,仍有可能…

Apache Spark詳解

目錄 性能優化 銀行業務案例: 步驟1:環境準備和數據加載 步驟2:數據探索和預處理 步驟3:特征工程 步驟4:數據轉換 步驟5:構建機器學習模型 步驟6:模型評估 步驟7:部署和監控…

Spring JdbcTemplate使用

maven引入Spring JDBC <dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>5.3.19</version></dependency> Spring配置中配置 <!-- DataSource配置 --><bean id"…

java代理簡單理解

一、什么是代理 舉例說明&#xff1a;當我想買一臺電腦&#xff0c;國內太貴了。委托好友A在國外幫忙買。 這個情節中我要實現的動作和好友實現的動作一樣&#xff0c;都是買電腦。好友幫我完成了這個動作&#xff0c;這就是代理。 類A和類B都實現一個interface接口C&#x…

【LeetCode刷題筆記】LeetCode.24.兩兩交換鏈表中的節點

創作不易&#xff0c;本篇文章如果幫助到了你&#xff0c;還請點贊 關注支持一下?>&#x16966;<)!! 主頁專欄有更多知識&#xff0c;如有疑問歡迎大家指正討論&#xff0c;共同進步&#xff01; 更多算法知識專欄&#xff1a;算法分析&#x1f525; 給大家跳段街舞感謝…

新手小白的pytorch學習第一彈-------張量

1 導入pytorch包 import torch2 創建張量&#xff08;tensor&#xff09; scalar標量 scalar torch.tensor(7) scalartensor(7)scalar.ndim查看scalar的維度&#xff0c;因為scalar是標量&#xff0c;所以維度為0 0scalar.shapetorch.Size([])torch.item()7vector&#xf…

Apache功能配置:訪問控制、日志分割; 部署AWStats日志分析工具

目錄 保持連接 訪問控制 只允許指定ip訪問 拒絕指定主機其他正常訪問 用戶授權 日志格式 日志分割 操作步驟 使用第三方工具cronolog分割日志 AWStats日志分析 操作步驟 訪問AwStats分析系統 保持連接 Apache通過設置配置文件httpd-default.conf中相關的連接保持參…

基于Java的科大訊飛大模型API調用實現

寫在前面&#xff1a;因為現在自己實習的公司新拓展的一個業務是結合AI的低代碼平臺&#xff0c;我負責后端的開發&#xff0c;之前一直都是直接使用gpt或者文心一言等ui界面來直接使用大模型&#xff0c;從來沒有自己調接口過&#xff0c;所以本文記錄一下自己第一次使用大模型…

源代碼防泄漏的正確方法

為了保護公司的源代碼不被泄露&#xff0c;IT企業可以采取一系列嚴格的安全措施。這些措施涵蓋技術手段、管理策略和操作流程&#xff0c;形成多層次的防護體系做到源代碼防泄漏工作。 技術手段 1、源代碼加密&#xff1a; 采用高級加密標準&#xff08;AES&#xff09;或其他…

【QT】QComboBox允許輸入查詢,且不區分大小寫

目錄 0.簡介 1.環境 2.詳細代碼 3.參考 0.簡介 項目需求&#xff0c;原本有一個下拉框&#xff0c;但是條目太多&#xff0c;不好搜索&#xff0c;所以用戶要求可以輸入查找 修改前 &#xff1a; 修改后&#xff1a; 1.環境 windows11 vs-code qt5.12 2.詳細代碼 QComboB…

中小企業和數智化的距離,只差一塊華為IdeaHub

每次談及中小企業數智化的話題&#xff0c;被提到最多的總是“三不”難題&#xff0c;即不想轉、不敢轉、不會轉。 為了破解這一困局&#xff0c;政府多次在工作報告中提到“深入開展中小企業數字化賦能專項行動”&#xff0c;并在各地為中小企業創新提供政策支持。此外&#…

Android --- Kotlin學習之路:基礎語法學習筆記

------>可讀可寫變量 var name: String "Hello World";------>只讀變量 val name: String "Hello World"------>類型推斷 val name: String "Hello World" 可以寫成 val name "Hello World"------>基本數據類型 1…

MD5加密和注冊頁面的編寫

MD5加密 1.導入包 npm install --save ts-md5 2.使用方式 import { Md5 } from ts-md5; //md5加密后的密碼 const md5PwdMd5.hashStr("123456").toUpperCase(); 遇見的問題及用到的技術 注冊頁面 register.vue代碼 <template><div class"wappe…

從零開始學習嵌入式----Linux 命令行,常用命令速記指南

目錄 一、文件操作 二、文本操作 三、系統管理 四、網絡操作 五、其他常用命令 六、學習建議 在 Linux 世界里&#xff0c;命令行就像一把瑞士軍刀&#xff0c;掌握了它&#xff0c;你就能游刃有余地操控整個系統。但面對茫茫多的命令&#xff0c;新手往往會感到無所適從…

關于Python中的字典你所不知道的七個技巧

01 引言 Python是我最喜歡的編程語言之一&#xff0c;它向來以其簡單性、多功能性和可讀性而聞名。 字典作為Python中最常使用的數據類型&#xff0c;大家幾乎每個人都或多或少在項目中使用過字典&#xff0c;但是字典里有一些潛在的技巧可能并不是每個同學都會用到。 在本文…

相同含義但不同類型字段作為join條件時注意事項

假設表A和表B中都有表示學號的stu_id字段&#xff0c;但該字段在表A和表B中類型分別為bigint和string。當直接通過該字段進行join時&#xff0c;一般情況下可以得到我們預期的結果。 select a.stu_id from a as r join b as l on r.stu_id l.stu_id 但是如果學號長度較長的…