STM32的外部中断

本文详细介绍了STM32的外部中断配置过程,包括使能SYSCFG时钟、IO口与中断线映射、中断开启、触发条件设置、中断优先级配置以及中断使能。通过实例展示了如何在按键按下时控制LED灯亮灭,并循环闪烁。同时,文章提到了实验中按键处理的不足,指出需要进一步完善。
摘要由CSDN通过智能技术生成

实验目的:

当按键按下时,让PF10引脚的LED灯亮,
当按键再次按下时,让PF10引脚的LED灯灭;

无论按下与否,PF9引脚的LED灯循环闪烁;


实验步骤:




实验程序:

/***********************************led.c*********************************/
#include "stm32f4xx.h"  //在SYSTEM目录下可以找到
#include "sys.h"


void LED_Init(void){
	
	RCC->AHB1ENR = 1<<5;  //使能GPIO端口的F时钟 
	GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_25M,GPIO_PUPD_PU);
	PFout(9) = 1;
	PFout(10) = 1;
	
}


/***********************************led.h*********************************/
#ifndef _LED_H
#define _LED_H


void LED_Init(void);


#endif


/********************************************key.c***************************************/
#include "sys.h"


void Key_Init(void){
	 
	RCC->AHB1ENR|=1<<4;     //使能PORTE时钟
	
	//void GPIO_Set(GPIO_TypeDef* GPIOx,u32 BITx,u32 MODE,u32 OTYPE,u32 OSPEED,u32 PUPD);//GPIO设置函数 
	GPIO_Set(GPIOE,PIN3,GPIO_MODE_IN,0,0,GPIO_PUPD_PU);	//PE3设置上拉输入,这样的话,
								//当按键没有按下时,默认电平为高;
	
}


/********************************************key.h***************************************/
#ifndef _KEY_H
#define _KEY_H


void Key_Init(void);


#endif



/************************************exti.c********************************/
#include "sys.h"
#include "delay.h"
#include "stm32f4xx.h"


/*
本示例的作用就是,
当按键按下时,蜂鸣器发出声音,
当按键再次按下时,蜂鸣器静音;
*/


/*
中断初始化函数:
主要是关于寄存器的相关配置
*/
void EXTI3_Init(void){
	
	//方法一:
	RCC->APB2ENR |= 1 << 14;  //开启SYSCFG时钟
	SYSCFG->EXTICR[0] |= 0x4 << 12;//设置IO口与中断线的映射关系;
	EXTI->IMR |= 1 << 3;  //开启对应中断线上的中断
	EXTI->FTSR |= 1 << 3;  //设置中断触发条件
	
	//SCB和NVIC,可参考STM32F3与STM32F4系列Cortex M4内核编程手册.pdf
	SCB->AIRCR |= 0x5 << 8; //设置分组
	NVIC->IP[9] |= 0; //设置优先级,具体可分析MY_NVIC_Init()函数;
	
	NVIC->ISER[0] |= 1 << 9;  //使能中断;


	
	//方法二:
/************************************
	使用SYSTEM目录下提供的API来实现,
	具体可参考正点原子示例
************************************/
	
}


void EXTI3_IRQHandler(void){
	
	/*
	此按键,在按键按下时,处理不是很到位,
	有待进一步改进,主要是在连按那一个环节。
	*/
	
	delay_ms(20);  //消抖
	if(PEin(3) == 0){
		
		PFout(10) = !PFout(10);
		
	}
	
	
	/*
	在中断里边最后记得清中断:
	*/
	
	EXTI->PR |= 1 << 3;


} 


/*************************************exti.h***********
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值