久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 5665|回復: 0
打印 上一主題 下一主題
收起左側

STM32中斷解讀、串口中斷配置補充 NVIC詳解

[復制鏈接]
跳轉到指定樓層
樓主
ID:763998 發表于 2020-6-21 19:47 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
程序見上一次串口配置

中斷的概述

4.1.1 什么是中斷

              程序在正常運行過程中發生了內部或外部事件時,打斷了正在執行的程序,轉到外部或內部事件中去執行中斷對應的代。

4.1.2 中斷的意義

              高效的去執行程序,不會一直占用MCU的資源。

4.1.3 中斷入口

中斷服務函數:芯片中固定了一段地址空間用來存儲程序代碼。這一段程序代碼是中斷執行的程序代碼

中斷的入口:中斷服務函數名。

4.1.4 中斷的優先級

              中斷優先級:指的是給中斷編號,用來區分那件事件先執行,那件事情后執行。編號越小優先級越高

4.1.5 中斷的嵌套

              中斷嵌套:在執行中斷服務函數代碼時,又發生中斷事件打斷了正在執行的程序。

4.1.6 補充

main函數與中斷服務函數的關系?

main函數、與中斷服務函數屬于同一級別,不存在的一個說法是main函數調用中斷服務函數。所以中斷服務函數不需要什么函數聲明啊,調用函數等,只需要重寫實現中斷服務函數就好。

中斷的執行流程?

發生中斷事件,找到中斷入口,搶占MCU資源執行中斷服務函數中的代碼(此時main函數失去MCU的使用權),如圖1所示。

圖1 中斷執行流程

              斷點:正常執行的程序,發生中斷事件時,被打斷的位置。MCU去執行中斷服務函數中的代碼前,存儲的該斷點的現場信息,我們把這一過程稱為:壓棧(入棧)。在執行完中斷服務函數后,回到斷點,從棧中讀出之前存入的現場信息,繼續執行,我們稱這一過程為彈棧(出棧)。

中斷嵌套的執行流程?

圖2嵌套中斷流程

中斷嵌套如圖2,(簡單理解:中斷中又發生了中斷)。

4.2 異常與中斷

4.2.1 異常的理解

異常:簡單理解,屬于內核的中斷(系統內部)稱為異常,如圖3所示。

中斷:不屬于內核的中斷,稱為外部中斷,簡稱中斷,如圖4所示。

如無特殊說明,可以不分辨“中斷”與“異常”這兩個術語,可以互換使用。

圖3 系統異常(中斷)

圖4 外部中斷

由圖可知,編號0沒有進行任何定義,編號為 1-15 的對應系統異常,大于等于 16 的則全是外部中斷。

4.2.2 優先級

懸起:

先理解一個概念:“懸起”。如果發生了一個中斷但是它不能馬上反應,稱為懸起。

優先級:

優先級的概念:優先級解決的問題是同時發生多個中斷請求時,先響應誰,把誰懸起的問題。被懸起的中斷,等待高優先級響應完,它們才能有機會正常執行響應中斷請求。

優先級的特點:

數值越小,優先級越高。

              高優先可搶占低優先級。

搶占優先級與子優先級:

為了使搶占機能變得更可控,CM3 還把256級優先級按位分成高低兩段,分別稱為搶占優先級和子優先級。

圖5優先級分組

由圖5可知,有8(0到7)個分組位置。

從分組位置0可知,搶占優先級最多可以使用7位(高七位—>7、6、5、4、3、2、1)表示,27=128,能表示128個搶占優先級,即:最多支持128層中斷嵌套。進而得出子優先級至少有1位,21=2,能表示2個子優先級。

從分組位置7可知道可以沒有搶占優先級,但必須有子優先級。


NVIC 中有一個寄存器是“應用程序中斷及復位控制寄存器”,如圖6,它里面有一個位段名為“優先級組”。該位段的值對每一個優先級可配置的異常都有影響——把其優先級分為 2 個位段: MSB 所在的位段(左邊的)對應搶占優先級,而 LSB 所在的位段(右邊的) 對應子優先級。

圖6應用程序中斷及復位控制寄存器AIRCR

舉個例子,如果只使用 3 個位來表達優先級[7:5],并且優先級組的值是5,查表可知,如圖7、8所示,位7與位6表示搶占優先級。

圖7優先級分組值為5查表結果

圖83位表示優先級,分組值為5實際分組

4.2.3搶占優先級與子優先級

《1》高搶占優先級是可以打斷正在進行的低搶占優先級中斷的。

《2》搶占優先級相同的中斷,高子優先級不可以打斷低子優先級的中斷。

《3》 搶占優先級相同的中斷,當兩個中斷同時發生的情況下,哪個子優先級高,就先執行。

《4》如果兩個中斷的搶占優先級和響應優先級都是一樣的話,則看哪個中斷先發生就先執行;

4.2.4 補充

從需求理解中斷:

              中斷的發明是為了提高MCU執行程序的效率、讓程序變得更加靈活、高效。例如按鍵的掃描,需要MCU不斷的去輪詢,當程序的框架復雜,實現很多功能,代碼量多時,按鍵往往就沒那么靈敏了。可能有時按下有效果,有時按下沒效果。這時候就需要使用到中斷了,最簡單的做法把按鍵掃描函數,放在按鍵中斷服務函數中;當按鍵按下,發生中斷,找到中斷入口(按鍵中斷服務函數名),執行中斷服務函數中的按鍵掃描代碼,這使MCU執行程序的效率大大的提高。具體流程如下圖9。

