17. 外部中断实验

本文介绍了STM32单片机的外部中断概念,详细讲解了外部中断的库函数设置,并通过实例演示如何利用外部中断实现按键实验,为嵌入式硬件开发提供实践指导。

外部中断概述

 

 

 

 

 

外部中断库函数设置

 

 

手把手用外部中断写按键实验

#ifndef __EXTI_H
#define __EXTI_H

#include "sys.h"

void EXTIX_Init(void);


#endif

#include "stm32F4xx.h"
#include "exti.h"
#include "key.h"
#include "delay.h"
#include "led.h"

void EXTIX_Init(void)
{
	EXTI_InitTypeDef EXTI_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	// 初始化SYSCF外部中断时钟
	RCC_APB2PeriphClockLPModeCmd(RCC_APB2Periph_SYSCFG,ENABLE);
	// 初始化AHB1时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOE,ENABLE);
	
	// 初始化按键
	KEY_Init();
	
	// 设置IO口与中断线的映射关系
	SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE,EXTI_PinSource4);
	
	// 初始化外部中断
	EXTI_InitStructure.EXTI_Line = EXTI_Line4;
	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
	EXTI_Init(&EXTI_InitStructure);
	
	// 配置中断分组并使能
	NVIC_InitStructure.NVIC_IRQChannel = EXTI4_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStructure);
}

void EXTI4_IRQHandler(void)
{
	delay_ms(10);
	// 按键按下
	if(KEY0 == 0)
	{
		LED0 = !LED0;
		LED1 = !LED1;
	}
	// 清除中断标志位
	EXTI_ClearITPendingBit(EXTI_Line4);
	
}
#include "stm32f4xx.h"
#include "beep.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "usart.h"
#include "exti.h"

int main(void)
{
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	delay_init(168);
	uart_init(115200);
	LED_Init();
	BEEP_Init();
	EXTIX_Init();
	LED1 = 0;
	while(1)
	{
		printf("OK\r\n");
		delay_ms(10);
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值