STM32F103ZET6 — EXTI

发布者:dswecd最新更新时间:2018-08-14 来源: eefocus关键字:STM32F103ZET6  EXTI 手机看文章 扫描二维码
随时随地手机看文章

STM32F103ZET6  支持 20 个外部中断输入(EXIT0~EXIT19),其中有4个:

EXTI线16连接到PVD输出

EXTI线17连接到RTC闹钟事件

EXTI线18连接到USB唤醒事件

EXTI线19连接到以太网唤醒事件(只适用于互联型产品)


另外的16个均可以作为外部输入中断,其中:

EXIT0~EXIT4 有独立的中断向量

EXIT6~EXIT9 共享一个中断向量 EXTI9_5_IRQHandler

EXIT10~EXIT16 共享一个中断向量 EXTI15_10_IRQHandler

共享的中断向量需要在对应的 ISR 中通过读取 Pending 的标志位来判断到底是哪个信号上触发的中断


单板上,PE5/PE6 引脚通过通过上拉电阻连接到 Key1 和 Key2 上,Key1 和 Key2 的另一端连接 GND。

初始化配置 PE5/PE6 成为外部中断的流程如下:

1. 开启 AFIO 和 GPIO 的时钟

2. 配置 GPIO PE5/PE6 为上拉输入

3. 通过 AFIO 的 EXITCR 寄存器组配置 PE5/PE6 为外部 EXIT 中断的输入引脚

4. 配置 EXIT 寄存器,使能 PE5/PE6 的中断

5. 由于按下 Key 后,电平为低,故配置为下降沿产生中断

void SK_EXITInit(void)

{

    GPIO_InitTypeDef stGpioInit;

    EXTI_InitTypeDef stEXTIInit;

 

    /// Step 1 : Power On the AFIO and GPIOE

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);

 

    /// Step 2 : Config the NVIC

    SK_SK_EXITNVICConfig();

 

    /// Step 3 : Config (PE5/PE6) As pull up input

    stGpioInit.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6;

    stGpioInit.GPIO_Mode = GPIO_Mode_IPD;

    GPIO_Init(GPIOE, &stGpioInit);

 

    /// Step 4 : Select the output interrupt source

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource5);

    GPIO_EXTILineConfig(GPIO_PortSourceGPIOE, GPIO_PinSource6);

 

    /// Step 5 : Select the output interrupt source

    stEXTIInit.EXTI_Line = EXTI_Line5 | EXTI_Line6;

    stEXTIInit.EXTI_Mode = EXTI_Mode_Interrupt;

    stEXTIInit.EXTI_Trigger = EXTI_Trigger_Falling;

    stEXTIInit.EXTI_LineCmd = ENABLE;

    EXTI_Init(&stEXTIInit);

}

由于 EXIT5~EXIT9 共享一个中断向量,故需要在中断中判断 Pending 标志位,便可知是哪个中断线上引起的中断:


void EXTI9_5_IRQHandler(void)

{

    if(EXTI_GetITStatus(EXTI_Line5) != RESET)

    {

        EXTI_ClearITPendingBit(EXTI_Line5);

        SK_SetLedStatus(SK_LED_1, SK_LED_ON);

        delay_ms(5000);

        SK_SetLedStatus(SK_LED_1, SK_LED_OFF);

    }

 

    if(EXTI_GetITStatus(EXTI_Line6) != RESET)

    {

        EXTI_ClearITPendingBit(EXTI_Line6);

        SK_SetLedStatus(SK_LED_2, SK_LED_ON);

        delay_ms(5000);

        SK_SetLedStatus(SK_LED_2, SK_LED_OFF);

    }

 

}


关键字:STM32F103ZET6  EXTI 引用地址:STM32F103ZET6 — EXTI

上一篇:STM32F103ZET6 — ADC
下一篇:STM32F103ZET6 — USART

推荐阅读最新更新时间:2024-03-16 16:11

STM32F10X系列GPIO外部中断
先从最简单的问题开始,用STM32外部中断的方法实现PB.0按键控制PA.0LED灯: 先总的说下实现中断的步骤: 1,配置NVIC寄存器(函数),设置中断为第几组,占先优先级和次优先级; 函数方法: void NVIC_Configuration() { NVIC_InitTypeDef NVIC_InitStruct; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStruct.NVIC_IRQChannel=EXTI0_IRQn; NVIC_InitStruct.NVIC_IRQChannel
[单片机]
STM32F10X系列GPIO<font color='red'>外部中断</font>
基于stm32f103zet6的FAT16文件系统学习1(初识FAT16)
有了之前读写block的基础之后,准备弄个文件系统,之前没有接触过这东西,所以有很多都晕晕的,但是看到fat的源代码之后还是挺有信心的,因为之前一直过uboot,所以这个文件当然是小巫见大巫了。首先来分析一下对应我的SD的FAT16的相关信息吧(暂且就这么称吧,因为我也不是很了解)。 一、引导扇区段 拿比较简单的FAT16文件系统来分析,格式化为FAT16,然后使用Winhex软件打开我的磁盘驱动器。先贴上一张图 这上面可以发现很多有用的信息,首先我们了解一下基本知识,对于我的SD卡来说,从上面的信息可以看出: 1、一个扇区定为512字节。 2、启动扇区为0扇区,同时这也是物理扇区0,但是,从上面可以看出,我的SD卡是没有MB
[单片机]
基于<font color='red'>stm32f103zet6</font>的FAT16文件系统学习1(初识FAT16)
51单片机外部中断编程实例2
1、51单片机的5大中断源:串行口中断、定时中断1、外部中断1、定时中断0、外部中断0; 2、中断源的编号: 串行口中断为4、定时中断1为3、外部中断1为2、定时中断0为1、外部中断0为0; 3、中断源的优先级:按以上顺序排列,串行口中断最低、外部中断0最高; 4、使用外部中断0和1,必须TCON寄存器设置其触发方式是低电平触发(0)还是下降沿触发(1); 5、使用前必须通过IE寄存器打开总中断和自己的中断; 一、外部中断基本例程(未使用中断,键盘扫描为一般端口扫描) #include reg52 .h sbit k1=P3^2; sbit led=P2^7; void delay_ms(u
[单片机]
stm32专题七:EXTI(二) 外部中断
EXTI外部中断的配置过程: 开启GPIO时钟,初始化要连接的GPIO端口为浮空输入(参考手册); 开启AFIO时钟; 设置IO口与中断线的映射关系,调用函数GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); 初始化EXTI,设置触发条件等; 初始化NVIC(注意,有几个中断就要写几次中断源); 编写中断服务函数; 常见的中断服务函数写法: void EXTI3_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line3)!=RESET) //判断某个线上的中断是否发生 { // 中断逻辑…
[单片机]
STM32学习笔记整理之(2)——外部中断
学习STM32也快一年了,现在工作的内容跟用的是STM32平台的,趁着年前工作量比较小,总结一下STM32的基础知识,不出意外的话将会连续发布完整的笔记整理,学习的时候主要是跟着野火教程学的,然后在整理出适合自己的笔记。 2.1 NVIC配置 1、中断分组 在配置优先级的时候,NVIC 只可以配置 16 种中断向量的优先级,抢占优先级和响应优先级的数量由一个 4 位的数字来决定,把这个 4 位数字的位数分配成抢占优先级部分和响应优先级部分。 有 5 组分配方式: 第0组:所有4位用来配置响应优先级。 第1组:最高1位配抢占优先级,低3位配响应优先级。2^1=2 种抢占优先级(0,1),2^3=8 种响应优先级, 第2组:2位
[单片机]
ATmega32外部中断嵌套
#include iom32v.h #include macros.h #pragma data:code const table ={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8, 0x80,0x90,0xff}; #pragma interrupt_handler int0:2 void int0() { PORTC&=~BIT(0); PORTA=table ; while(1); } #pragma interrupt_handler int1:3 void int1() { PORTC&=~BIT(0); PORTA=table ; SEI();
[单片机]
STM32库函数EXTI_GetFlagStatus和EXTI_GetITStatus区别是什么?
一个是获取状态的,一个是获取中断的。 EXTI_GetFlagStatus只是纯粹读取中断标志位的状态,但是不一定会响应中断(EXT_IMR寄存器对该中断进行屏蔽);而EXTI_GetITStatus除了读取中断标志位,还查看EXT_IMR寄存器是否对该中断进行屏蔽,在中断挂起&没有屏蔽的情况下就会响应中断。仔细看看代码就知道区别了 FlagStatus EXTI_GetFlagStatus(uint32_t EXTI_Line) { FlagStatus bitstatus = RESET; assert_param(IS_GET_EXTI_LINE(EXTI_Line)); if ((EXTI- PR & EXTI_
[单片机]
7、STM32的外部中断EXTI及NVIC中断优先级介绍(内附代码)
一、什么是中断? 打断当前的操作,执行中断需要做的事情。 中断的作用:中断机制不仅赋予了系统处理意外情况的能力,就可以“同时”完成多个任务,提高了并发“处理”能力。 和线程的区别:线程是同时执行多个任务,中断是停下来去执行其他的(注意优先级),执行完了再回来执行, 定时器才相当于线程,定一个时间,每到这个时间执行一次 二、中断概述 STM32F4并没有使用CM4内核的全部东西,而是只用了它的一部分。 STM32F40xx/STM32F41xx总共有92个中断 STM32F42xx/STM32F43xx则总共有96个中断 STM32F40xx/STM32F41xx的92个中断里面,包括10个内核中
[单片机]
7、STM32的<font color='red'>外部中断</font><font color='red'>EXTI</font>及NVIC中断优先级介绍(内附代码)
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved