基于STM32F103ZET6主控平台实现EXTI外部中断驱动

一个热爱代码的工程师,唯有凭借双手不断敲打,才可以快速提升实力!

本文谨以记录,日后相忘时再作复习,代码没有贵贱,既来之则安之。

第一步:编写exti.h头文件

#ifndef __EXIT_H
#define __EXIT_H
#include "sys.h"

void EXIT_Init(void);//EXTI外部中断初始化

#endif

头文件很简单,里面放一个外部中断初始化声明即可。

第二步:编写exit.c文件,在该文件中编写EXTI外部中断的初始化函数,该外部中断是将按键对应的GPIO引脚作为中断的出发事件。

#include "exit.h"
#include "key.h"
#include "led.h"
#include "beep.h"
#include "delay.h"
#include "stdio.h"  

void EXTI0_IRQHandler(void)//按键KEY_UP的中断服务函数	
{
	delay_ms(10);
	if(KEY_UP==1)
	{
			BEEP=!BEEP;		
	}
	EXTI->PR=1<<0;//清除LINE0的中断标志位
}
void EXTI3_IRQHandler(void)//按键KEY1的中断服务函数
{
	delay_ms(10);//按键消抖
	if(KEY1==0)
	{
		LED1=!LED1;	
	}
	EXTI->PR=1<<3;//清除LINE3的中断标志位
}
void EXTI4_IRQHandler(void)//按键KEY0的中断服务函数	
{
	delay_ms(10);//按键消抖
	if(KEY0==0)
	{
		LED0=!LED0;	
	}
	EXTI->PR=1<<4;//清除LINE4的中断标志位
}

void EXIT_Init(void)//外部中断初始化
{
	printf("EXIT_Init\r\n");
	KEY_Init();
	Ex_NVIC_Config(GPIO_A,0,RTIR);
	Ex_NVIC_Config(GPIO_E,3,FTIR);
	Ex_NVIC_Config(GPIO_E,4,FTIR);
	
	MY_NVIC_Init(2,3,EXTI0_IRQn,2);
	MY_NVIC_Init(2,1,EXTI3_IRQn,2);
	MY_NVIC_Init(2,0,EXTI4_IRQn,2);
}

第三步:编写main函数,因为是外部中断,所以无论main函数中执行什么都没有关系,即使是while死循环,中断依旧可以触发。

/*
 * 自学DIY */

#include "sys.h"
#include "usart.h"		
#include "delay.h"

#include "led.h"
#include "beep.h"
#include "key.h"
#include "exit.h"
u8 Wl_stat=0;
int main(void)
{		
	Stm32_Clock_Init(9);	  //系统时钟设置
	delay_init(72);	  		  //延时初始化
	uart_init(72,115200); 	//串口初始化为115200
	LED_Init();
	BEEP_Init();
	EXIT_Init();
	printf("-------------------- \r\n");
	printf("    自学->嵌入式     \r\n");
	printf("    版本:1.0.0       \r\n");
	printf("-------------------- \r\n");
	
	while(1)
	{
		if(Wl_stat==0)//代表进入WHILE循环
		{
			printf("Input While(1)-->\r\n");
			Wl_stat=1;
		}
		printf("Running......\r\n");
		delay_ms(5000);
	}
	
}

第四步:编译通过后,烧录进STM32F103ZET6开发板,实现程序设计效果即可。

PS:在编写外部中断的过程中,确实遇到了一个不应该犯却又是特别容易忽略的问题,脸上一脸懵逼,心里MMP,嘀咕了半天发现把中断服务函数EXTI0_IRQHandler()写成了EXIT0_IRQHandler(),乍一看真看不出来,找了N多边才发现,果然写代码细心很重要。

想太多,做太少,怎改变自己

谢谢大家的关注和支持,来自一个嵌入式软硬件工程师的内心情感!

PS:本文的代码参考正点原子

猜你喜欢

转载自blog.csdn.net/weixin_41586634/article/details/82781217