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