微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32的学习心得之外部中断/事件控制器(EXTI)

STM32的学习心得之外部中断/事件控制器(EXTI)

时间:11-28 来源:互联网 点击:
外部中断/事件我的理解是可以将单片机的IO口全部设置为外部中断口,我们可以根据触发哪个IO口中断,去执行相应的中断处理函数。这个其实很简单,51一般有2个外部中断口,而stm32将其扩展,每个IO口都可以作为外部中断口。

外部中断配置也很简单,只需要打开相应的IO口配置,时钟,打开stm32f10x_conf.h里的 #include "stm32f10x_exti.h" ,配置EXIT和中断处理函数即可。下面是简单的实例(基于3.0库):

void GPIO_Configuration(void)//配置GPIOC_5口作为外部中断口
{

GPIO_InitTypeDefGPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING ;
GPIO_Init(GPIOC, &GPIO_InitStructure);

}

void EXTI_Configuration(void)
{
EXTI_InitTypeDef EXTI_InitStructure;
EXTI_InitStructure.EXTI_Line = EXTI_Line5; //外部中断线
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//中断触发方式
EXTI_InitStructure.EXTI_LineCmd = ENABLE;//打开中断
EXTI_Init(&EXTI_InitStructure);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5); //选择 GPIO管脚用作外部中断线路

}

void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 抢占式优先级别

NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;//指定中断源
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 指定响应优先级别1
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

}

//中断处理函数

void EXTI9_5_IRQHandler(void)
{

if(EXTI_GetITStatus(EXTI_Line5) != RESET)
{

//添加中断处理程序

EXTI_CleaRFlag(EXTI_Line5);
EXTI_ClearITPendingBit(EXTI_Line5);

}

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top