rs485接收中斷函式使能 關於STM32中斷知識

2021-10-14 14:14:34 字數 3765 閱讀 7519

程式正在執行,突然有外部訊號或者內部訊號打斷正在執行的程式,需要執行該事件,

執行完後再回到當前打斷的位置繼續往下執行程式的過程稱為中斷。

例如:正在寫** -- 程式正在執行

繼續寫** -- 繼續執行** --> 中斷返回

打斷正在執行程式的事件稱為中斷源。

while(!(usart1->sr & (1 << 5))); rec = usart1->dr;

可以節省cpu的記憶體。

中斷滿足條件:快進快出

nvic:全稱:巢狀向量中斷控制器。 它就是乙個控制器,控制什麼?控制中斷。

已經內嵌在cortex-m核心中。

nvic的中斷架構 -- 《m3-m4權威指南 第7章》

一共可以支援256個中斷,其中16個內部中斷,240個外部中斷。 《權威指南英文第7章》

分類:人為優先順序 和 自然優先順序

人為優先順序 : 搶占優先順序 和 響應優先順序

搶占優先順序: 不同等級間可以巢狀,高優先順序可以搶占低優先順序,優先順序等級編號越小優先順序高越高。

響應優先順序: 不同等級間不可以巢狀,響應高優先順序的事件,優先順序等級編號越小優先順序高越高。

自然優先順序:nvic內部給所有中斷分配的中斷序列號。

當搶占優先順序和響應優先順序相同的中斷源,同時發生了中斷,

cpu優先執行自然優先順序高的中斷。中斷等級數字越小,優先順序越高。

ram公司利用8個位來管理人為優先順序,用3個位管理優先順序等級編碼。

第0組 用8個位管理響應優先順序,等級範圍:0~255, 等級編碼:0x07

第1組 用7個位管理響應優先順序,等級範圍:0~127,

用1個位管理搶占優先順序,等級範圍:0~1, 等級編碼:0x06

第2組 用6個位管理響應優先順序,等級範圍:0~63,

用2個位管理搶占優先順序,等級範圍:0~3, 等級編碼:0x05

第3組 用5個位管理響應優先順序,等級範圍:0~31,

用3個位管理搶占優先順序,等級範圍:0~7, 等級編碼:0x04

第4組 用4個位管理響應優先順序,等級範圍:0~15,

用4個位管理搶占優先順序,等級範圍:0~15, 等級編碼:0x03

第5組 用3個位管理響應優先順序,等級範圍:0~7,

用5個位管理搶占優先順序,等級範圍:0~31, 等級編碼:0x02

第6組 用2個位管理響應優先順序,等級範圍:0~3,

用6個位管理搶占優先順序,等級範圍:0~63, 等級編碼:0x01

第7組 用1個位管理響應優先順序,等級範圍:0~1,

用7個位管理搶占優先順序,等級範圍:0~127, 等級編碼:0x00

注意:conter-m4最大支援256個中斷入口,但是最大只支援128級中斷巢狀。

並且乙個工程程式中只能有一種優先順序分組,確定了分組,實際上就是確定了各個優先順序的等級數量。

1、2stm32f4xx中斷介紹

st公司利用4個位來管理人為優先順序,用3個位管理優先順序等級編碼

nxp公司利用5個位來管理人為優先順序,用3個位管理優先順序等級編碼

第0組 用4個位管理響應優先順序,等級範圍:0~15, 等級編碼:0x07

第1組 用3個位管理響應優先順序,等級範圍:0~7,

用1個位管理搶占優先順序,等級範圍:0~1, 等級編碼:0x06

第2組 用2個位管理響應優先順序,等級範圍:0~3,

用2個位管理搶占優先順序,等級範圍:0~3, 等級編碼:0x05

第3組 用1個位管理響應優先順序,等級範圍:0~1,

用3個位管理搶占優先順序,等級範圍:0~7, 等級編碼:0x04

第4組 用4個位管理搶占優先順序,等級範圍:0~15,等級編碼:0x03

在core_cm4.h的檔案中找對應的庫函式

1. void nvic_setprioritygrouping(uint32_t prioritygroup) -- 在1435行

1)函式功能:設定優先順序分組

2)形參:優先順序編碼

例如:設定優先順序分組為第2組

nvic_setprioritygrouping(0x05); //nvic_setprioritygrouping(7-2);

2.uint32_t nvic_encodepriority (uint32_t prioritygroup, uint32_t preemptpriority, uint32_t subpriority) --- 1592行

1)函式功能:設定具體的等級範圍編碼

2)形參:prioritygroup:優先順序編碼

preemptpriority:搶占優先順序等級編碼

subpriority:響應優先順序編碼

3)返回值:具體的等級編碼

3.void nvic_setpriority(irqn_type irqn, uint32_t priority) -- 1550行

1)函式功能:設定中斷源優先順序

2)形參:irqn:中斷源的優先順序 -- stm32f4xx.h 中查詢

priority :具體的優先順序等級編碼

4.void nvic_enableirq(irqn_type irqn) --- 1467行

1)函式功能:使能具體的中斷源

2)形參:具體的中斷源

5.void nvic_disableirq(irqn_type irqn) -- 1480行

1)函式功能:禁止具體中斷源

2)形參:具體的中斷源

中斷需要執行的事件。

注意:遵循原則:快進快出 flag=1 if(flag == 1)

void 中斷服務函式名(void)

1. 清標誌位

2. 中斷需要執行的事件

注:中斷服務函式名在 startup_stm32f40_41***.s檔案中找

1. 中斷源初始化 -- 在沒有用中斷時怎麼初始化就怎麼初始化

2. 使能對應的中斷 -- 接收中斷

3. 配置nvic -- 例如第2組

uint32_t priority;

1) nvic_setprioritygrouping(7 - 2);

2) priority = nvic_encodepriority (7-2, 1 , 2) ;

3)nvic_setpriority(usart1_irqn,priority);

4) nvic_enableirq(usart1_irqn) ;

4. 使能串列埠

5. 編寫中斷服務函式

1. 串列埠助手傳送資料,mcu接收資料,mcu接收到的資料再返回給串列埠助手

2.在串列埠助手中傳送字串,muc接收字串

如果傳送"led_on#", mcu接收後點亮所有led燈,

如果傳送"led_off#", 關閉所有led燈,

如果傳送錯誤,則返回」指令錯誤,請重新傳送」

如果錯誤次數超過3次,則返回「錯誤超過3次,請報警!」,響蜂鳴器

STM32中斷的使能

lib v3.0.0 的標頭檔案misc.c的void nvic init nvic inittypedef nvic initstruct 說 enable the selected irq channels nvic iser nvic initstruct nvic irqchannel 0x...

STM32 中斷相關函式和型別

中斷相關 主要分布在韌體庫的stm32f4xx exti.h和stm32f4xx exti.c檔案中。exti模式列舉 brief exti mode enumeration typedef enum extimode typedef define is exti mode mode mode ex...

STM32 中斷程式總結 庫函式

一.配置中斷優先順序函式 void exti nvic config void 二.gpio初始化函式 需要包含stm32f10x gpio.h標頭檔案 1.gpio初始化函式程式 void gpio configuration void 2.gpio mode的四種輸入 四種輸出模式 1 輸入 g...