娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年01月31日(星期五)

2019年01月31日 | 【stm32f103】stm32 外部中斷(寄存器版)

發布者:MoonlightStar 來源: eefocus關鍵字:stm32  外部中斷  寄存器版 手機看文章 掃描二維碼
隨時隨地手機看文章

中斷分類                                                                                                                                         

STM32的EXTI控制器支持19 個外部中斷/ 事件請求。每個中斷設有狀態位,每個中斷/ 事件都有獨立的觸發和屏蔽設置。

STM32的19個外部中斷對應著19路中斷線,分別是EXTI_Line0-EXTI_Line18:


線0~15:對應外部 IO口的輸入中斷。

線16:連接到 PVD 輸出。

線17:連接到 RTC 鬧鐘事件。

線18:連接到 USB 喚醒事件。


 觸發方式:STM32 的外部中斷是通過邊沿來觸發的,不支持電平觸發。 


外部中斷分組:STM32 的每一個GPIO都能配置成一個外部中斷觸發源,STM32 通過根據引腳的序號不同將眾多中斷觸發源分成不同的組,比如:PA0,PB0,PC0,PD0,PE0,PF0,PG0為第一組,那么依此類推,我們能得出一共有16 組,STM32 規定,每一組中同時只能有一個中斷觸發源工作,那么,最多工作的也就是16個外部中斷。


寄存器組                                                                                                                                        

EXTICR寄存器組,總共有4 個,因為編譯器的寄存器組都是從0 開始編號的,所以EXTICR[0]~ EXTICR[3],對應《STM32參考手冊》里的 EXTICR1~ EXTICR 4(查了好久才搞明白這個數組的含義!!)。每個 EXTICR只用了其低16 位。


EXTICR[0] ~EXTICR[3]的分配如下:


EXTI寄存器的結構體:

typedef struct 

  vu32 IMR; 

  vu32 EMR; 

  vu32 RTSR; 

  vu32 FTSR; 

  vu32 SWIER; 

  vu32 PR; 

} EXTI_TypeDef;

       IMR:中斷屏蔽寄存器

這是一個 32 寄存器。但是只有前 19 位有效。當位 x 設置為1 時,則開啟這個線上的中斷,否則關閉該線上的中斷。


EMR:事件屏蔽寄存器


同IMR ,只是該寄存器是針對事件的屏蔽和開啟。


RTSR:上升沿觸發選擇寄存器


該寄存器同IMR ,也是一個32為的寄存器,只有前 19位有效。位 x 對應線x 上的上升沿觸發,如果設置為 1 ,則是允許上升沿觸發中斷/ 事件。否則,不允許。


FTSR:下降沿觸發選擇寄存器


同 PTSR,不過這個寄存器是設置下降沿的。下降沿和上升沿可以被同時設置,這樣就變成了任意電平觸發了。


SWIER:軟件中斷事件寄存器


通過向該寄存器的位x 寫入 1 ,在未設置 IMR 和EMR的時候,將設置PR中相應位掛起。如果設置了IMR 和EMR時將產生一次中斷。被設置的SWIER位,將會在PR中的對應位清除后清除。


PR:掛起寄存器


0 ,表示對應線上沒有發生觸發請求。


1,表示外部中斷線上發生了選擇的邊沿事件。通過向該寄存器的對應位寫入 1 可以清除該位。


在中斷服務函數里面經常會要向該寄存器的對應位寫1 來清除中斷請求。


中斷配置步驟                                                                                                                          

STM32的每個IO口都可以作為中斷輸入,這點很好用。要把IO口作為外部中斷輸入,有以下幾個步驟:


1)初始化IO口為輸入。


這一步設置你要作為外部中斷輸入的IO口的狀態,可以設置為上拉/下拉輸入,也可以設置為浮空輸入,但浮空的時候外部一定要帶上拉,或者下拉電阻。否則可能導致中斷不停的觸發。在干擾較大的地方,就算使用了上拉/下拉,也建議使用外部上拉/下拉電阻,這樣可以一定程度防止外部干擾帶來的影響。


2)開啟IO口復用時鐘,設置IO口與中斷線的映射關系。


