一、MCU中斷程序執行過程
以MCU裸機程序框架為例,MCU 的主函數是個死循環:
主函數:
main(void)
{
While(1)
{
//主程序
}
}
如果沒有中斷或異常產生會一直在while(1)里執行主程序代碼。當中斷產生后,當前執行的任務會被打斷,程序跳轉到中斷處理函數執行,執行完會返回之前的主程序斷點處繼續執行。
中斷處理函數:
void IRQ_handler(void)
{
//中斷處理程序
//清除中斷標志,否則會不停的進入中斷處理程序。
}
在中斷處理函數中不要做復雜費時的事情,中斷內做的事情盡可能少。
二、中斷使用實例
STM32的IO都可以配置成外部中斷,但不是同時都可以配成外部中斷。需要遵循如下規則:
比如PA0設置成外部中斷,PB0,PC0,PD0就不能配成外部中斷。
比如PA1設置成外部中斷,PB1,PC1,PD1就不能配成外部中斷。
STM32的EXTI0-15中斷線分配給IO使用。PA0的中斷只能使用EXTI0的中斷請求;PA1中斷只能使用EXTI1的中斷請求。
每個外部中斷線可以獨立的配置觸發方式,包含上升沿,下降沿或者雙邊沿觸發。每個中斷可單獨使能/屏蔽。
STM32的中斷允許嵌套,搶占優先級高的可以打斷搶占優先級低的中斷執行。搶占優先級相同時,不能嵌套,不同響應優先級中斷同時發生,優先級高的先執行。在程序設計時要根據具體情況分配好搶占優先級和響應優先級。
STM32的優先級分搶占和響應兩種,具體選擇哪種分組組合可以通過如下函數配置:
NVIC_PriorityGroupConfig()
優先級分組組合有5種:
第0組:所有4bit用于指定響應優先級;
第1組:最高1位用于指定搶占式優先級,后面3位用于指定響應優先級;
第2組:最高2位用于指定搶占式優先級,后面2位用于指定響應優先級;
第3組:最高3位用于指定搶占式優先級,后面1位用于指定響應優先級;
第4組:所有4位用于指定搶占式優先級。
以STM32為例,使用IO端口PB2的外部中斷功能需要做如下初始化配置:
1 使能PB2的端口clock及復用功能clock
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);
2 中斷優先級初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//選擇中斷分組1
NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQChannel; //選擇中斷通道2
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //搶占中斷優先級設置為1
NVIC_InitStructure.NVIC_IRQChannelSubPriority =2; //響應中斷優先級設置為2
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE; //使能中斷
3 IO初始化
PIO_InitStructure.GPIO_Pin=GPIO_Pin_2; //選擇引腳PB2
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //輸出頻率最大50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;; //輸入
GPIO_Init(GPIOB,&GPIO_InitStructure);
4 把PB2設置為外部中斷模式
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource2);
EXTI_InitStructure.EXTI_Line = EXTI_Line2; //選擇中斷線路2
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //設置為中斷請求 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //觸發方式為上下降沿觸發
EXTI_InitStructure.EXTI_LineCmd=ENABLE; //外部中斷使能
EXTI_Init(&EXTI_InitStructure);
5 中斷處理函數
void EXTI2_IRQHandler(void)
{
//處理程序
//清空中斷標志位,防止連續進入中斷
EXTI_ClearITPendingBit(EXTI_Line2);
}
-
STM32
+關注
關注
2272文章
10923瀏覽量
357402 -
外部中斷
+關注
關注
1文章
132瀏覽量
15872 -
裸機
+關注
關注
0文章
39瀏覽量
6425 -
MCU芯片
+關注
關注
3文章
253瀏覽量
11621
發布評論請先 登錄
相關推薦
評論