例如,我們使用外部中斷。我根據自己的學習來說說使用外部中斷的壹般步驟:
1.初始化相應的GPIO端口。如果用GPIOB。
(1)首先定義用於初始化的結構的名稱。
GPIO _ init typedef GPIO _ init structure;
解釋:GPIO_InitTypeDef是stm32定義的結構,包含相應的成員變量。我們只需要定義結構的名稱,即GPIO_InitStructure,然後配置它的成員。
(2)打開GPIOB的時鐘。
打開時鐘,用系統給我們提供好的功能。
RCC _ APB 2 periphclock cmd(RCC _ APB 2 periph _ gpio b | RCC _ APB 2 periph _ AFIO,使能);
註意:因為要復用GPIO口,所以還要打開GPIO口的復用功能時鐘RCC _ AP B2 PERIPH _ AFIO;
(3)配置結構GPIO_InitStructure。
GPIO_InitStructure。GPIO _ Pin = GPIO _ Pin _ 0;//選擇引腳
GPIO_InitStructure。GPIO _ Mode = GPIO _ Mode _ IN _ IPU;//設置輸出模式。要改變模式,拉高stm32引腳以確保其處於高電平,並將其用作輸入引腳。
(4)這壹步我們不需要設置輸入速度。當GPIO端口用於輸入時,沒有必要配置速度。
GPIO_InitStructure。GPIO _ Speed = GPIO _ Speed _ 2MHz
(5)GPIO_Init(GPIOB,& ampGPIO _ init structure);//調用初始化函數將配置應用到GPIOB端口。
2.將GPIO連接到EXTI。
GPIO _ extiline config(GPIO _ PortSourceGPIOB,GPIO _ pin source 0);//將GPIOB0端口連接到EXTI0。可能有些同學不理解為什麽是EXTI0。這裏簡單說明壹下,GPIO口如果接0腳就對應EXTI0,如果是1腳就對應Exti1。
3.配置外部中斷的觸發模式。
EXTI _ init typedef EXTI _ init structure;
EXTI_InitStructure。EXTI _ Line = EXTI _ Line0
EXTI_InitStructure。EXTI _ Mode = EXTI _ Mode _中斷;
EXTI_InitStructure。EXTI _ Trigger = EXTI _ Trigger _ Rising;
EXTI_InitStructure。EXTI _ LineCmd = ENABLE
EXTI _ Init(& amp;EXTI _ init structure);
4.設置中斷優先級寄存器
NVIC _優先組配置(NVIC _優先組_ 2);//這裏我們選擇分組2,也就是說我們給搶占優先級賦2位,給響應優先級賦2位。
5.配置中斷控制寄存器(NVIC)
(1)NVIC _ InitTypeDef NVIC _ init structure;//這壹步是命名我們的結構,下面是配置結構。
(2)NVIC _有限結構。NVIC _ IRQ channel = ext i0 _ IRQn;//選擇中斷類型就是選擇外部中斷0。這些陳述實際上是stm32給我們的。中斷名是在IRQn_Type結構中為我們定義的。我們只需要選擇壹個我們想要使用的中斷。我們可以在stm32f10xx.h中找到
(3)NVIC _有限結構。NVIC _ IRQChannelPreemptionPriority = 0x 01;//設置搶占優先級。
(4)NVIC _有限結構。NVIC _ IRQChannelSubPriority = 0x 01;//設置響應優先級。
(5)NVIC _有限結構。NVIC _ IRQChannelCmd =使能;//設置開始中斷。可以理解為開啟總中斷。
(6)NVIC _ Init(& amp;NVIC _初始結構);//調用崩潰函數來初始化這個中斷。
6.最起碼別忘了在stm32f10x_it.c裏面寫中斷服務程序。不要忘記清除中斷標誌。
void PPP_IRQHandler(void)
{}
我們在這個函數裏寫壹個中斷程序,PPP的意思是設備。但是同學們要記住,我們不能只是在裏面寫字。我們應該寫PPP作為我們的中斷,void EXTI0_IRQHandler(void) {}
只有這樣,學生才會問這個名字是怎麽確定的。
答案是我們需要在stm32的匯編文件startup_stm32f1xx.s中找到每個中斷的名字。
慢慢學沒有我們想象的那麽難。