STM32_5(中斷)

中斷系統

  • 中斷:在主程序運行過程中,出現了特定的中斷觸發條件(中斷源),使得CPU暫停當前正在運行的程序,轉而去處理中斷程序,處理完成后又返回原來被暫停的位置繼續運行
  • 中斷優先級:當有多個中斷源同時申請中斷時,CPU會根據中斷源的輕重緩急進行裁決,優先響應更加緊急的中斷源
  • 中斷嵌套:當一個中斷程序正在運行時,又有新的更高優先級的中斷源申請中斷,CPU再次暫停當前中斷程序,轉而去處理新的中斷程序,處理完成后依次進行返回

中斷執行流程

?????

?????

NVIC基本結構

CPU相當于一個醫生,NVIC相當于叫號系統,EXTI、TIM、ADC、USART相當于病人,看這里面誰的更緊急誰就優先級越小。

NVIC優先級分組

響應優先級:上個病人在看病,這個病人看病完了之后,緊急的病人即使后來的,也會最先進去看病,插隊的優先級。

搶占優先級:如果這個病人更加緊急,并且此時已經有人在看病,那么就會把看病的人放在一邊,先讓更緊急的病人看病,看完之后再看放在一邊的病人。

EXTI簡介

  • EXTI(Extern Interrupt)外部中斷
  • EXTI可以監測指定GPIO口的電平信號,當其指定的GPIO口產生電平變化時,EXTI將立即向NVIC發出中斷申請,經過NVIC裁決后即可中斷CPU主程序,使CPU執行EXTI對應的中斷程序
  • 支持的觸發方式:上升沿/下降沿/雙邊沿/軟件觸發
  • 支持的GPIO口:所有GPIO口,但相同的Pin不能同時觸發中斷
  • 通道數:16個GPIO_Pin,外加PVD輸出、RTC鬧鐘、USB喚醒、以太網喚醒
  • 觸發響應方式:中斷響應/事件響應

EXTI基本結構

AFIO復用IO口

  • AFIO主要用于引腳復用功能的選擇和重定義
  • 在STM32中,AFIO主要完成兩個任務:復用功能引腳重映射、中斷引腳選擇

EXTI框圖

旋轉編碼器介紹

  • 旋轉編碼器:用來測量位置、速度或旋轉方向的裝置,當其旋轉軸旋轉時,其輸出端可以輸出與旋轉速度和方向對應的方波信號,讀取方波信號的頻率和相位信息即可得知旋轉軸的速度和方向
  • 類型:機械觸點式/霍爾傳感器式/光柵式

建議

  盡量別在中斷函數里調用復雜函數,可以執行一個標志位,在主函數或其他函數里執行其他代碼。

代碼部分

配置流程

1、開啟時鐘;

2、開啟AFIO時鐘;

3、GPIO配置;

4、選擇用作EXTI線路的GPIO引腳;

5、EXTI配置;

6、配置NVIC優先級分組;

7、NVIC配置;

8、找到EXTI函數并在里面寫用戶代碼(在startup_stm32f10x_md.s中)。

中斷配置

 1     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);           // 1.開啟GPIOB時鐘2     RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);            // 2.開啟AFIO時鐘3 4     GPIO_InitTypeDef GPIO_InitStructure;                            // 3.GPIO配置5     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;6     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;7     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;8     GPIO_Init(GPIOB, &GPIO_InitStructure);9     
10     GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);    // 4.選擇用作EXTI線路的GPIO引腳
11 
12     EXTI_InitTypeDef EXTI_InitStructure;                            // 5.EXTI配置
13     EXTI_InitStructure.EXTI_Line = EXTI_Line14;
14     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
15     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
16     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
17     EXTI_Init(&EXTI_InitStructure);
18 
19     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);                 // 6.配置NVIC優先級分組
20 
21     NVIC_InitTypeDef NVIC_InitSturcture;                            // 7.NVIC配置
22     NVIC_InitSturcture.NVIC_IRQChannel = EXTI15_10_IRQn;
23     NVIC_InitSturcture.NVIC_IRQChannelCmd = ENABLE;
24     NVIC_InitSturcture.NVIC_IRQChannelPreemptionPriority = 1;
25     NVIC_InitSturcture.NVIC_IRQChannelSubPriority = 1;
26     NVIC_Init(&NVIC_InitSturcture);

 1 void EXTI15_10_IRQHandler(void)                                     // 8.找到EXTI函數并在里面寫用戶代碼(函數在Startup_stm32f10x_md.s)2 {3     if (EXTI_GetITStatus(EXTI_Line14) == SET)4     {  5         if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)6         {7             CountSensor_Count++;8         } 9         EXTI_ClearITPendingBit(EXTI_Line14);
10     }
11 }

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

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

相關文章

如何用java的虛擬線程連接數據庫

我覺得這個很簡單 首先確保你idea支持jdk21. 然后把idea編譯成的目標字節碼設置為21版本的 然后編寫代碼。 創建虛擬線程的方式有: Runnable runnable () -> {System.out.println("Hello, world!"); };// 創建虛擬線程 Thread virtualThread Thre…

從0開始學習JavaScript--JavaScript迭代器

JavaScript迭代器(Iterator)是一種強大的編程工具,它提供了一種統一的方式來遍歷不同數據結構中的元素。本文將深入探討JavaScript迭代器的基本概念、用法,并通過豐富的示例代碼展示其在實際應用中的靈活性和強大功能。 迭代器的…

【計算思維】藍橋杯STEMA 科技素養考試真題及解析 2

1、蘭蘭有一些數字卡片,從 1 到 100 的數字都有,她拿出幾張數字卡片按照一定順序擺放。想一想,第 5 張卡片應該是 A、11 B、12 C、13 D、14 答案:C 2、按照下圖的規律,陰影部分應該填 A、 B、 C、 D、 答案&am…

spark如何配置checkpoint

1、sparkSession配置checkpoint的方法 # step1: 在conf中添加checkpoint的保存地址 val spark SparkSession.builder.appName(JobRegister.getJobName("xxx", s"xxxx")).config("hive.exec.dynamic.partition", "true").config(&quo…

2023亞太杯數學建模競賽(亞太賽)選題建議+初步分析

如下為C君的2023亞太杯數學建模競賽&#xff08;亞太賽&#xff09;選題建議初步分析&#xff1a; 提示&#xff1a;DS C君認為的難度&#xff1a;C<A<B&#xff0c;開放度&#xff1a;A<B<C。 以下為ABC題選題建議及初步分析&#xff1a; A題&#xff1a;Image…

openssl+ SM2 + linux 簽名校驗開發實例(C++)

文章目錄 一、SM2校驗理論基礎二、SM2簽名校驗開發實例&#xff08;C&#xff09; 一、SM2校驗理論基礎 SM2的校驗過程是使用橢圓曲線上的公鑰驗證簽名的有效性。以下是SM2校驗的理論基礎相關知識點&#xff1a; SM2簽名算法&#xff1a; SM2的校驗基于橢圓曲線數字簽名算法&a…

Vue批量全局處理undefined和null轉為““ 空字符串

我們在處理后臺返回的信息&#xff0c;有的時候返回的是undefined或者null&#xff0c;這種字符串容易引起用戶的誤解&#xff0c;所以需要我們把這些字符串處理一下。 如果每個頁面都單獨處理&#xff0c;那么頁面會很冗余&#xff0c;并且后期如果有修改容易遺漏&#xff0c…

SQL面試題挑戰:找出使用相同ip的用戶

問題&#xff1a;現在有一張用戶登陸日志表&#xff0c;該表包括user_id,ip,log_time三個字段&#xff0c;現在需要找出共同使用ip數量超過3個(含)的所有用戶對。比如下面的示例數據&#xff0c;101和102用戶共同使用的ip為4個&#xff0c;101和103用戶共同使用的ip為3個&#…

二十二、數組(4)

本章概要 隨機生成泛型和基本數組 隨機生成 我們可以按照 Count.java 的結構創建一個生成隨機值的工具&#xff1a; Rand.java import java.util.*; import java.util.function.*;import static com.example.test.ConvertTo.primitive;public interface Rand {int MOD 10_0…

5-1 Java 網絡編程

