目录
一、EXTI是什么?
二、使用方法
1.功能框图及寄存器
2.库函数编程
总结
提示:以下是本篇文章正文内容,下面案例可供参考
一、EXTI是什么?
EXTI(External interrupt/event controller)外部中断事件控制器,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。
二、使用方法
1.功能框图及寄存器
20个线路可以被配置成软件中断/事件线。下面是产生软件中断的过程:
● 配置20个中断/事件线屏蔽位(EXTI_IMR, EXTI_EMR)
● 设置软件中断寄存器的请求位(EXTI_SWIER)
当配置好软件中断事件寄存器为1时,当边沿检测电路触发为1,需配置软件中断事件寄存器,写1,将挂起寄存器置1,挂起位为1,即发生了选择的触发请求,再配置对应的中断和事件屏蔽寄存器,即可触发中断控制。
外部中断/事件外部映像
2.库函数编程
#include "exti.h"
#include "delay.h"
#include "beep.h"
#include "uart.h"
/**
* @brief This function is nvic config
* @param None
* @retval None
*/
void nvic_config(void)
{
NVIC_InitTypeDef nvic_initsturct;
nvic_initsturct.NVIC_IRQChannel=EXTI0_IRQn;
nvic_initsturct.NVIC_IRQChannelPreemptionPriority=0x02;
nvic_initsturct.NVIC_IRQChannelSubPriority=0x03;
nvic_initsturct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&nvic_initsturct);
}
/**
* @brief This function is exti init
* @param None
* @retval None
*/
void exti_init(void)
{
EXTI_InitTypeDef exti_initsturct;
key_init();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0);
exti_initsturct.EXTI_Line=EXTI_Line0;
exti_initsturct.EXTI_Mode=EXTI_Mode_Interrupt;
exti_initsturct.EXTI_Trigger=EXTI_Trigger_Rising;
exti_initsturct.EXTI_LineCmd=ENABLE;
EXTI_Init(&exti_initsturct);
nvic_config();
}
/**
* @brief This function is EXTI0_IRQHandler
* @param None
* @retval None
*/
void EXTI0_IRQHandler(void)
{
delay_ms(20);//消抖
if(EXTI_GetITStatus(EXTI_Line0)!=RESET)//WK_UP按键
{
led1=!led1;
printf("in exti");
delay_ms(200);//消抖
}
EXTI_ClearITPendingBit(EXTI_Line0); //清除LINE0上的中断标志位
}
总结
EXTI编程步骤 1.初始化用来触发中断的GPIO
2.初始化EXTI结构体(需使能APB2Periph AFIO时钟,配置外部中断线Line)
3.配置NVIC中断优先级(先配置分组,后配置优先级)
4.配置中断服务函数EXTIX_IRQHandle
5.在中断服务函数中检测中断标志位,并在结束时清除中断标志位
在学习外部中断中遇到了一个坑,首先是笔者是把正点原子和野火的课程混听,跟着野火在触发的GPIO输入模式上选择了浮空输入,但是在正点原子的板子上,浮空输入无法触发中断,发现是因为当我正常按下按钮无法触发中断,当我用万用表去测量PA0的电压时,这是按下按钮,便可以正常触发中断,事后对这个现象进行了分析,是由于正点原子和野火在板子按钮的处理方式稍有些不同,野火在外部电路中接了下拉电阻,所以可以设置为浮空输入,而正点原子外部电路没有上下拉
所以需要将gpio设置为下拉输入。
正点原子
野火
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)