在最近的一個項目中,用了多個外部中斷線,剛開始并沒有注意外部中斷的個數(shù),看資料認(rèn)為所有 10 口都可以配置為中斷,然后原理圖就直接連接 6 根外部中斷,后來發(fā)現(xiàn),PA0、PB0、PC0 這些共用一個外部中斷線,注意是共用,根本就不能同時存在,同一時間只能有一個中斷使用這個中斷線,初始化的時候,誰是最后初始化的,那么這根中斷線就分配給了誰。希望大家今后不要出現(xiàn)我這種錯誤。
這是我的引腳分配:但最終有效的中斷的是 BUTT3、BUTT4、BUTT5,而 BUTT1、BUTT2 中斷無效。
以下是資料截圖摘自《N32L40x 系列于 基于 32 位 位 ARM? Cortex?-M4F 微控制器用戶手冊 V2.0》,后經(jīng)查證 STM32 系列也是同樣的問題。
EXT10-4 中斷是這樣的, 每個中斷有一個外部中斷線
EXT19_5 和 EXT110_15 中斷也是那樣,只不過是共用的中斷函數(shù),而不是共用一個中斷線,這可以中斷之后查詢是哪根線觸發(fā)了。
當(dāng)然如果工程師明確知道 PA0 和 PB0 不會同時觸發(fā),并目觸發(fā)有相互依賴關(guān)系,可以通過分時設(shè)置 PA0 和 PB0 的外部中斷功能。但是在大多數(shù)情況下,外部中斷的觸發(fā)都是隨機的,那么在設(shè)計原理圖的時候就要考慮到這種情況,把用到的外部中斷管腳設(shè)置到后綴不同的管腳上,如 PA0,PA1,PB3,PC8,..PD12,PF16,在一個工程中最多能使用 16 個外部中斷,并且每個管腳的后綴不同。如果設(shè)計電路板沒有考慮到這種情況,則需要根據(jù)實際情況把觸發(fā)頻繁的設(shè)置為外部中斷,不頻繁的通過檢測管腳電平變化來判斷是否有觸發(fā)。
關(guān)注公眾號,掃碼加入嵌入式交流群: