关于STM32中断的部分理解

发布者:asdfrewqpp最新更新时间:2017-11-03 来源: eefocus关键字:STM32  中断 手机看文章 扫描二维码
随时随地手机看文章

中断这个问题从学习stm32一开始就困扰着我,我想估计很多初学者都会有这样的问题。曾经问过隔壁实验室的职工,人家没告诉我,让我自己回去理解。同行是冤家,这句话很在理。

       首先提出我对几个中断的理解不了的问题:

1、中断是干嘛的?

2、中断是如何从函数进入的?

3、中断相关设置是如何设置的?

第一个问题:关于中断可以有一个很形象的解释:你正在吃饭,突然尿急了,准备去尿尿,中断了吃饭的这一过程。从程序上解释就是吃饭可以分解为一系列的动作,称为主程序,每个动作相当于函数,组成了这个主程序。这时候你尿急了,产生了一个信号,相当于中断信号,告诉大脑CPU,现在尿急比较重要,不然会尿裤子。这时候大脑会停下吃饭这一主程序,去执行撒尿这程序,相当于中断服务程序。撒尿这个过程也是有一系列动作组成的,每个动作也相当于函数。这就是中断的产生。

第二个问题:中断是如何从函数进入的?这个问题困扰了我有一段时间,每个函数都有入口函数。那中断函数的入口是什么呢?我在查找手册和资料的时候,所有答案都告诉我是中断服务函数:

void XXX_IRQHandler(void)

{


}

可是回到主函数中怎么也找不到这个XXX_IRQHandler(void)这个函数作为入口,很难理解。其实中断函数的入口确实就是终端服务函数,但是主程序中不需要单独的函数入口。中断的进入是其实是靠检测中断标志位进入的。以这段代码为例:

void USART3_IRQHandler(void)

{

u8 res;

 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)

{

 res =USART_ReceiveData(USART3);

if((USART3_RX_STA&(1<<15))==0);

{

if(USART3_RX_STA

  TIM_SetCounter(TIM7,0);

if(USART3_RX_STA==0)

 TIM_Cmd(TIM7,ENABLE);

 }

USART3_RX_BUF[USART3_RX_STA++]=res;

  }else

{

USART3_RX_STA|=1<<15;

}

  }

}

}

这段程序主要是想如果串口三的数据是满的if((USART3_RX_STA&(1<<15))==0);则不接受其他数据,如果是没有超过接收数据,但接收时间超过定时器里面的时间,则强制接收完成。

这里的中断其实就是通过 if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)这句代码来进入的,这是stm32内部进行的,这里的USART_IT_RXNE是接收中断标志位,只要串口USART3接收到数据,就会自觉的进入中断,而不需要在主函数中提供中断函数的入口。还是拿人尿急比喻,大脑CPU接收到尿急的中断标志之后,自觉的进入尿尿的各个动作(各个函数),而不需要在吃饭这个主程序中刻意地加入尿尿这一步骤。总结起来就:中断不要入口,只要系统检测到了一个中断标志,系统就会干中断服务函数要求干的事情。

第三个问题:中断的设置。中断设置主要分为三个部分:1)中断开启,2)中断优先级设置,3)中断服务函数设置。1)中断开启很好理解,开启要说明开启的资源,和中断标志。这里的资源是指是串口、定时器等等,中断标志就是一种资源往往有很多种中断标志比如串口的中断就有:USART_IT_PE(奇偶错误中断)、USART_IT_TXE(发送中断)、USART_IT_TC(传输完成中断)、USART_IT_RXNE(接收中断)、USART_IT_IDLE(空闲总线中断)、USART_IT_LBD(LIN中断检测中断)、USART_IT_CTS(CTS中断)、USART_IT_ERR(错误中断)这些中断标志。2)中断优先级主要是通过NVIC(嵌套中断向量器)来设置的,这个寄存器主要是用来确定各个中断的优先级的,决定不同中断的执行顺序。仍然以吃饭举例,吃饭期间尿急了,同时手机来个电话,也就是执行吃饭这个主程序的时候来了两个中断标志,这时候先执行哪一个是由设置NVIC来决定先接电话还是先撒尿。3)中断服务函数主要包括两部分,一部分是就是具体执行中断的函数,就好比是撒尿的步骤和接电话的步骤都是在中断服务函数里执行的,另一部分是消除中断标志,这个中断事件都干完了,自然要消除中断,撒尿完了,自然要解除尿急的中断标志。

以上就是初学中断过程中容易困扰的问题。


关键字:STM32  中断 引用地址:关于STM32中断的部分理解

上一篇:STM32串口在首次发送字符的时候,首字符丢失解决办法
下一篇:STM32定时器初始化就进中断问题

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