第1關&#xff1a;URL類與InetAddress類 任務描述 本關任務&#xff1a;了解網絡編程基礎知識。 相關知識 為了完成本關任務&#xff0c;你需要掌握&#xff1a;1.URL&#xff1b;2.InetAddress。 URL 統一資源定位符&#xff08;Uniform Resource Locator&#xff0c;縮…

C++單調向量算法:得到山形數組的最少刪除次數

本題的其它解法 C二分算法&#xff1a;得到山形數組的最少刪除次數 題目 我們定義 arr 是 山形數組 當且僅當它滿足&#xff1a; arr.length > 3 存在某個下標 i &#xff08;從 0 開始&#xff09; 滿足 0 < i < arr.length - 1 且&#xff1a; arr[0] < arr[1…

DevOps 事后分析

眾所周知&#xff0c;系統的變化會帶來不穩定&#xff0c;進而引發事故。遷移到 DevOps 使世界各地的組織能夠以更小的增量和更高的頻率進行發布。這降低了特定版本中失敗的風險。另一方面&#xff0c;增加發布數量并不一定會減少待命團隊需要響應的事件數量。 事件響應團隊的…

2023.11.22 homework

七年級數學 五年級數學 也不知道可以教到幾年級&#xff0c;估計很快就教不動了。人生啊。

讀像火箭科學家一樣思考筆記06_初學者之心

1. 專業化是目前流行的趨勢 1.1. 通才&#xff08;generalist&#xff09;是指博而不精之人 1.2. 懂得的手藝越多&#xff0c;反而會家徒四壁 1.2.1. 希臘諺語 1.3. 這種態度代價很大&#xff0c;它阻斷了不同學科思想的交融 2. 組合游戲 2.1. 某個行業的變革可能始于另一…

Pycharm的程序調試

有如下代碼需要進行調試&#xff1a; i 1 while i < 10:print(i)步驟一&#xff1a;設置斷點 步驟二&#xff1a;進入調試視圖 方式1&#xff1a;右鍵單擊編輯區&#xff1a;點擊’Debug模塊名’ ? 方式2&#xff1a;ShiftF9 ? 方式3&#xff1a;單機工具欄上的調試按鈕…

Django報錯:RuntimeError at /home/ 解決辦法

錯誤提示&#xff1a; RuntimeError at /home/ Model class django.contrib.contenttypes.models.ContentType doesnt declare an explicit app_label and isnt in an application in INSTALLED_APPS. 原因剖析&#xff1a; 博主在使用pycharm創建Django項目的時候&#xff0…

vector的簡單模擬實現_C++

目錄 一、vector的數據結構 二、vector的構造 三、vector的增刪查改及空間管理 四、全部代碼 一、vector的數據結構 vector以線性連續空間為基礎來定義數據結構以及擴展功能。vector的兩個迭代器&#xff0c;分別是start和finish&#xff0c;分別指向配置得來的已被使用的空…

網絡滲透測試(wireshark 抓取QQ圖片)

1.打開wireshark 這里我用的wifi連接 所以點開wifi就好 打開wifi之后就開始在本機上進行抓包了 我們先給我們的QQ發送一張圖片&#xff0c;用自己的手機發送給電腦 然后點擊左上角的正方形&#xff0c;停止捕獲抓包 QQ的關鍵詞是oicq&#xff0c;所以我們直接找 打開oicq …

十二、h.264解碼

前言 測試環境&#xff1a; ffmpeg的4.3.2自行編譯版本windows環境qt5.12 完整代碼&#xff1a; H264DncodeThread.h #ifndef H264DNCODETHREAD_H #define H264DNCODETHREAD_H#include <QObject> #include <QThread>extern "C" { #include <libavu…

【論文閱讀筆記】Emu Edit: Precise Image Editing via Recognition and Generation Tasks

【論文閱讀筆記】Emu Edit: Precise Image Editing via Recognition and Generation Tasks 論文閱讀筆記論文信息摘要背景方法結果額外 關鍵發現作者動機相關工作1. 使用輸入和編輯圖像的對齊和詳細描述來執行特定的編輯2. 另一類圖像編輯模型采用輸入掩碼作為附加輸入 。3. 為…