-
2022-05-17 07:41:38
AFIO_EXTICR1(选择0 1 2 3端口),
AFIO_EXTICR2(选择4 5 6 7端口),
AFIO_EXTICR3(选择8 9 10 11端口),
AFIO_EXTICR4(选择12 13 14 15端口).
四个中断配置寄存器,分别配置到STM32的0---15号管脚。
用0 1 2 3(EXTI0),4 5 6 7(EXTI1),8 9 10 11(EXTI2),12 13 14 15(EXTI3)
0 1 2 3(EXTI4),4 5 6 7(EXTI5),8 9 10 11(EXTI6),12 13 14 15(EXTI7)
0 1 2 3(EXTI8),4 5 6 7(EXTI9),8 9 10 11(EXTI10),12 13 14 15(EXTI11)
0 1 2 3(EXTI12),4 5 6 7(EXTI13),8 9 10 11(EXTI14),12 13 14 15(EXTI15)
位组合,来选择A,B,C,D,E,,F,G端口引脚
0000 PA端口
0001 PB端口
0010 PC端口
0011 PD端口
0100 PE端口
0101 PF端口
0110 PG端口更多相关内容 -
DM642和CPLD外部中断的寄存器式键盘设计
2020-10-21 08:30:17摘要:介绍了一种采用DM642和CPLD相配合的扩展键盘方法...CPLD管理键盘电路中的芯片逻辑,DM642的外部中断监控按键的状态。简单阐述了键盘的分类,给出系统的硬件电路原理图,在CCS软件中调试程序方法。仿真结果表明, -
STM32的外部中断(寄存器控制)——个人笔记
2020-09-23 15:07:11我感觉stm32的外部中断都是大同小异的,因此我以stm32g474为例,配置一下外部中断。举例引脚: PE5 配置引脚为输入模式(GPIOx_MODER); 配置触发模式(上升沿/下降沿); 配置EXTI的中断屏蔽寄存器(EXTI_IMR)...我感觉stm32的外部中断都是大同小异的,因此我以stm32g474为例,配置一下外部中断。举例引脚: PE5
- 配置引脚为输入模式(GPIOx_MODER);
- 配置触发模式(上升沿/下降沿);
- 配置EXTI的中断屏蔽寄存器(EXTI_IMR);
- 配置具体触发引脚(SYSCFG_EXTICR);
- 配置中断允许(ISER);(当然也可以配置优先级分组,我这里不需要,因此省略)
首先看EXTI的中断/事件框图:
要想触发中断,首先经过“边沿检测器”,而边沿检测器需要配置上升沿检测还是下降沿检测。然后通过或门,可以看到或门的另一个输入连接着“软件中断事件寄存器”,这个寄存器可以不用管,然后就是 与上一个 “中断屏蔽寄存器”,最后连接到“中断挂起寄存器”,因此可以看到触发中断需要配置“边沿检测器”和“中断屏蔽寄存器”就可以触发中断了(唤醒和事件也以此类推)。以PE5举例:EXTI->RTSR1 |= 0x0020; EXTI->IMR1 |= 0x0020;
配置完之后发现并不能进入中断,那是由于中断允许位没有配置。由于是PE5,那么该引脚属于EXTI5-line,在STM32G4系列向量表中找到EXTI5:
表中说EXTI的lin5~9都共用这一个向量,那就是它了。配置ISER寄存器的第22位。NVIC->ISER[0] = 0x00800000;
编译运行,发现PE5的上升沿不能进入中断,PA5的上升沿可以,可能还有个选择端口的寄存器,再看手册:
嗷嗷,还要配置SYSCFG_EXTICR寄存器啊,康康寄存器说明:
PE5,那就将这个寄存器配置为0x00000040:SYSCFG->EXTICR[1] = SYSCFG_EXTICR2_EXTI5_PE;
OK,这样就可以通过PE5顺顺利利地进入中断了,中断函数名称不确定的话可以在“.s”文件中找:
OK,结束垃圾流水账。
-
STM32自学笔记EXTI(外部中断)寄存器
2019-12-07 20:55:57EXTI寄存器外部中断通用I/O映像中断处理函数分配EXTI寄存器一览中断屏蔽寄存器(EXTI_IMR)事件屏蔽寄存器(EXTI_EMR)上升沿触发选择寄存器(EXTI_RTSR)下降沿触发选择寄存器(EXTI_FTSR)软件中断事件寄存器(EXTI_SWIER)...EXTI寄存器
外部中断通用I/O映像
中断处理函数分配
EXTI寄存器一览
以下图片全部摘自STM32中文参考手册
中断屏蔽寄存器(EXTI_IMR)
往对应的位写1就是开启中断,写0就是关闭中断
例如开放来自线0上的中断请求
EXTI->IMR|=1<<0;//开放来自线0上的中断请求
事件屏蔽寄存器(EXTI_EMR)
参考**中断屏蔽寄存器(EXTI_IMR)**的操作
上升沿触发选择寄存器(EXTI_RTSR)
设置对应的外部中断触发事件为上升沿
上升沿就是电平从0到1例如允许输入线0上的上升沿触发
EXTI->RTSR|=1<<0;//允许输入线0上的上升沿触发
下降沿触发选择寄存器(EXTI_FTSR)
设置对应的外部中断触发事件为下降沿
下降沿就是电平从1到0例如允许输入线0上的下降沿触发
EXTI->FTSR|=1<<0;//允许输入线0上的下降沿触发
软件中断事件寄存器(EXTI_SWIER)
对应位写1则触发中断
挂起寄存器(EXTI_PR)
这个寄存器和SR寄存器差不多,都是检查相应的中断是否发生,不同的是清除的方式
外部中断配置寄存器 1(AFIO_EXTICR1)
外部中断配置寄存器 2(AFIO_EXTICR2)
外部中断配置寄存器 3(AFIO_EXTICR3)
外部中断配置寄存器 4(AFIO_EXTICR4)
实例操作
这里我们开启外部中断线0上的PA0
步骤
1)开启PA的时钟,配置IO
RCC->APB2ENR|=1<<2;//使能PA时钟 GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零 GPIOA->CRL|=0X00000008;//PA0下拉输入 GPIOA->ODR|=0<<0;//PA0下拉
2)开启复用时钟,设置 IO 口与中断线的映射关系
RCC->APB2ENR|=1<<0;//开启复用辅助时钟 AFIO->EXTICR[0]&=~(0XF<<0);//清除原来的设置 AFIO->EXTICR[0]|=0<<0;//外部中断0映射到PA0上
特别注意这里的AFIO->EXTICR寄存器的编号
3)开启外部中断线上中断,设置触发条件
EXTI->IMR|=1<<0;//开放来自线0上的中断请求 EXTI->RTSR|=1<<0;//允许输入线0上的上升沿触发
4)配置中断分组(NVIC),并使能中断
MY_NVIC_Init(2,3,EXTI0_IRQn,2); //抢占2,子优先级3,组2
5)编写中断服务函数
//外部中断0服务程序 void EXTI0_IRQHandler(void) { delay_ms(10); //消抖 if(GPIOA->IDR&1<<0) //PA0按下 { LED1=!LED1; } EXTI->PR=1<<0; //清除线0上的中断标志位 }
源文件
EXTI.C
#include "EXTI.h" #include "delay.h" #include "led.h" void exti_init(void) { RCC->APB2ENR|=1<<2;//使能PA时钟 GPIOA->CRL&=0XFFFFFFF0;//PA0配置清零 GPIOA->CRL|=0X00000008;//PA0下拉输入 GPIOA->ODR|=0<<0;//PA0下拉 RCC->APB2ENR|=1<<0;//开启复用辅助时钟 AFIO->EXTICR[0]&=~(0XF<<0);//清除原来的设置 AFIO->EXTICR[0]|=0<<0;//外部中断0映射到PA0上 EXTI->IMR|=1<<0;//开放来自线0上的中断请求 EXTI->RTSR|=1<<0;//允许输入线0上的上升沿触发 MY_NVIC_Init(2,3,EXTI0_IRQn,2); //抢占2,子优先级3,组2 } //外部中断0服务程序 void EXTI0_IRQHandler(void) { delay_ms(10); //消抖 if(GPIOA->IDR&1<<0) //PA0按下 { LED1=!LED1; } EXTI->PR=1<<0; //清除线0上的中断标志位 }
EXTI.H
#ifndef __EXTI_H #define __EXTI_H #include "sys.h" void exti_init(void); #endif
MAIN.C
#include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "EXTI.h" int main(void) { Stm32_Clock_Init(9); //系统时钟设置 delay_init(72); //延时初始化 uart_init(72,115200); //串口初始化为115200 led_init(); //LED初始化 exti_init(); //EXTI初始化 while(1) { LED0=!LED0; //LED0用来指示程序正在运行 delay_ms(200); } }
结果
LED0(红灯)闪烁,代表程序正在运行
按下PA0之后,PA0电平由0变到1,LED1亮(绿灯)
-
STM32的EXTI外部中断(直接操作寄存器)
2017-11-28 17:54:11STM32的EXTI外部中断(直接操作寄存器),亲测可用,内有详细代码注释和说明讲解,很好的学习资料。 -
51单片机中断相关寄存器
2018-12-31 15:52:58ET2——定时器2中断 EX1——外部中断1 ET1——定时器1 中断 EX0——外部中断0 中断优先级寄存器IP PS——串口 PT——计时器 PX——外部中断 置0——低优先级 置1——高优先级 定...52单片机中断级别
中断允许寄存器IE
EA——全局中断 ES——串口中断
ET2——定时器2中断 EX1——外部中断1
ET1——定时器1 中断 EX0——外部中断0
中断优先级寄存器IP
PS——串口 PT——计时器 PX——外部中断
置0——低优先级 置1——高优先级
定时器/计数器工作方式寄存器TMOD
- GATE——门控制位
GATE=0定时器启动停止仅受TCON寄存器TRX(X=0,1)控制
GATE=1定时器启动停止受TCON寄存器TRX(X=0,1)和外部中断引脚(INT0或者INT1)上电平状态控制
- C/T——模式选择位
C/T=1,计数器模式 C/T=0,定时器模式
- M1M0——工作方式选择位
M1M0=00 方式0,为13位定时器/计数器
M1M0=01 方式1, 为16位定时器/计数器
M1M0=10 方式2, 为8位初值自动重装的8位定时器/计数器
M1M0=11 方式3,仅适用于T0,分成两个8位计数器,T1停止计数
定时器/计数器控制寄存器TCON
- TF1——定时器1溢出标志位
当定时器1计满,硬件使TF1置1,并申请中断。进入中断后 由软件自动清0。如果是软件查询,需要软件清0。
- TR1——定时器1运行控制位
软件清0关闭定时器1,当GATE=1,且INT1为高电平 TR1置1启动定时器1;GATE=0 TR1置1启动定时器1。
- IE1——外部中断1请求标志
进入中断后硬件自动清零
- IT1——外部中断1触发方式选择位
IT=0, 为电平触发方式,引脚INT1上低电平有效。
IT=1, 为跳变沿触发方式,引脚INT1上的电平从高到低的负跳变沿有效。
电源管理寄存器PCON
- SMOD——该位与串口通信波特率有关
方式0波特率=fosc/12
方式1波特率=(2SMOD/32)*(T1溢出率)
方式2波特率=(2SMOD/64)*fosc
方式3波特率=(2SMOD/32)*(T1溢出率)
- (SMOD0)(LVDF)(P0F)——STC单片机独有功能,可查看相关手册。
- PD——掉电模式
- IDL——空闲模式
串行口控制寄存器SCON
- SM0,SM1——工作方式选择位
SM0,SM1=00 方式0 同步移位寄存器
SM0,SM1=01 方式1 10位异步收发(8位数据)波特率可变(定时器1溢出率控制)
SM0,SM1=10 方式2 11位异步收发(9位数据)波特率固定
SM0,SM1=11 方式3 11位异步收发(9位数据)波特率可变(定时器1溢出率控制)
- SM2——多机通信控制位
- REN——允许串行接收位
- TI——发送中断标志位
需要在中断服务中软件清0
- RI——接收中断标志位
需要在中断服务中软件清0
-
【stm32f103】stm32 外部中断(寄存器版)
2017-09-16 21:23:55【stm32f103】stm32 外部中断(寄存器版) 中断分类 STM32的EXTI控制器支持19 个外 -
外部中断使用指南(寄存器设置)
2021-05-23 08:28:58(寄存器:GPxxCON)例:②配置外部中断触发模式,上升沿触发,下降沿触发,双边触发,高电平触发,低电平触发(寄存器:EXT_INT_x_CON)例:③取消屏蔽外部中断(寄存器:EXT_INT_x_MASK)例:④通过向量中断控制器(VI... -
RCPND和中断未决寄存器INTPND以及外部中断未决寄存器EINTPEND分析
2017-06-24 22:14:44前几天把外部中断基本搞好了,但对几个中断寄存器的具体含义和区别不是很了解。今天特意拿起datasheet详读并网络上查了这方面的资料。将结果记录如下: S3C2440的中断寄存器有6个中断裁决器,分为2级:第一级为5... -
解读LPC210X之外部中断寄存器
2021-01-20 01:07:10LPC2101/02/03多包含了三个外部中断输入作为可选择的管脚功能。管脚进行组合后,外部事件可以处理成三个独立... 有四个寄存器涉及外部中断 External Interrupt -
STC学习:中断相关寄存器
2021-08-19 09:53:42中断允许寄存器IE、IE2和INT_CLKO IE:中断允许寄存器(可位寻址) SFR name bit B7 B6 B5 B4 B3 B2 B1 B0 IE name EA ELVD EADC ES ET1 EX1 ET0 EX0 EA:CPU的总中断允许位,EA=1,CPU开放中断,EA=0,CPU... -
stm32中断相关寄存器
2021-02-18 21:40:53在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体: typedef struct { vu32 ISER[2]; //2个32位中断使能寄存器分别对应到60个可屏蔽中断 u32 RESERVED0[30]; vu32 ICER[2]; //2个32位中断除能寄存器... -
直接对STM32的寄存器操作来实现外部中断配置
2021-12-03 22:30:04直接对STM32的寄存器操作来配置外部中断 -
51单片机外部中断触发方式
2021-01-19 18:16:53也就是说,单片机把每个机器周期的S5P2采样到的外部中断源口线的电平逻辑直接赋值到中断标志寄存器。标志寄存器对于请求信号来说是透明的。这样当中断请求被阻塞而没有得到及时响应时,将被丢失。换句话说,要 -
stm32f4 外部中断寄存器控制操作,解读芯片手册,达到从零写程序
2020-07-15 11:12:00这次解读的stm32 使用外部中断按键控制led灯的代码 开始使用源码分析 先进个main函数 看见我们的重要函数EXTIX_INIT(); 同时使用文档解读 简单来说 1 初始化io口 :设置已经存在的状态 2 让io口和中断线建立映射 :... -
51单片机与中断相关的寄存器
2020-05-22 15:52:5151单片机与中断相关的寄存器简介中断控制寄存器IE中断优先级控制寄存器IP定时器控制寄存器TCON串行口控制寄存器SCON 简介 中断控制寄存器 IE 中断优先级控制寄存器 IP 定时器控制寄存器 TCON 串行口控制寄存器 SCON... -
51单片机外部中断实验 设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此...
2021-01-07 18:19:38设置中断优先级寄存器,当有外部中断0请求中断时,中断程序执行发光二极管程序,在此过程中,外部中断1也有中断请求,外部中断0的中断程序将被中断去执行外部中断1的中断程序(数码管加1显示程序)。 #include<... -
DSP中断实现方式以及寄存器访问
2018-11-14 14:25:43DSP中断实现方式以及寄存器访问,在C语言如何访问寄存器,如何实现三级中断 -
单片机中断的相关寄存器
2021-06-09 18:24:201、定时器控制寄存器(TCON) TCON(88H) 地址8FH8EH 8DH8CH8BH 8AH89H88H 符号TF1TR1 TF0TR0IE1 IT1IE0IT0 TF1:定时器/计时器T1的溢出中断请求标志位。当计数器T1最高位产生溢出时,由... -
stm32学习笔记——NVIC中断相关寄存器
2021-10-15 11:11:31CM3 内核支持 256 个中断,其中包含了 16 个内核中断和 240 个外部中断,并且具有 256 级的可编程中断设置。 但 STM32 并没有使用 CM3 内核的全部东西,而是只用了它的一部分。 STM32 有 84 个中断,包括 16 个... -
STM32_外部中断(寄存器版)_笔记
2016-05-05 21:07:19STM32_外部中断,从程序入手,深度解读每条程序,理解知识点。 -
MCS51单片机定时器外部中断寄存器表
2012-02-10 00:37:22MCS51单片机定时器外部中断寄存器表 -
S3C2440中断寄存器
2020-07-17 10:45:361.中断分两大类。2.外部中断。3.内部中断。4.中断过程。 5.中断的开启。 -
NVIC寄存器组中的中断挂起SETPEND与消除CLRPEND,与外部中断挂起寄存器EXTI_PR
2021-03-22 10:41:41STM32的中断控制是分级管理的,CM3内核中的NVIC是顶层,对每个通道都设有1BIT的中断挂起位, 但每个通道可能不止一个中断源,比如EXTI5_9_IRQn,对NVIC而言,只算一个通道,但实际包含有5个中断源, 因此,下层就... -
蓝桥杯单片机-外部中断
2022-03-17 12:53:05有三个寄存器与中断相关(IE、IP、TCON),主要是应用IE和TCON寄存器 1、 IE寄存器: 中断允许寄存器,字节地址为A8H,可以位寻址 EA: 全局中断允许位 为1时-允许全局中断控制 ET2: ... -
寄存器 中断
2020-08-25 11:05:08ISER[8]: ISER 全称是: Interrupt Set-Enable Registers,这是一个中断使能寄存器组。 有用的就是三个(ISER[0~2]]),总共可以表示 96 个中断。而 STM32F4 只用了其中的前 82 个。 ISER[0]的 bit0~31 分别对应... -
带你模仿正点原子编程风格到深入学习寄存器并手把手编写STM32F103寄存器程序(外部中断--EXTI)
2021-07-13 15:01:12带你模仿正点原子到寄存器编写–外部中断EXTI 前言 对于大家来说学习STM32中断是学的比较迷的,这里是我学中断做的一些笔记希望对大家有所作用。 一、我们先了解一些中断的一些基础知识。 要产生中断,必须先... -
创龙TMS320C6748开发板———中断介绍(1)中断及中断相关寄存器
2017-01-13 21:26:33一、中断模块寄存器介绍 本节我们主要介绍C6748的中断模块。 中断是硬件系统的基本功能,DSP通过中断实现和其他芯片的实时交互。中断是指DSP在执行程序的过程中,当出现异常情况或特殊请求时,DSP停止...