关于STM32的ADC/DAC问题集锦
1、STM32的DAC转换是什么开始的呢? 问:STM32的DAC转换是什么开始的呢?如何利用DAC输出一个脉宽的控的单脉冲呢? 答:DAC是通过写入DAC输出寄存器开始的。另外,如果想要脉冲,使用TIM功能。 2、STM32的DAC输出电压 问:DAC的输出电压是如何调节的呢,输入的数字量和输出的电压怎么不成比例呢,输出电压不符合数据手册上提供的公式(DAC输出 = VREF X DOR / 4095),求高人指点,程序如下: #include stm32f10x_lib.h #define DAC_DHR8R1_Address 0x40007410 DAC_InitTypeDef DAC_InitStructure;
[单片机]
STM32】HAL库-电源控制(低功耗模式)
电源框图 ADC单独供电 为了提高转换的精确度,ADC使用一个独立的电源供电,过滤和屏蔽来自印刷电路板上的毛刺干扰。 ADC的电源引脚为VDDA 独立的电源地VSSA 电池备份区域 当VDD断电时,可以保存备份寄存器的内容和维持RTC的功能。 VBAT为RTC、LSE(低速外部时钟)振荡器、备份寄存器和PC13至PC15供电。 当备份区域由VDD(内部模拟开关连到VDD)供电时,下述功能可用: PC14和PC15可以用于GPIO或LSE引脚 PC13可以作为通用I/O口、TAMPER引脚、RTC校准时钟、RTC闹钟或秒输出 当后备区域由VBAT供电时(VDD消失后模拟开关连到VBAT),可以使用下述功能:
[单片机]
【<font color='red'>STM32</font>】HAL库-电源控制(低功耗模式)
基于STM32的printf串口数据输出
该方法适用于STM32,实现了使用printf等标准C流函数输出数据的办法,极大的减少了输出串口数据时所需要做的数据处理。 实现原理 在C库中,printf()等输出流函数都是通过fputc()这个函数实现的,所以我们通过重映射的方式,修改这个函数的定义使它输出在STM32的寄存器中,便可以实现使用printf()函数在STM32串口上输出数据的功能。 Keil环境 重映射 在STM32的Keil开发环境中,C的库函数有两种实现方式 使用标准的C函数库 就是我们平常在PC Window平台上用的C库函数,此库的的优点在于实现的功能全面。但是由于这个库基本上是专为PC设计的,故而如果在嵌入式芯片中调用时将会使得工程文件变
[单片机]
基于<font color='red'>STM32</font>的printf串口数据输出
STM32之 IP ICMP ETHERNET的实现
1.前言 嵌入式以太网开发是一个很有挑战性的工作。通过几个月的学习,个人觉得大致有两条途径。第一条途径,通过高级语言熟悉socket编程,例如C#或C++,熟悉bind,listen,connect,accept等函数,在嵌入式系统中应用 lwIP协议栈。第二种途径,通过分析嵌入式以太网代码,结合TCPIP协议栈规范逐步实践协议栈代码。第一种途径效率高,开发周期短,编写出来的代码性能稳定,第二种途径花的时间长,开发出来的代码功能不完善,但是由于紧紧结合TCPIP规范,可以了解的内容较多,适合学习。本文通过分析和修改AVRNET源码并移植到STM32平台,逐步实现TCPIP协议栈的各个子部分,包括ETHERNET部分,ARP部分,I
[单片机]
基于STM32的Doxygen使用简明手册
为了能使代码能够被Doxygen识别,必须遵循Doxygen的书写规则。注释必须以/打头,以*/结束。 一、添加类型 1、 添加首页(mainpage): 格式: / \mainpage RIOM DSP Software Library * * b Introduction /b * * This user manual describes the CMSIS DSP software library */ 关键字: \mainpage 描述: 用以显示在首页中,一般用于对整个工程进行描述。 2、 添加define分组(defgroup): 格式: / @defgroup ZHM2
[单片机]
STM32笔记(八)---通信概念
一、串并行概念 1-1 概念 按数据传送的方式,通讯可分为串行通讯与并行通讯。 串行通讯是指设备之间通过少量数据信号线(一般是 8 根以下),地线以及控制信号线,按数据位形式一位一位地传输数据的通讯方式。 并行通讯一般是指使用 8、 16、 32 及 64 根或更多的数据线进行传输的通讯方式。 并行通讯就像多个车道的公路,可以同时传输多个数据位的数据,而串行通讯就像单个车道的公路,同一时刻只能传输一个数据位的数据。 常见串行通信:USART、I2C、SPI 常见并行通信:SDIO(4位)、FSMC(16位) 1-2 串行与并行通信的特性对比 二、 全双工、半双工及单工通讯 USART、SPI均可为半/全全双
[单片机]
<font color='red'>STM32</font>笔记(八)---通信概念
单片机小白学习之路(十四)---外部中断1实现蜂鸣器报警
目标:定时器和计数器的理解(一) 1.定时器/计数器简介 定时器/计数器(Timer/Counter,简称T/C)是单片机中最基本的接口之一。即可以定时又可以计数。常用于计数、延时、测量周期/脉宽/频率、提供定时脉冲信号等。 8051系列单片机至少含有2个16位的T/C,STC89C51/52含有3个T/C。其中2个为基本定时器/计数器T/C0和T/C1,另一个是T/C2。可通过软件配置为定时器功能或者计数器功能。 定时/计数器的工作原理 定时/计数器实质上是一个加1计数器。当工作在定时器模式时,对振荡源(晶振)12分频(12分频就是震荡周期,单位 是us)的脉冲计数,即每个机器周期(12个震荡周期就是1/12us12=
[单片机]
基于STM32物联网开发板(4)--LCD屏
1.概述 屏幕尺寸为1.3寸,分辨率240*240,颜色格式RGB565,驱动IC:ST7789VW; 超大可视角度:大于160°(显示屏中可视角度最大的一种屏幕); 宽电压供电(3V~5V),兼容3.3V和5V电平逻辑,无需电平转换芯片; 采用7线制SPI接口; 工作温度范围为工业级(-20℃~60℃); 军工级工艺标准,长期稳定工作; 硬件接口: 引脚 说明 LEDK PB0背光 CS PA4片选 SCL PA5时钟 SDA PA7主机输出 RES PB1复位脚(电平复位) D/C PC4数据命令选择脚 2.通讯协议 ST7789VW是一款用于262K彩色图形型TFT-LCD的单片
[单片机]
基于<font color='red'>STM32</font>物联网开发板(4)--LCD屏
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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