STM8L外部中斷 為何 死迴圈 暫存器操作

2021-09-06 15:49:18 字數 2527 閱讀 6885

stm8l 系列微控制器是 st公司推出的低功耗微控制器,與stm8s系列相比功耗降低了很多,但內部結構也刪減了很多,使用時一定要仔細閱讀手冊。  這是第一次使用stm8,實現功能不是很複雜就沒想研究庫函式,準備直接控制暫存器操作,沒想到本人 因為中斷問題糾結了大半天。

在外部中斷中這一點很不同, stm8s自動清除外部中斷,而stm8l是需要軟體清除, 清除標誌位的暫存器根據設定而不同,下面有說明。

下面以stm8l外部中斷 pb1為例 說明外部中斷 暫存器操作

設定外部中斷有下面幾步:

第一步、

設定io口為中斷輸入 通過設定pb_ddr |= 0x00; 

pb_cr1 |= 0x02; pb_cr2 |= 0x02;

第二步、設定中斷觸發方式(00: falling edge and low level;

01: rising edge only;

10: falling edge only;

11: rising and falling edge)

第三步、更改中斷向量表 (stm8_interrupt_vector.c 檔案中)

第四步、編寫中斷處理函式,記住在函式裡面清除中斷

第一步、設定io口為中斷輸入

pb_ddr |= 0x00; // 輸入

pb_cr1 |= 0x02; // 0000_0010  

pb_cr2 |= 0x02; // 0000_0010   cr1與cr2結合確定為 上拉外部中斷輸入

第二步、設定中斷觸發方式 stm8l中 pb 與 pd 埠比較特殊可以有兩種觸發模式

exti_conf= 0x00;

這兩種觸發模式通過暫存器 exti_conf 進行設定 

第一種方式與a,c port一樣通過下面兩個暫存器設定觸發模式  設定 暫存器exti_conf[0]為0 ,表示port b[3:0] 使用第一種方式(我在此命名為普通方式)

exti_cr1 暫存器設定 port a, b, c and/or d external interrupts  的 3、2、1、0引腳

exti_cr2 暫存器設定 port a, b, c and/or d external interrupts  的 7、6、5、4引腳

第二種方式通過exti_cr3暫存器設定觸發模式exti_conf[0]為1 ,表示port b[3:0] 使用第二種方式(我在此命名為特殊方式)

exti_cr3 暫存器的 [3:2] 位 設定 埠d 的觸發模式 

exti_cr3 暫存器的 [1:0] 位 設定 埠b 的觸發模式

第三步、更改中斷向量表 

, /* irq9  */

pb1普通模式中斷向量號為9 ,其中 key_interrupt 可以根據實際命名, 只要和後面寫的中斷函式名一致就可以。

為什麼選擇為9 看下面的就知道了。

第四步、編寫中斷處理函式

@far @interrupt void key_interrupt(void) 

在這一步驟中有兩點 說明:

1、如果中斷執行函式不想在 stm8_interrupt_vector.c 檔案中編寫,需要在 stm8_interrupt_vector.c  檔案中新增這樣乙個函式

@far @interrupt void key_interrupt(void);

2、 exti_sr2 = 0x01; // 如果設定為 特殊模式  通過此暫存器 清除 中斷標誌位

exti_sr1 |=0x02; // 如果設定為 普通模式 通過此暫存器 清除 中斷標誌位

中斷向量等級:

通過下面的第乙個** 可以知道 如果我們用普通中斷模式 埠b1的中斷 屬於 exti1 (如果是pb2 屬於exti2),  特殊模式 埠b的中斷屬於 extib and extid,

知道這點  後我們結合手冊中的中斷向量 表就知道 我們應該在哪個位置寫中斷 入口函式名了。

希望可以對 大家有幫助 --------  foreverlongo

STM8L外部中斷 為何 死迴圈 暫存器操作

stm8l 系列微控制器是 st公司推出的低功耗微控制器,與stm8s系列相比功耗降低了很多,但內部結構也刪減了很多,使用時一定要仔細閱讀手冊。這是第一次使用stm8,實現功能不是很複雜就沒想研究庫函式,準備直接控制暫存器操作,沒想到本人 因為中斷問題糾結了大半天。在外部中斷中這一點很不同,stm8...

stm8l051的外部中斷

stm8l051,如果開啟全域性中斷後再去設定外部中斷,在 情況下觀察暫存器沒有被設定,即使直接向中斷控制暫存器寫值也無效。關閉總中斷後,再去設定相應的外部中斷,則中斷相關暫存器設定成功,程式執行正常。如下 disableinterrupts exti deinit exti setpinsensi...

STM8L之低功耗

1 stm8l有幾個模式?a.非低功耗模式1個,run mode 執行模式 b.低功耗模式 3個 wait 等待模式 active halt 活躍停機模式 halt 停機模式 2 stm8l低功耗的3個模式有什麼區別?簡單地來說,就是 a.wait 等待模式 時鐘關閉 外設可用。通過中斷 外部中斷 ...