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 等待模式 時鐘關閉 外設可用。通過中斷 外部中斷 ...