圖9 按鍵外部中斷流程圖

              中斷如果只設計一個出來,那就不需要優先級的概念了,優先級就是為了解決多個中斷發送,先響應誰,把誰懸起的問題。而在執行中斷的過程中,又發生了中斷,稱為中斷嵌套;要弄清楚誰可以打斷誰,規律是什么,就需要明白搶占優先級與子優先級的,優先級分組的作用、意義。


4.3 NVIC

4.3.1 NVIC概述

              NVIC:嵌套向量中斷控制器,用于管理外部所有中斷

《1》NVIC 共支持 1 至 240 個外部中斷輸入(通常外部中斷寫作 IRQs)

《2》所有的中斷控制/狀態寄存器均可按字/半字/字節的方式訪問

《3》所有 NVIC 的中斷控制/狀態寄存器都只能在特權級下訪問。不過有一個例外——軟件觸發中斷寄存器可以在用戶級下訪問以產生軟件中斷

4.3.2 中斷的使能與除能

CM3中可以有240對使能位/除能位(SETENA 位/CLRENA 位),每個中斷擁有一對。

欲使能一個中斷,我們需要寫 1 到對應 SETENA 的位中;欲除能一個中斷,你需要寫 1 到對應的 CLRENA 位中。如果往它們中寫 0,則不會有任何效果。

這240個對子分布在8對32位寄存器中,SETENA0, SETENA1…SETENA7,最后一對沒有用完,如圖10所示。

圖10 8對32位寄存器

4.4 軟件設計

4.4.1 USART中斷配置流程

              1.使能模塊級中斷

              2.使能NVIC中斷(使能前,可設置優先級分組、搶占優先級、響應優先級)

總體配置框圖如下圖11。

圖11 USART中斷配置框圖

4.4.2 中斷初始化代碼解讀

打開模塊級中斷:

找到控制寄存器相應中斷位,配置寄存器。

圖12 USART中斷配置相應位

USART1->CR1 |=1<<5;// 讀取數據寄存器不為空

USART1->CR1 |=1<<4;// 檢測到空閑線路


打開NVIC中斷:

找到密鑰

設置分組

圖13 打開NVIC中斷流程

SCB->AIRCR = 0x05FA0500;//優先級分組5

找到串口1中斷向量號,設置優先級

圖14串口1中斷向量號

分組為5,7-5=2,說明搶占優先級可以有2(7、6)位配置。USART1的向量號位37,可寫入下面代碼。如圖

NVIC->IP[37] = 0xf0;              //串口1 搶占優先級3 響應優先級3

圖14優先級配置

圖15串口1中斷使能寄存器

NVIC->ISER[1] = 1<<(37-32);//串口1使能 中斷號37


4.4.3 串口1中斷服務函數

圖16串口1中斷寄存器配置與代碼

一、接收中斷分析:

  • 讀取數據寄存器,接收中斷標志位自動清零。
  • 對接收中斷標志位,寫入0,將該位進行清零操作。

rc_w0的理解:

圖17 rc_w0的理解:

所以,當發生接收中斷,你在讀數據寄存器時,接收中斷標志位,已經自動清零了,無需手動清零。

圖18接收代碼的深入理解:

空閑中斷分析:

空閑中斷,第一次空閑,發生中斷,空閑標志位置1,讀 USART_SR 寄存器,然后讀入 USART_DR 寄存器,可對空閑標志位清零。

注意:當有新的空閑時(相對于前一次),才會發生第二次空閑中斷,所以空閑中斷與接收中斷密不可分、相互聯系。接收就不會空閑,空閑就說明沒有數據發送過來,所以接收中斷常常與空閑中斷配合使用。


4.4.4 小結

中斷時STM32的靈魂,是一個難點、好用、靈活的東西,用好它能使能的程序變化很靈活、高效,用不好也可是你代碼性能變壞,本章只是簡單的介紹了STM32的中斷。NVIC是個內核的秘書,管理著全部的外部中斷,外部的模塊若想打開中斷,除了打開自己模塊的中斷開關,還有打NVIC對應的中斷開關。


以上的Word格式文檔51黑下載地址:

4.NVIC.docx (2.04 MB, 下載次數: 9)


評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 你懂的国产 | 久久久www成人免费无遮挡大片 | 日韩第一区 | 亚洲国产高清免费 | 亚洲一区二区在线 | 伊人网综合 | 亚洲福利 | 成人永久免费 | 国产69精品久久久久777 | 天天做日日做 | 久久久国产一区 | 午夜精品久久久 | 久久蜜桃av一区二区天堂 | 国内精品一区二区三区 | 日韩中文字幕一区 | 五月综合激情网 | 久久精品亚洲欧美日韩精品中文字幕 | 久草综合在线视频 | 色婷婷国产精品综合在线观看 | 日韩一级免费大片 | 日本电影韩国电影免费观看 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 日韩欧美亚洲 | 精品自拍视频在线观看 | 成人国产精品色哟哟 | 在线观看亚洲欧美 | 日本精品一区二区三区视频 | 日本韩国欧美在线观看 | 国产在线高清 | 日韩精品在线免费 | 久久国内| 成年人在线 | 亚洲日韩第一页 | 久久日韩精品一区二区三区 | 久久久综合 | 日韩成人av在线 | 久久久精品视频免费 | 爱草视频| 午夜视频一区二区 | 国产欧美精品一区 | 精品视频一区二区在线观看 |