STM32的IO口與中斷線的對應關系需要配置外部中斷配置寄存器EXTICR,這樣我們要先開啟復用時鐘,然后配置IO口與中斷線的對應關系。才能把外部中斷與中斷線連接起來。

3)開啟與該IO口相對的線上中斷/事件,設置觸發條件。

這一步,我們要配置中斷產生的條件,STM32可以配置成上升沿觸發,下降沿觸發,或者任意電平變化觸發,但是不能配置成高電平觸發和低電平觸發。這里根據自己的實際情況來配置。同時要開啟中斷線上的中斷,這里需要注意的是:如果使用外部中斷,并設置該中斷的EMR位的話,會引起軟件仿真不能跳到中斷,而硬件上是可以的。而不設置EMR,軟件仿真就可以進入中斷服務函數,并且硬件上也是可以的。建議不要配置EMR位。

4)配置中斷分組(NVIC),并使能中斷。

這一步,我們就是配置中斷的分組,以及使能,對STM32的中斷來說,只有配置了NVIC的設置,并開啟才能被執行,否則是不會執行到中斷服務函數里面去的。關于NVIC的詳細介紹,請參考前面章節。

5)編寫中斷服務函數。

這是中斷設置的最后一步,中斷服務函數,是必不可少的,如果在代碼里面開啟了中斷,但是沒編寫中斷服務函數,就可能引起硬件錯誤,從而導致程序崩潰!所以在開啟了某個中斷后,一定要記得為該中斷編寫服務函數。在中斷服務函數里面編寫你要執行的中斷后的操作。


程序如下:


void EXIT8_IPRT()

{

RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;

EXTI->IMR = EXTI_IMR_MR8;

EXTI->RTSR = EXTI_RTSR_TR8;

AFIO->EXTICR[2] = AFIO_EXTICR3_EXTI8_PA;

NVIC_EnableIRQ(EXTI9_5_IRQn);

}

 

void GPIOA8_Init()

{

/* 1. ENABLE GPIOA CLOCK */

RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

/* 2. CONFIG PA8*/

GPIOA->CRH &= ~(GPIO_CRH_MODE8 | GPIO_CRH_CNF8);

GPIOA->CRH |= GPIO_CRH_CNF8_1;

EXIT8_IPRT();

while(1)

{

}

}

調試如下                                                                                                                          

1)初始化IO口為輸入。如圖

2)開啟IO口復用時鐘,設置IO口與中斷線的映射關系。

3)開啟與該IO口相對的線上中斷/事件,設置觸發條件。

4)配置中斷分組(NVIC),并使能中斷。


5)編寫中斷服務函數。


void EXTI9_5_IRQHandler(void)

{

Delay_ms(10);

if((EXTI->PR) & EXTI_PR_PR8)

{

EXTI->PR = EXTI_PR_PR8;

printf("Monitor rising\n");

}

}


關鍵字:stm32  外部中斷  寄存器版 引用地址:【stm32f103】stm32 外部中斷(寄存器版)

上一篇:如何解決STM32F407串口無法發送第一個字節問題
下一篇:【stm32f103】USART TX發送實現(寄存器版)

推薦閱讀

