-
51单片机中断号对应的中断类型
2019-08-07 08:36:08中断源 默认中断级别 外部中断0 INT0 最高 interrupt 0 定时器0中断 T0 ...中断源 默认中断级别 外部中断0 INT0 最高 interrupt 0 定时器0中断 T0 1 interrupt 1 外部中断1 INT1 2 interrupt 2 定时器1中断 T1 3 interrupt 3 串口中断 TX/RX 4 interrupt 4 与中断系统相关的特殊寄存器:
中断寄存器就是用于存贮中断状态的,包含是否启用中断或者是否发生中断。
1)中断允许控制寄存器(IE)------------------ 控制各中断的开放和屏蔽
2)中断优先级控制寄存器(IP)----------------设置各中断的优先级
3)定时器/计数器控制寄存器(TCON)------定时器和外部中断的控制
4)串行口控制寄存器(SCON)----------------串行中断的控制
中断类型分为三类:
1)T0、T1是2个定时器/计数器中断,由片内定时器提供;
2)INT0、INT1是2个外部中断,由引脚P3.2和P3.2提供;
3)RX、TX为串行口中断所用,由片内串口提供。
串口初始化
void uart_init(void) { T2CON=0x30; //用定时器2做串口0的波特率发生器 RCAP2H=(65536-22118400/baud_rate/32)/256; RCAP2L=(65536-22118400/baud_rate/32)%256; SCON=0x50; //串口0工作在模式3 M0=1 SM1=1 在11位异步收发模式 接收允许 TR2=1; //开启定时器2 ES=0; //关闭串口中断 EA=1; //打开总中断 } void UART0(void) interrupt 4 { ... }
11.0592M晶振下 baut=f/{32*[65536-(RCAP2H,RCAP2L)]}
fee0--1200 ff70--2400 ffb8--4800 ffdc---9600 ffee--19200 fff7--38400 fffa--57600 fffd--115200
22.1184M晶振下
fdc0--1200 fee0--2400 ff70--4800 ffb8---9600 ffdc---19200 ffee--38400 fff4--57600 fffa--115200定时器初始化
void Timer_init(void) //定时器0定时10ms { TMOD|=0x01; //T0定时 16位 TR0控制 TH0=0xb8; TL0=0x00; TR0=1; //开启定时器 ET0=1; //T0中断开 EA=1; //打开总中断 } void time_0(void) interrupt 1 { TL0=0x00; TH0=0xb8; }
定时器计算方法:
22118400M/12=1843200 每秒1843200次
10ms=0.01s = 18432次
65536-18432= 47104 = B800
-
STM32的中断系统和外部中断(基于STM32CubeMX开发)
2020-05-05 16:14:45一 概述 STM32芯片有16个外部中断源,EXTI0-...EXTI0对应每个端口组的0号引脚,也就是说 EXTI0的连接引脚为PA0-PG0。以此类推,EXTI1、EXTI2、EXTI3、EXTI4分别对应每个端口组的1、2、3、4号引脚。 而EXTI5-EXTI9为...一 概述
STM32芯片有16个外部中断源,EXTI0-EXTI15,分别对应着七个中断服务函数,其中有五个EXTI0,EXTI1,EXTI2,EXTI3,EXTI4是专用的,其余为共用。
EXTI0对应每个端口组的0号引脚,也就是说 EXTI0的连接引脚为PA0-PG0。以此类推,EXTI1、EXTI2、EXTI3、EXTI4分别对应每个端口组的1、2、3、4号引脚。
而EXTI5-EXTI9为5-9端口共用,而EXTI10-EXTI15为10-15端口共用。具体的表示如图所示:
外部中断触发条件有:上升沿触发,下降沿触发,双边沿触发。注意不能配置成高电平低电平触发。
二 设计步骤
基于STM32CubeMX的外部中断设计步骤:
【1】在STM32CubeMX中指定引脚,配置中断初始化参数。
选择GPIO引脚的功能,设置中断信号触发条件,使能NVIC对应的中断通道。
【2】重写该I/O引脚对应的中断回调函数。
三 具体操作
例:将PC13引脚设置成外部中断,下降沿触发,在终端服务函数中,翻转PB9引脚的电平信号。-
首先配置时钟和系统选项
-
我采用的是ST-LINKV2仿真器,所以我选用了serial wire串行线路。同时在硬件上要将单片机最小系统的BOOT0和BOOT1都置为0。
-
同时如图所示配置中断,输出引脚:
-
将引脚参数,中断参数配置完成:
其余关于STM32CubeMX项目建立等其他操作不再赘述。如图所示:
四 代码执行
- 在keil工程文件里会发现一个stm32f1xx_it.c文件,里面保存的就是中断的一些代码。
在main文件里将会看到 MX_GPIO_Init();,里面包含外部中断的初始化。
void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_RESET); //设置PB9为输出 /*Configure 配置 GPIO pin : PC13 */ GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure 配置 GPIO pin : PB9 */ GPIO_InitStruct.Pin = GPIO_PIN_9; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI15_10_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn); //中断初始化 }
- 接下来我们重写该I/O引脚对应的中断回调函数:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if(GPIO_Pin==GPIO_PIN_13) { HAL_GPIO_TogglePin(GPIOB ,GPIO_PIN_9); } }
运行,即可看到效果。
注:
本笔记为欧浩源老师STM32课程的一些梳理,对应的视频为:
https://www.bilibili.com/video/av87017878?p=4 -
-
外部中断配置过程
2020-06-22 00:47:04开启所有外部中断源管脚对应的GPIO时钟和AFIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx|RCC_APB2Periph_AFIO, ENABLE) 定义GPIO初始化结构变量, GPIO_InitTypeDef GPIO_InitStructure; 赋值结构变量...①初始化GPIO;
②初始化NVIC;;
③初始化EXTI
④编写中断服务函数。①初始化GPIO
- 开启所有外部中断源管脚对应的GPIO时钟和AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx|RCC_APB2Periph_AFIO, ENABLE)
- 定义GPIO初始化结构变量,
GPIO_InitTypeDef GPIO_InitStructure;
- 赋值结构变量各成员
GPIO_InitStructure.GPIO_Pin=管脚号0~15 ; .mode= GPIO_Mode_IN_FLOATING(浮空输入);
- 调用GPIO初始化函数:GPIO_Init(& GPIO_InitStructure);
- 如果有多个中断源,重复步骤3~4。
②初始化NVIC;
- 设置优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_n);
- 定义NVIC初始化结构变量,并赋值结构变量各成员
NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel =中断号; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =抢占优先级; NVIC_InitStructure.NVIC_IRQChannelSubPriority =子优先级; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
- 调用NVIC初始化函数。
NVIC_Init(&NVIC_InitStructure);
- 如果有多个中断源,重复步骤2~3
③初始化EXTI
- 定义EXTI初始化结构变量 EXTI_InitTypeDef EXTI_InitStructure;
- 选择EXTI的信号源,设置外部中断配置寄存器AFIO_EXTICR相关位
GPIO_EXTILineConfig()
- 赋值结构变量各成员
EXTI_InitStructure.EXTI_Line =信号源 EXTI_InitStructure.EXTI_Mode =中断模式 EXTI_InitStructure.EXTI_Trigger =触发方式
- 调用EXTI初始化函数
EXTI_Init(&EXTI_InitStructure);
如果有多个外部中断源,重复步骤2~4.
④编写中断服务函数。
• 在启动文件startup_stm32f10x_hd.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。实际的中断服务函数都需要我们重新编写,为了方便管理,可以把中断服务函数统一写在stm32f10x_it.c 这个库文件中。
• 关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口,直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。
• 对每个中断号编写中断服务函数,对于EXTI9-5 和EXTI15-10,多个中断源公用同一个中断号时,可以在中断服务函数中判断具体是哪一个中断源被触发,然后根据中断源编制相应的响应程序。
void EXTIx_IRQHandler(void); void EXTI9_5_IRQHandler(void)
• 重要提醒,中断服务函数中,为确保确实产生了中断请求,通常需要检查一下状态标识位确认确实产生了该中断。同时,为避免一次中断请求执行多次中断服务程序,中断服务程序最后需要清除该中断标识位。例如:if(EXTI_GetITStatus(KEY3_INT_EXTI_LINE) != RESET) //确保是否产生了EXTI Line中断 {… EXTI_ClearITPendingBit(KEY3_INT_EXTI_LINE); //清除中断标志位 }
-
【蓝桥杯单片机组】外部中断
2017-02-20 10:08:18需要操作的寄存器TCON: ITx EXx 编程步骤: (1)选触发方式 (2)开外部中断 (3)开总中断 ...外部中断引脚如上图,对应独立按键S5 S4,外部中断号:0(EX0)/2(EX1) 附:init.c void cls_需要操作的寄存器TCON: ITx EXx
编程步骤:
(1)选触发方式
(2)开外部中断
(3)开总中断
IT0=1; //IT0=1,下降沿触发外部中断0,IT0=0边沿触发 EX0=1;//使用外部中断0 EA=1;
外部中断引脚如上图,对应独立按键S5 S4,外部中断号:0(EX0)/2(EX1)附:init.c
void cls_buzz(void) { P2 = (P2&0x1F|0xA0); P0 = 0x00; P2 &= 0x1F; } void ex0_init() { IT0=1; //IT0=1,下降沿触发外部中断0,IT0=0边沿触发 EX0=1;//使用外部中断0 EA=1; }
main.c#include <reg52.h> #include "init.h" sbit L1=P0^0; int main(){ cls_buzz(); ex0_init(); while(1){} } void Ex_int0() interrupt 0 //外部中断优先级最高 { P2=((P2&0x1f)|0x80); L1=~L1; P2=(P2&0x1f); }
-
CC2530之外部中断
2018-02-02 13:01:19在本次学习中,主要通过外部中断来控制LED的亮灭。 首先,先查看相关电路图。由图可知,当CC2530端口1的0号引脚输出低电平时,LED1将被点亮,当按键S1按下时,端口0的1号引脚将为低电平,抬起时为高电平。在接下来... -
Linux驱动编程day6-外部中断处理
2016-08-28 23:06:58最基本的中断:外部高低电平中断 中断源:中断号60,PIO中断, 选择有中断输入功能的GPIO口作为中断输入 ...#define D12 PI13设置PI12、PI13脚的功能为EINT功能(对应不同的中断编号)#define PI12_13_SELECT_MASK (0 -
zynq AMP模式下CPU1如何响应外部中断
2019-12-27 14:55:01若我以同样的初始化方式在CPU1中进行串口初始化,此时,CPU1无法响应中断,在查阅了相关资料之后,发现若要使中断生效,则需要将指定的中断号map到对应的CPU,关键函数调用:XScuGic_InterruptMa... -
OK6410裸机程序(三)——外部中断
2013-03-24 14:17:08OK6410裸机程序(三)——外部中断 s3c6410具有187个多功能I/O端口,其实...每个中断引脚,都有相对应的中断号,如(GPN0 = Ext.Interrupt[0]). 这里给大家分一下: EINT0 GPN0--->GPN15 GPL8--->GPL1 -
中断
2017-08-09 15:37:53为了区别不同的中断,引入了中断号,单片机的中断号对应的中断类型如下: 中断号 中断源 中断向量 复位 0000H 0------------外部中断0-------------------------0003H 1-----------定时器中断0-------------------... -
两个外中断的应用
2015-03-04 10:28:38两个外中断的应用 中断服务函数的格式 函数类型 函数名(形参)interrupt n using n ...关键字interruot 后面的n 是中断好 对应8051 中断号 0~4 n 中断源 中断向量 (8*n +3) 0 外部中断 0003h 1 定时器0 -
51单片机的中断系统(五)
2017-09-18 17:41:54中断的概念,就不再累赘了。反正就是中断来的时候,停下手中的活,先忙中断事情,然后在回来继续干。就好像正在家里洗碗,突然门铃响了,有快递送来(中断...外部中断有外部中断0 和 外部中断1 对应的中断号分别为 0 和 -
物联网项目————M0中断
2013-11-22 00:20:52M0内核PLC11C14的中断和其他arm产品的中断不一样,PLC11C14芯片手册上说有32个中断0-31,其中27号中断保留,0-11共十二个是静态的中断向量,有外部引脚P0端口的, P0_0到P0_11,一一对应,12号中断由P1_0对应。PLC... -
单片机中断系统
2017-10-08 21:38:12今天查阅相关资料,基本了解了51单片机中断系统的相关知识 一、51单片机的中断系统规模:5个中断...外部中断0 INT0 (P3.2) 定时/计数器0 T0 (P3.4) 外部中断1 INT1 (P3.3) 定时/计数器1 T1 (P3.5) 串行口 —— -
中断及中断描述符表
2020-03-03 20:39:061.中断 外部硬件中断:从处理器外部来的中断信号,通过两个信号线...INTEL处理器允许256(0~255)个中断,8259负责提供其中15个,但中断号不固定;8259内部有8位中断屏蔽寄存器(IMR),对应8个中断输入引脚;8259有... -
中断描述符表IDT以及Linux内核IDT表的初始化的基本情况
2020-05-14 16:47:21IDT,Interrupt Descriptor Table,中断描述符表是CPU用来处理中断...CPU执行中断指令时,会去IDT表中查找对应的中断服务程序(interrupt service routine ,ISR)。ISR(为了表述方便用ISR n表示n号中断的处理程序... -
Linux0.11中断及系统调用
2018-05-28 16:16:25中断简介Linux0.11使用的Intel i386芯片共有256个中断,表现为中断号0~255.其中前0~31号中断已经由Intel预定义,其余中断号为可编程中断。32~47号分别对应linux的16个硬件中断信号(包括时钟、键盘、软盘等)。0x80... -
STM32 中断实验
2020-06-17 21:58:28STM32支持19个外部中断请求,也即有19根中断线来响应 线 0~15:对应外部 IO 口的输入中断。 这16根线每根对应7个IO口,从A~G,号码与线号对应,但每次只能连接到一个IO口上 线 16:连接到 PVD 输出。 补充 PVD = ... -
中断和异常
2013-09-29 09:41:44如向量号0对应着IDT表中的第一个门描述符。 3、软中断指令“INT n”和“INTO”也归类于异常而不称为中断。(CPU外部的叫中断,CPU内部的叫异常) 异常分为3类:故障& 陷阱 & 中止... -
《tiny6410裸机程序》第八章:S3C6410总中断控制寄存器
2012-12-13 23:46:19子中断组的划分是根据设置它们的...上一章节我们分析的28个外部中断即第0组外部中断与总中断的对应关系是: 总中断号 中断源组 中断源成员描述 对应总中断控制器 0 INT_EINT0 外部中断的EINT0~EINT -
操作系统开发系列—8.时钟中断
2016-04-13 19:05:00外部中断的情况复杂一些,因为需要建立硬件中断与向量号之间的对应关系。外部中断分为不可屏蔽中断(NMI)和可屏蔽中断两种,分别由CPU的两根引脚NMI和INTR来接收。如下图所示: 可屏蔽中断与CPU的关系是通过对可... -
51中断函数编写注意事项
2010-09-25 16:09:0051中断函数学习笔记 释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取的 interrupt xx using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第... -
STM32的EXTI小实验
2015-12-16 15:55:36所有GPIO口的0号引脚对应EXTI0中断线,类似的PA1~PG1对应EXTI1中断线。 中断服务函数 中断服务函数名必须与启动文件startup_stm32F10x_hd.s的中断向量表定义一致 中断线0~4对应EXTI0_IRQHan -
interrupt 1 using 1
2014-04-07 17:10:00释疑:void Timer0() interrupt 1 using 1 Timer0 是函数名,随便取的 ...跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3... -
HT32F52352学习笔记之三
2019-01-28 02:07:24这个外部中断有15个中断号,即EXTI0-15,还是很多的。初始化过程中需要配置EXTI 来源选择寄存器 0 – ESSR0或是EXTI 来源选择寄存器 1– ESSR1选择中断来源。这个是一一对应的关系,比如选着了GPIOA的引脚4,那么就... -
interrupt using
2008-11-21 15:41:00interrupt 表示中断优先级,using表示所用工作寄存器组。interrupt x using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断 -
void timer(void) interrupt x using x
2011-05-18 16:13:00interrupt x using y 跟在interrupt 后面的xx 值得是中断号,就是说这个函数对应第几个中断端口,一般在51中 0 外部中断0 1 定时器0 2 外部中断1 3 定时器1 4 串行中断 其它的根据相应得单片机有... -
基于AT89S52 单片的频率计
2010-01-04 08:47:37一种量程,测量结果通过浮点数运算模块将信号周期转换成对应的频率值,再将 结果送去显示。这样无论采用何种方式,只要完成一次测量即可,频率计自动开 始下一个测量循环,因此该频率计具有连续测量的功能,同时实现量程... -
ADC809的运用及电路
2010-08-06 20:41:33允许外部中断1中断 MOV DPTR, #0FEF8H ;D/A转换器地址 LOOP: MOVX @DPTR, A ;启动A/D转换 HERE: SJMP HERE ;等待中断 中断服务程序: DJZ R2, ADEND MOVX A, @DPTR ;数据采样 MOVX @R0, A ;存数 INC ... -
都是想要的考试题 速度下载
2010-05-24 10:11:059. 8086/8088在当前指令执行完且IF=1的情况下可以响应一个外部INTR中断请求。( ) 10. 8086被复位后,寄存器Flag、IP、CS的内容分别是0000 、0001 、FFFFH。 ( ) 四、汇编程序(共20分) 1. 试分析下面的程序段完成...
-
用正交柱形透镜制作白光再现全息图
-
Android实现伴奏录音合成MP3
-
squiggly-clojure:使用Eastwood和core.typed的Clojure Flycheck检查器-源码
-
软件项目需求调研报告模板.doc
-
【硬核】一线Python程序员实战经验分享(1)
-
物联网之mqtt实现(emqx+springboot+mqtt附源码)
-
项目管理工具与方法
-
Python文件操作
-
HTC shift 解锁工具USBTOOL
-
Python类与面向对象
-
mysql之视图22
-
java-web连接数据库(JDBC)
-
Java基础-集合
-
html2canvas.js
-
Element UI实战教程之input输入框组件05
-
电能表:断路器盒中的电能表有一个LED,每次我消耗1Wh能量时,该LED都会闪烁。 该项目使用Arduino nano和光电管检测每个脉冲,并计算瞬时功率和电流,并显示经过的瓦特小时-源码
-
Mycat 实现 MySQL的分库分表、读写分离、主从切换
-
win10中有道词典以及部分软件中文显示乱码问题解决方案
-
LaTeX常用的数学符号
-
MMM 集群部署实现 MySQL 高可用和读写分离