cm3裡面有很多中斷,有更高的優先順序層數。但是stm32f103被閹割了好多。
cm3核心支援256個中斷,其中包含了16個核心中斷和240個外部中斷,並且具有256級的可程式設計中斷設定。
stm32並沒有使用cm3核心的全部東西,而是只用了它的一部分。
stm32有84個中斷,包括16個核心中斷和68個可遮蔽中斷,具有16級可程式設計的中斷優先順序。
stm32f103系列上面,又只有60個可遮蔽中斷(在107系列才有68個)
先分組。
在暫存器scb->aircr中。
庫函式的話再misc中。
有五個組別。
ip bit[7:4]有四位是恆定的,不過你選的是哪乙個組別,都有24種區別。16剛好對應上面16級可程式設計的中斷優先順序。
分組函式**
在misc檔案裡
void
nvic_prioritygroupconfig
(uint32_t nvic_prioritygroup)
;
#define nvic_prioritygroup_0 ((uint32_t)0x700)
/*!< 0 bits for pre-emption priority
4 bits for subpriority */
#define nvic_prioritygroup_1 ((uint32_t)0x600)
/*!< 1 bits for pre-emption priority
3 bits for subpriority */
#define nvic_prioritygroup_2 ((uint32_t)0x500)
/*!< 2 bits for pre-emption priority
2 bits for subpriority */
#define nvic_prioritygroup_3 ((uint32_t)0x400)
/*!< 3 bits for pre-emption priority
1 bits for subpriority */
#define nvic_prioritygroup_4 ((uint32_t)0x300)
/*!< 4 bits for pre-emption priority
0 bits for subpriority */
分組設定好之後,設定單個中斷的搶占優先順序和響應優先順序
紅框框裡圈出來的就是沒用到的。
中斷優先順序控制的暫存器組:ip[240]
全稱是:interrupt priority registers
240個8位暫存器,每個中斷使用乙個暫存器來確定優先順序。stm32f10x系列一共60個可遮蔽中斷,使用ip[59]~ip[0]。
每個ip暫存器的高4位用來設定搶占和響應優先順序(根據分組),低4位沒有用到。
(如果全部用到不就是256個優先順序)
中斷使能暫存器組:iser[8]
使能中斷。
32位暫存器,每個位控制乙個中斷的使能。stm32f10x只有60個可遮蔽中斷,所以只使用了其中的iser[0]和iser[1]。
iser[0]的bit0—bit31分別對應中斷0—31。iser[1]的bit0—27對應中斷32—59;
中斷清除使能暫存器組:icer[8]
clean enable
32位暫存器,每個位控制乙個中斷的失能。stm32f10x只有60個可遮蔽中斷,所以只使用了其中的icer[0]和icer[1]。
icer[0]的bit0-bit31分別對應中斷0-31。icer[1]的bit0-27對應中斷32-59;
配置方法跟iser一樣。
啊啊啊,為什麼我不能很掌握英文,要是我會英語我還是現在這個樣子嗎
初始化函式
還是在misc裡
第乙個引數在stm32f10x裡面找。
後面的引數你應該知道的很簡單。
完成後大概這個樣子
nvic_inittypedef nvic_initstructure;
nvic_initstructure.nvic_irqchannel = usart1_irqn;
//串列埠1中斷
nvic_initstructure.nvic_irqchannelpreemptionpriority=1;
// 搶占優先順序為1
nvic_initstructure.nvic_irqchannelsubpriority =2;
// 子優先順序位2
nvic_initstructure.nvic_irqchannelcmd = enable;
//irq通道使能
nvic_init
(&nvic_initstructure)
;//根據上面指定的引數初始化nvic暫存器
Pre藍橋杯嵌入式 STM32 學習索引
寫在前面 0 專欄鏈結 1 unkown device 2 移植lcd程式 建立工程 lcd程式分析 3 如何直接使用lcd例程來作為賽場使用的工程 學習目錄 1 led之點燈儀式 2 keyboard 主迴圈掃瞄 外部中斷 3 buzzer之將jtag功能相關引腳對映為普通io afio的使用 4...
STM32 藍橋杯嵌入式LCD顯示的問題
今天在做藍橋杯嵌入式的時候,遇到了乙個非常奇怪的問題,記錄一下 首先如下圖,在while迴圈中,寫了這麼一段led的顯示的程式,開發板的執行狀態達到了期望的執行狀態 然後,我將上面這一段程式寫成乙個函式,如下圖 此時執行程式,開發板的執行狀態和之前的結果就不一樣了,相當於程式卡死在某個地方一樣 最後...
STM32嵌入式開發學習筆記(一)
stm32cubemx是st官方推出的一種stm32設定和初始化c 的生成器。它可以直觀的選擇stm32微控制器 配置微控制器 自動處理引腳衝突 動態設定確定時鐘樹 動態確定引數設定的外圍和中介軟體模式和初始化。cubemx生成的 可以在keil iar gcc等程式設計軟體上面使用。簡單理解,就是...