2018年1月,安費諾工業產品集團,全球惡劣環境互連系統領導者,全新推出了一款增強 版的SurLok Plus大電流連接器和電纜系統(SurLok Plus EMI 版本)。該系列在原有快速連接 和鎖定系統的基礎上增加了高壓互鎖(HVIL)安全性能和抗干擾電磁屏蔽功能(EMI)。這些 特性是高端電池系統確保安全性和正確操作的必要條件。 SurLok Plus系列適用于電動車...
近年來,全球制造業掀起了機器換人浪潮,工業機器人的市場一路飚升,尤其是中國已經成為世界最大市場,吸引了全球機器人企業的關注。一直已來,中國工業機器人市場為外資品牌所占據,而國產機器人企業處于弱勢力地位,只能看著巨大的市場被外資分食。業內機構分析認為,國內工業機器人產業受限于核心部件,如伺服、減速機、控制系統等,國內的技術發展滯后...
一、簡介本文以STM8S103F3P6編程為例,介紹STM8S103F3P6定時器4計時驅動PB5腳二、實驗平臺電腦平臺:Windows7 64位旗艦編譯軟件:IAR硬件平臺:STM8S103F3P6三、版權聲明四、實驗前提1、在進行本文步驟前,請先安裝IAR EWSTM8-EV-1311版本;準備好STM8S103F3P6硬件平臺。五、基礎知識暫無六、源碼地址暫無七、關聯文章鏈接:暫無八、實驗內容1.系統時鐘...
按鍵控制開始暫停int main(void){ unsigned char dis[15], count; WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer //設置單片機工作時鐘 設置為1MHZ if (CALBC1_1MHZ == 0xFF) // If calibration constant erased { while (1) ; ...

史海拾趣

問答坊 | AI 解惑

本人寫的一個基于ucosII的簡單跑馬燈例子

基于IAR編譯環境,雖然簡單. 但卻有ucos程序的使用的幾個要素. 為了練習中斷和郵箱,沒有使用系統timer0時間片定時. 而是使用timer1定時,中斷發生后,通過郵箱把要顯示的led燈的位置送給顯示任務. ucosII編程的最大的一個好處是程序符合自然思維, ...…

查看全部問答∨

有關3相四線制電源進線問題

求助: 最近,我碰到一個三相四線制的電機,(因為電機經常性燒壞,引起我注意)我發現,這個電機沒有缺相保護,我想如果要在這個電機上加一個缺相保護,需要用什么器件,或者怎么設計?…

查看全部問答∨

發些LPC17xx的驅動庫

手上有LPC17xx的開發板,RT-Thread基本系統已經可運行,內核與finsh shell都啟動起來了《這個是由上海豐寶  NXP  應用工程師移植的》,接下去會繼續完成SPI SD卡驅動,EMAC網卡驅動和LCD液晶驅動這里先上LPC17xx的一些驅動庫、例程RT-Thr ...…

查看全部問答∨

Autocad殺毒軟件

Autocad殺毒軟件好用嗎…

查看全部問答∨

Ad-Hoc是如何組網的

有哪位大蝦知道,Ad-hoc是如何自組網的,是如何去發現周圍的網絡,進行連接的????不勝感激!!!!…

查看全部問答∨

VC#智能設備應用程序如何能使用vc2005開發的智能設備ocx? 高手指點

VC#智能設備應用程序如何能使用vc2005開發的智能設備ocx? 高手指點…

查看全部問答∨

windowsCE系統文件有什么辦法能夠打開嗎,fopen好像不可以,連在ActiveSync中復制也復制不出來。

windowsCE系統文件有什么辦法能夠打開嗎,fopen好像不可以,連在ActiveSync中復制也復制不出來。 我就想打開一個windowsCE windows文件夾里的一個文件,我現在想通過復制到我的電腦桌面都復制不了,怎么這么強?不可以復制的,有什么辦法嗎?…

查看全部問答∨

wince下IIC驅動問題?

/******************************************************************************************* ????????: I2C_GetSpeed ?è    ??: ???? I2C ?????????? ????????: ??        ????????: ?? ·?  &nbs ...…

查看全部問答∨

LVDS的輸入輸出問題

按照LVDS原理,當需要發送差分信號時,應該用LVDS的差分信號發送器,LVDS的輸出時差分信號,應該有兩路即IN+ 和 IN- ,IN=IN+ - IN- ,但我用LVDS模塊進行設計時,輸出端口只有一個,請問一下,這是怎么回事?模塊的輸出跟原理好像有差距?希望高手 ...…

查看全部問答∨

請版主解釋一下STM32F105

                                 這個圖片是在日本的網站上找到了,怎么在中國這個芯片就不宣傳了?<img src="http://bbs.eeworld.com.cn/upfil ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 梨树县| 景德镇市| 白银市| 宜川县| 深水埗区| 镇赉县| 柳州市| 建宁县| 皮山县| 罗山县| 集安市| 托克托县| 漯河市| 保亭| 福建省| 营山县| 灌云县| 庆云县| 沙洋县| 宜兰县| 龙胜| 锡林郭勒盟| 仲巴县| 台中市| 宝鸡市| 刚察县| 疏附县| 册亨县| 九龙坡区| 兴仁县| 江永县| 万州区| 桓台县| 明光市| 牙克石市| 河北省| 双江| 临夏市| 柳江县| 鄂伦春自治旗| 调兵山市|