外部中斷實驗


實驗目的:通過板載的4個按鍵控制板載兩個LED的亮滅以及蜂鳴器的發聲。

一、STM32的每個I/O口都可以作為中斷輸入,要把I/O口作為外部中斷輸入,有以下幾個步驟。

①、初始化I/O口為輸入

②、開啟 IO 口復用時鍾,設置 IO 口與中斷線的映射關系。

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

④、配置中斷分組(NVIC),並使能中斷。

⑤、編寫中斷服務函數。

二、軟件設計

exti.c文件

#include "exti.h"
#include "led.h"
#include "key.h"
#include "delay.h"
#include "usart.h"
//外部中斷 0 服務程序
void EXTI0_IRQHandler(void)
{
delay_ms(10); //消抖
if(WK_UP==1) //WK_UP 按鍵
{
LED0=!LED0;
LED1=!LED1;
}
EXTI->PR=1<<0; //清除 LINE0 上的中斷標志位 
}
//外部中斷 9~5 服務程序
void EXTI9_5_IRQHandler(void)
{
delay_ms(10); //消抖
 if(KEY0==0) LED0=!LED0; //按鍵 0 
EXTI->PR=1<<5; //清除 LINE5 上的中斷標志位 
}
//外部中斷 15~10 服務程序
void EXTI15_10_IRQHandler(void)
{
delay_ms(10); //消抖
 if(KEY1==0) LED1=!LED1; //按鍵 1 
EXTI->PR=1<<15;//清除 LINE15 上的中斷標志位 
}
//外部中斷初始化程序
//初始化 PA0,PC5,PA15 為中斷輸入.
void EXTI_Init(void)
{
KEY_Init(); //按鍵初始化
Ex_NVIC_Config(GPIO_A,0,RTIR); //上升沿觸發
Ex_NVIC_Config(GPIO_C,5,FTIR); //下降沿觸發
Ex_NVIC_Config(GPIO_A,15,FTIR); //下降沿觸發
MY_NVIC_Init(2,2,EXTI0_IRQn,2); //搶占 2,子優先級 2,組 2
MY_NVIC_Init(2,1,EXTI9_5_IRQn,2); //搶占 2,子優先級 1,組 2
MY_NVIC_Init(2,0,EXTI15_10_IRQn,2); //搶占 2,子優先級 0,組 2 
}

 

 

exti.h

#ifndef __EXTI_H
#define __EXTI_H
void EXTI_Init(void);// 外部中斷初始化 
#endif

test.c

#include "sys.h"
#include "usart.h"
#include "delay.h"
#include "led.h"
#include "key.h"
#include "exti.h"
int main(void)
{ 
Stm32_Clock_Init(9); //系統時鍾設置
delay_init(72); //延時初始化
uart_init(72,9600); //串口初始化
LED_Init(); //初始化與 LED 連接的硬件接口
EXTI_Init(); //外部中斷初始化
LED0=0; //點亮 LED
while(1)
{ 
printf("OK\r\n");
delay_ms(1000); 
} 
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM