STM32基础4--中断系统

发布者:快乐兔子最新更新时间:2022-07-25 来源: csdn关键字:STM32  中断系统  Main函数 手机看文章 扫描二维码
随时随地手机看文章

为什么需要中断

在使用单片机时,最开始我们会使用一个Main函数,然后所有的功能都往里丢。在任务少的时候,并没有什么问题。例如在main函数添加点亮LED,添加延时函数,添加KEY扫描。


一切都好像完美运行,但是如果我们将延时的时间加长,然后去KEY,这时候我们可以发现,我们按的KEY时好是坏。这时候我们就会很痛苦了,我们需要长时间的延时,但是又想我们的KEY功能正常,我们不得不想办法解决这个问题,如果每次按下KEY时,我们都让单片机先去响应KEY的功能,我们就不会有按键时好时坏的感觉了,响应完KEY的功能后,我们在回来执行延时。


为了清除的描述上面的情况,我们取了新的词语描述整一个过程


KEY按下  --中断源请求


单片机停止延时函数,跳转到KEY功能 --中断响应


执行KEY功能  ----中断服务


返回继续执行延时  --- 中断返回


我们也清楚的知道,中断作用是为了打断主程序正常执行,去执行紧急任务,执行完后返回继续执行主程序

 

既然需要实现中断,在CPU中肯定需要相对应硬件支持中断,我们称这个为中断系统。中断系统对中断进行管理。


中断系统的功能

1)实现中断响应与中断返回


根据中断请求优先级是否马上进行中断响应;


执行中断响应时,需要将当前运行的状态(程序指针PC、寄存器、标志位)压入堆栈保存,保护现场,然后进入中断服务程序;


中断服务程序执行完后,恢复原来的运行状态,恢复现场。


2)中断优先权


一般系统有多个中断源(可以请求中断的事件),它们进行中断请求时,需要区分优先级进行响应。


3)中断嵌套


中断可以实现嵌套,当CPU正在响应某个中断,这个时候有更高优先级的中断请求,高优先级的中断可以打断低优先级的中断,先高优先级中断,然后返回执行低优先级中断。


中断控制器与中断向量表

STM32F407使用中断管理器(NVIC)管理所有的中断,管理的中断排序被成为中断向量表。我们可以在"startup_stm32f407xx.s"中找到,实际每一中断向量均为一个中断服务函数地址。当中断发生时,根据中断向量跳转到对应的中断服务函数。

; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY

                EXPORT  __Vectors

                EXPORT  __Vectors_End

                EXPORT  __Vectors_Size

 

__Vectors       DCD     __initial_sp               ; Top of Stack

                DCD     Reset_Handler              ; Reset Handler

                DCD     NMI_Handler                ; NMI Handler

                DCD     HardFault_Handler          ; Hard Fault Handler

                DCD     MemManage_Handler          ; MPU Fault Handler

                DCD     BusFault_Handler           ; Bus Fault Handler

                DCD     UsageFault_Handler         ; Usage Fault Handler

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     0                          ; Reserved

                DCD     SVC_Handler                ; SVCall Handler

                DCD     DebugMon_Handler           ; Debug Monitor Handler

                DCD     0                          ; Reserved

                DCD     PendSV_Handler             ; PendSV Handler

                DCD     SysTick_Handler            ; SysTick Handler

 

                ; External Interrupts

                DCD     WWDG_IRQHandler                   ; Window WatchDog                                        

                DCD     PVD_IRQHandler                    ; PVD through EXTI Line detection                        

                DCD     TAMP_STAMP_IRQHandler             ; Tamper and TimeStamps through the EXTI line            

                DCD     RTC_WKUP_IRQHandler               ; RTC Wakeup through the EXTI line                       

                DCD     FLASH_IRQHandler                  ; FLASH                                           

                DCD     RCC_IRQHandler                    ; RCC                                             

                DCD     EXTI0_IRQHandler                  ; EXTI Line0                                             

                DCD     EXTI1_IRQHandler                  ; EXTI Line1                                             

                DCD     EXTI2_IRQHandler                  ; EXTI Line2                                             

                DCD     EXTI3_IRQHandler                  ; EXTI Line3                                             

                DCD     EXTI4_IRQHandler                  ; EXTI Line4                                             

                DCD     DMA1_Stream0_IRQHandler           ; DMA1 Stream 0                                   

                DCD     DMA1_Stream1_IRQHandler           ; DMA1 Stream 1                                   

                DCD     DMA1_Stream2_IRQHandler           ; DMA1 Stream 2                                   

                DCD     DMA1_Stream3_IRQHandler           ; DMA1 Stream 3                                   

                DCD     DMA1_Stream4_IRQHandler           ; DMA1 Stream 4                                   

                DCD     DMA1_Stream5_IRQHandler           ; DMA1 Stream 5                                   

                DCD     DMA1_Stream6_IRQHandler           ; DMA1 Stream 6                                   

                DCD     ADC_IRQHandler                    ; ADC1, ADC2 and ADC3s                            

                DCD     CAN1_TX_IRQHandler                ; CAN1 TX                                                

                DCD     CAN1_RX0_IRQHandler               ; CAN1 RX0                                               

[1] [2] [3]
关键字:STM32  中断系统  Main函数 引用地址:STM32基础4--中断系统

上一篇:STM32基础5--外部中断
下一篇:STM32基础3--GPIO控制(LED&KEY)

推荐阅读最新更新时间:2024-11-10 11:20

stm32红外遥控总结
我用的红外遥控是使用的NEC协议,即使用PWM来调制发送的信息 NEC协议,其特征如下: 1、8位地址和8位指令长度; 2、地址和命令2次传输(确保可靠性) 3、PWM脉冲位置调制,以发射红外载波的占空比代表“0”和“1”; 4、载波频率为38Khz; 5、位时间为1.125ms或2.25ms; NEC码的位定义:一个脉冲对应560us的连续载波,一个逻辑1传输需要2.25ms(560us脉冲+1680us低电平),一个逻辑0的传输需要1.125ms(560us脉冲+560us低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us低+1680
[单片机]
<font color='red'>stm32</font>红外遥控总结
STM32正交编码器Demo
编码器分类: 按工作原理:光电式、磁电式和触点电刷式 按码盘的刻孔方式:增量式和绝对式两类 由于博主接触面还不是很广,一共就用过两个种类的编码器,都是属于光电的 差分编码器:一般由8根线连接 信号线分别为 A+ A- B+ B- Z+ Z- 以及VCC和GND 这里有一种不需要Z信号的,6线差分A+ A- B+ B- VCC 和GND 正交编码器:一般是5根线连接,信号线分别为A B Z VCC和GND 编码器线数: 就是旋转一圈你的A(B)会输出多少个脉冲 ,这里的A B就是上面的输出脉冲信号线,它们转一圈发出的脉冲数一样的,不过存在90°相位差 通常都是360线的 线数越高代表编码器能够反应的位置精度越高 相位差为90°
[单片机]
<font color='red'>STM32</font>正交编码器Demo
STM32缩写解释
STM32缩写解释 1.1 缩写 Table 1. 本文档所有缩写定义 缩写 外设/单元 ADC 模数转换器 BKP 备份寄存器 CAN 控制器局域网模块 DMA 直接内存存取控制器 EXTI 外部中断事件控制器 FLASH 闪存存储器 GPIO 通用输入输出 I2C 内部集成电路 IWDG 独立看门狗 NVIC 嵌套中断向量列表控制器 PWR 电源/功耗控制 RCC 复位与时钟控制器 RTC 实时时钟 SPI 串行外设接口 SysTick 系统嘀嗒定时器 TIM 通用定时器 TIM1 高级控制定时器 USART 通用同步异步接收发射端 WWDG 窗口看门狗
[单片机]
STM32 SPI Flash DFU
这次讲的是将程序、图片或其他文件下载到SPI Flash中。我使用的是W25X16的SPI Flash,他共有2MB空间,2个Block,512ge Sector,8096个Page。由于SPI Flash不能直接跑程序,我们从接口就知道了。 接下去我们就来讲讲怎么编写SPI flash的升级功能。这次的工程是基于之前的Internal Flash修改而来的。修改的部分主要在USB_User组里: STM32 SPI Flash DFU - ziye334 - ziye334的博客我只将改改的部分。 hw_config.c、usb_istr.c、usb_prop.c、usb_pwr.c这介个文件没有什么还修改的。usb_desc.
[单片机]
stm32在manin()前做了什么?
最近要在Cortex-M3上写一个简单的操作系统,打算使用IAR,为了写好启动代码,花了一些时间了解了IAR在main()以前做了些什么事。 首先系统复位时,Cortex-M3从代码区偏移0x0000'0000处获取栈顶地址,用来初始化MSP寄存器的值。 接下来从代码区偏移0x0000'0004获取第一个指令的跳转地址。这些地址,是CM3要求放置中断向量表的地方。 这里是一个程序的启动区的反汇编: __vector_table: 08004000 2600 08004002 2000 08004004 7E1D 08004006 0800 这个程序是由IAP程序来启动的,IAP程序获
[单片机]
STM32学习:按键控制LED
前言 涉及知识点:上下拉电阻,stm32_GPIO工作模式,stm32按键控制,GPIO电平读取,宏定义 内容:两个按键控制两个LED灯亮灭。 一、所用知识点复习 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 1、stm32工作模式(注意上下拉输入的区别) 2、按键抖动与常见按键接法 按键抖动: 按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。 抖动时间的长短由按键的机械特性决定
[单片机]
<font color='red'>STM32</font>学习:按键控制LED
开源教程 | 智能生态鱼缸的设计
摘要 随着科技的飞速发展,鱼缸在国内市场上产品繁多,功能不统一,而且大多是非智能化的,功能使用不灵活、不方便,整体性能也无法得到提升,在科技改变生活的时代,对传统的鱼缸进行科技化的改造势在必得,这将会给人们带来更多的幸福感。 本论文以 STM32F103C8T6 单片机为核心,设计了一款基于机智云物联网平台的智能温控,智能换水,智能供养,智能照明和智能显示系统。该系统以 esp8266WiFi 模块通信为基础,可以远程手机监控。本设计硬件电路结构简单,分为单片机核心控制器模块,NTC 温度传感器检测智能鱼缸的水温,通过 OLED 显示当前设备的电流值、温度值和充氧速率等,按键电路用来调节充氧速率、水温参数的阈值、控制供养和补光,
[单片机]
开源教程 | 智能生态鱼缸的设计
stm32实用篇3: 字符显示字库生成
在使用stm32显示文本时,首先要使用字模软件生成字库,如下: 这里,使用的是Consolas字体,点阵大小为16*16(汉字),此时英文字体的大小为8*16,宽度为汉字字体的一半,然后设置选项参数(包括阴码、逐行扫描、十六进制等),具体配置如下: 然后就可以生成字库,首先生成ASCII字库: 会生成两个文件,即字库 + 索引: 因为ASCII编码表的0 ~ 31是不可见字符,从32(空格)33(感叹号!)...开始才是文本字符,因此为了节省空间,直接删去前面多余不用的不可见字符,操作如下: 删除后: 然后利用PCtoLCD取模软件重新加载txt文件生成字库: 利用WinHex软件打开字库,来看一下
[单片机]
<font color='red'>stm32</font>实用篇3: 字符显示字库生成
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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