浅谈外部中断中的相关函数设置

原创 2018年04月16日 23:38:37

2018/4/16

stm32

1.说在前面:

记得前几天写了一个用按键来控制灯的函数,但是无论怎样都无法实现函数的重复使用,一开始以为是没有设置好循环,但是,因为没有实现外部中断才做不了循环操作

2.外部中断

1.作为STM32而言,每一个IO口都可以作为外部中断的中断输入口,但是,中断线只有16条,于是采用了16个中断线来对应GP[OX_1~GPIOX-15的操作,通过映射配置具体到GPIO口

2.简单过程

1)初始化 IO 口为输入。

2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。

3)初始化线上中断,设置触发条件等。

4)配置中断分组(NVIC),并使能中断。

5)编写中断服务函数。

3.相关配置代码的介绍(结构体定义)

1.配置中断线

EXTI_InitTypeDef EXTI_InitStruct;//创建结构体来初始化中断线
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//实现AFIO的使能
GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);//配置中断线(配置C5)
	EXTI_InitStruct.EXTI_Line = EXTI_Line5;
	EXTI_InitStruct.EXTI_Mode = EXTI_Mode_Interrupt;//配置为输入
	EXTI_InitStruct.EXTI_Trigger = EXTI_Trigger_Falling;//配置下降沿触发
	EXTI_InitStruct.EXTI_LineCmd = ENABLE;
	EXTI_Init(&EXTI_InitStruct);//配置相关寄存器

2.配置NVIC中断优先级

NVIC_InitStruct.NVIC_IRQChannel = EXTI0_IRQn;
	//使能按键所在的外部中断通道
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0x02;//设置抢占优先级
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0x01;//设置子优先级
	NVIC_Init(&NVIC_InitStruct);

3.实现中断服务函数(注意配置完之后清除函数的挂起)

void EXTI0_IRQHandler(void)

{
	delay_ms(10); //消抖
	if (WK_UP == 1)
	{
		LED0 = 1;
		LED1 = 1;
	}
	EXTI_ClearITPendingBit(EXTI_Line0); //清除 EXTI0 线路挂起,清除位
}

注:NVIC_InitTypeDef 结构体中间有三个成员变量,这三个成员变量的作用是:NVIC_IRQChannel:定义初始化的是哪个中断,这个我们可以在 stm32f10x.h 中找到每个中断对应的名字。例如 USART1_IRQn。NVIC_IRQChannelPreemptionPriority:定义这个中断的抢占优先级别。

NVIC_IRQChannelSubPriority:定义这个中断的子优先级别。

NVIC_IRQChannelCmd:该中断是否使能。



stm32库函数学习篇---NVIC与外部中断

实现功能:外部中断线0(PA0)与线15(PA15)分别连接到两个按钮,一个按钮用于产生上升沿,另一个用于产生下降沿,两个中断函数里均对PA8口连接的led灯取反,同时PD2连接的led灯随意延时取反...
  • TXF1984
  • TXF1984
  • 2015-06-13 14:34:32
  • 1040

TMS320F28335之外部中断和自定义中断

外部中断和其他模块中断中断原理一样,也是先设置中断级,然后PIE级,最后CPU级,外部中断的中断寄存器在中断头文件中,中断触发设置在中断C文件中,外部中断作为一个单独的模块使用。28335支持8 个可...
  • hmf1235789
  • hmf1235789
  • 2017-01-13 10:16:03
  • 1122

多外部中断的优先级配置

STM32固件库使用手册(中文版)P167抢占优先级的优先级别大于从优先级(响应优先级),而在抢占优先级内部,配置所给的抢占优先级(NVIC_InitStructure.NVIC_IRQChannel...
  • ambizxzh
  • ambizxzh
  • 2017-07-05 01:22:59
  • 415

外部中断0——51程序

51单片机中一共有5个中断方式: ①外部中断0 ②定时器中断0 ③外部中断1 ④定时器中断1 ⑤串口中断 5个中断优先级从  高  到  低 void int0_init() ...
  • qq_35212671
  • qq_35212671
  • 2016-09-12 23:16:22
  • 2389

STM8L固件库外部中断的使用及注意事项

遇到的问题:
  • tqj460771096
  • tqj460771096
  • 2014-07-21 12:45:37
  • 3290

STM32F4外部中断入口和外部中断线

STM32F4的每个IO都可以作为外部中断的中断输入口,这点也是STM32F4的强大之处。STM32F407的中断控制器支持22个外部中断/事件请求。每个中断设有状态位,每个中断/事件都有独立的触发和...
  • jdsnpgxj
  • jdsnpgxj
  • 2017-05-15 16:50:01
  • 2088

外部中断1下降沿触发

#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义 sbit LED=P1^0; //定义LED端口 void DelayUs2x(unsigned char t...
  • xxaichishizi
  • xxaichishizi
  • 2017-04-06 11:26:52
  • 515

STM32F103C8T6按键中断功能实现

公司准备开发一款手持智能硬件,经过讨论决定使用STM32F103C8T6作为主控芯片;核心功能是一个按键中断,长按、短按分别实现不同的功能(规定大于1s为长按,否则视为短按)。 按键功能分析:需要使用...
  • zwj1234_
  • zwj1234_
  • 2016-07-20 20:48:50
  • 2485

再论UCOS II外部中断问题

再论UCOS II外部中断问题     如果按前后台系统的方式编写则按下键后,系统进入了一个死循环,出不来,调试时中止发现进入了默认的异常处理程序,为什么呢?       我认为是OS在各任务间进行切...
  • fanwenjieok
  • fanwenjieok
  • 2011-04-07 21:00:00
  • 1672

51单片机外部中断编程实例2

作者:江苏科技大学 机械工程学院 赵长金   1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0;2、中断源的编号: 串行口中断为4、定时中...
  • zcj331
  • zcj331
  • 2014-04-11 13:26:23
  • 2963
收藏助手
不良信息举报
您举报文章:浅谈外部中断中的相关函数设置
举报原因:
原因补充:

(最多只允许输入30个字)