<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > STM32裸機開(kāi)發(fā)—外部中斷

STM32裸機開(kāi)發(fā)—外部中斷

作者: 時(shí)間:2016-11-20 來(lái)源:網(wǎng)絡(luò ) 收藏
a. 初始化IO口作為輸入
這一步需要設置你要作為外部中斷輸入的IO口的狀態(tài),可以設置為上拉/下拉輸入,也可以設置為浮空輸入,但浮空的時(shí)候外部硬件一定要上拉或下拉。否則可能導致中斷不停地被觸發(fā)。在干擾較大的地方,就算使用了上拉/下拉,也建議在外部硬件上設置上拉/下拉,這樣可以在一定程度上防止外部干擾帶來(lái)的影響。
*RCC_APB2ENR=0x00000019;//打開(kāi)portb和portc的時(shí)鐘和復用時(shí)鐘
*PORTA_CRL=0x44444844;//設置PA2口為上拉/下拉輸入模式
由于還需要驅動(dòng)液晶屏所以同時(shí)打開(kāi)了PORTB和PORTC的時(shí)鐘。
b. 開(kāi)啟IO口復用時(shí)鐘,設置IO口與中斷線(xiàn)的映射關(guān)系
STM32的IO口與中斷線(xiàn)的對應關(guān)系需要配置外部中斷配置寄存器EXTICR,這樣我們要先開(kāi)啟復用時(shí)鐘,然后配置IO口與中斷線(xiàn)的對應關(guān)系。才能把外部中斷與中斷線(xiàn)連接起來(lái)。從圖中看到一共有19條中斷線(xiàn)(EXTIx),幾號端口就是幾號中斷線(xiàn)。這里PA2顯然就是EXTI2線(xiàn)。
*AFIO_EXTICR1=0x00000000;//打開(kāi)PA2口的復用設置
c. 開(kāi)啟與該IO口相對的線(xiàn)上中斷事件,設置觸發(fā)條件
這一步,我們要配置中斷產(chǎn)生的條件,STM32可以配置成上升沿觸發(fā),下降沿觸發(fā),或者任意電平變化觸發(fā),但是不能配置成高電平和低電平觸發(fā)。這里要根據自己的實(shí)際情況來(lái)配置。同時(shí)要開(kāi)啟中斷線(xiàn)上的中斷,這里需要注意的是,如果使用外部中斷,并設置該中斷的EMR位的話(huà),會(huì )引起軟件仿真上不能轉到中斷,而硬件上是可以的。而不設置EMR,軟件仿真就可以進(jìn)入中斷服務(wù)函數,并且硬件上也是可以的。建議不要配置EMR位。從圖中可以看到,要進(jìn)入NVIC interrupt controller必須要設置中斷屏蔽寄存器。掛起請求寄存器從目前的理解來(lái)看應該是在硬件中斷的時(shí)候接到中斷事件就自動(dòng)置1,中斷被處理了就置0,可以通過(guò)寫(xiě)該寄存器來(lái)實(shí)現軟中斷,故在這里沒(méi)有進(jìn)行設置。
*EXTI_IMR=0x00000004;//打開(kāi)PA2的中斷屏蔽
*EXTI_FTSR=0x00000004;//設置為下降沿觸發(fā)

d. 配置中斷分組(NVIC),并使能中斷
這一步,我們就是配置中斷的分組,以及使能,對于STM32來(lái)說(shuō),只有配置了NVIC的設置,并開(kāi)啟才能被執行,否則是不會(huì )執行到中斷服務(wù)函數里面去的。對于裸機開(kāi)發(fā)來(lái)說(shuō),ST半導體的STM32參考手冊中沒(méi)有標明NVIC寄存器的地址,如下圖,直接標成了reserved。事實(shí)上NVIC寄存器已經(jīng)是CM3的私房外設了。通過(guò)看論壇上的討論知道了在A(yíng)RM發(fā)布的Cortex-M3 Technical Reference Manual (r2p0)中能找到。NVIC寄存器組主要有Interrupt Set-Enable Registers,Interrupt Clear-Enable Registers,Interrupt Set-Pending Register,Interrupt Clear-Pending Register,Active Bit Register,Interrupt Priority Registers。這里重點(diǎn)要關(guān)心的是Interrupt Set-Enable Registers,因為它是用來(lái)設置中斷通道使能的,不設置的話(huà)中斷服務(wù)函數不會(huì )響應。它的地址是0xE000E100。EXTI2的中斷向量號為8(查詢(xún)中斷向量表),所以代碼如下:
*NVIC_ISER=0x00000100;//打開(kāi)EXTI線(xiàn)2中斷


e. 寫(xiě)中斷服務(wù)函數
舉個(gè)例子:
void EXTI2_IRQHandler(void)
{
drawwin8();
}
中斷服務(wù)函數的格式大概就是 void XXXX(中斷名稱(chēng))_IRQHandler()。中斷名稱(chēng)直接查手冊上的中斷向量表。



評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>