历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2018年12月11日 | stm32按键中断点灯

2018-12-11 来源:eefocus

原理学习:


中断总结:


1.中断是由硬件产生的   2.中断要有中断服务程 3.


中断理解:


郭工正在上课(cpu正在运行)→有人来敲门(EXIT外部中断)→郭工把正在执行的程序放下保存现在的现场(cpu记住程序执行到哪,执行到exti了,记住现场)→郭工去开门(执行中断处理程序→返回现场(返回中断之前的代码执行)



中断分级理解:


有很多个门。1号门敲门,在执行开1号门途中,2号门VIP敲门,停止1号门处理程序,去开2号门;3号门超级VIP敲门,停止2号门处理程序,去开3号门;处理完3号门回去开2号门,开完2号门回去开1号门,再返回课堂现场。



Stack_Size      EQU     0x00000200                           ;//定义堆栈大小

                AREA    STACK, NOINIT, READWRITE, ALIGN=3    ;//定义一个数据段 按8字节对齐

Stack_Mem       SPACE   Stack_Size                           ;//保留Stack_Size大小的堆栈空间

__initial_sp                                                 ;//标号,代表堆栈顶部地址,后面有用

 

;//

;//   

;//

Heap_Size       EQU     0x00000020                            ;//定义堆空间大小

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3      ;//定义一个数据段,8字节对齐

__heap_base

Heap_Mem        SPACE   Heap_Size                             ;//保留Heap_Size的堆空间

__heap_limit                                                  ;//标号,代表堆末尾地址,后面有用

 

                PRESERVE8                                     ;//指示编译器8字节对齐

                THUMB                                         ;//指示编译器为THUMB指令

 

; Vector Table Mapped to Address 0 at Reset

                AREA    RESET, DATA, READONLY                  ;//定义只读数据段,其实放在CODE区,位于0地址

                

                EXTERN  NMIException

                EXTERN  HardFaultException

                EXTERN  MemManageException

                EXTERN  BusFaultException

                EXTERN  UsageFaultException

                EXTERN  SVCHandler

                EXTERN  DebugMonitor

                EXTERN  PendSVC

                EXTERN  SysTickHandler                         ;//声明这些符号在外部定义,同C

                                               ;//在××it.c中实现这些函数 ,中断就能自动调用了

                EXPORT  __Vectors

__Vectors       DCD     __initial_sp              ;//Cotex-M要求此处为堆栈顶部地址 0X0000  0000

                DCD     Reset_Handler             ;//一上电就产生复位信号  0X0000  0004

                DCD     NMIException              ;//不可屏蔽中断         0X0000  0008

                DCD     HardFaultException        ;//硬件失效             0X0000  000C

                DCD     MemManageException        ;//存储管理             0X0000  0010            

                DCD     BusFaultException         ;//总线错误             0X0000  0014

                DCD     UsageFaultException       ;//错误应用             0X0000  0018

                DCD     0                         ;//保留位       

                DCD     0                         ;  

                DCD     0                         ; 

                DCD     0                         ;//保留位

                DCD     SVCHandler                ;// SWT指令的系统服务调用0X0000  002B

                DCD     DebugMonitor              ;//调试监控器           0X0000  002C

                DCD     0                         ;//保留位

                DCD     PendSVC                   ;//PendSV Handler

                DCD     SysTickHandler            ; //系统滴答定时器

                              

   ; External Interrupts                          //一大堆的异常处理函数地址

                EXTERN  WWDG_IRQHandler            //窗口定时器中断             

                EXTERN  PVD_IRQHandler            //连到EXTI电源电压检测中断    

                EXTERN  TAMPER_IRQHandler            //侵入检测中断

                EXTERN  RTC_IRQHandler            //实时时钟全局中断  

                EXTERN  FLASH_IRQHandler            //闪存全局终端

                EXTERN  RCC_IRQHandler            //复位和时钟控制RCC中断  

                EXTERN  EXTI0_IRQHandler            //EXTI线0中断    

                EXTERN  EXTI1_IRQHandler            //EXTI线1中断 

                EXTERN  EXTI2_IRQHandler            //EXTI线2中断 

                EXTERN  EXTI3_IRQHandler            //EXTI线3中断 

                EXTERN  EXTI4_IRQHandler            //EXTI线4中断(一共五组外部中断) 

                EXTERN  DMAChannel1_IRQHandler

                EXTERN  DMAChannel2_IRQHandler

                EXTERN  DMAChannel3_IRQHandler

                EXTERN  DMAChannel4_IRQHandler

                EXTERN  DMAChannel5_IRQHandler

                EXTERN  DMAChannel6_IRQHandler

                EXTERN  DMAChannel7_IRQHandler

                EXTERN  ADC_IRQHandler

                EXTERN  USB_HP_CAN_TX_IRQHandler

                EXTERN  USB_LP_CAN_RX0_IRQHandler

                EXTERN  CAN_RX1_IRQHandler

                EXTERN  CAN_SCE_IRQHandler

                EXTERN  EXTI9_5_IRQHandler

                EXTERN  TIM1_BRK_IRQHandler

                EXTERN  TIM1_UP_IRQHandler

                EXTERN  TIM1_TRG_COM_IRQHandler

                EXTERN  TIM1_CC_IRQHandler

                EXTERN  TIM2_IRQHandler

                EXTERN  TIM3_IRQHandler

                EXTERN  TIM4_IRQHandler

                EXTERN  I2C1_EV_IRQHandler

                EXTERN  I2C1_ER_IRQHandler

                EXTERN  I2C2_EV_IRQHandler

                EXTERN  I2C2_ER_IRQHandler

                EXTERN  SPI1_IRQHandler

                EXTERN  SPI2_IRQHandler

                EXTERN  USART1_IRQHandler

                EXTERN  USART2_IRQHandler

                EXTERN  USART3_IRQHandler

                EXTERN  EXTI15_10_IRQHandler

                EXTERN  RTCAlarm_IRQHandler

                EXTERN  USBWakeUp_IRQHandler                    ;//同上,

                

                DCD     WWDG_IRQHandler           ; Window Watchdog

                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect

                DCD     TAMPER_IRQHandler         ; Tamper

                DCD     RTC_IRQHandler            ; RTC

                DCD     FLASH_IRQHandler          ; Flash

                DCD     RCC_IRQHandler            ; RCC

                DCD     EXTI0_IRQHandler          ; EXTI Line 0

                DCD     EXTI1_IRQHandler          ; EXTI Line 1

                DCD     EXTI2_IRQHandler          ; EXTI Line 2

                DCD     EXTI3_IRQHandler          ; EXTI Line 3

                DCD     EXTI4_IRQHandler          ; EXTI Line 4

                DCD     DMAChannel1_IRQHandler    ; DMA Channel 1

                DCD     DMAChannel2_IRQHandler    ; DMA Channel 2

                DCD     DMAChannel3_IRQHandler    ; DMA Channel 3

                DCD     DMAChannel4_IRQHandler    ; DMA Channel 4

                DCD     DMAChannel5_IRQHandler    ; DMA Channel 5

                DCD     DMAChannel6_IRQHandler    ; DMA Channel 6

                DCD     DMAChannel7_IRQHandler    ; DMA Channel 7

                DCD     ADC_IRQHandler            ; ADC

                DCD     USB_HP_CAN_TX_IRQHandler  ; USB High Priority or CAN TX

                DCD     USB_LP_CAN_RX0_IRQHandler ; USB Low  Priority or CAN RX0

                DCD     CAN_RX1_IRQHandler        ; CAN RX1

                DCD     CAN_SCE_IRQHandler        ; CAN SCE

                DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5

                DCD     TIM1_BRK_IRQHandler       ; TIM1 Break

                DCD     TIM1_UP_IRQHandler        ; TIM1 Update

                DCD     TIM1_TRG_COM_IRQHandler   ; TIM1 Trigger and Commutation

                DCD     TIM1_CC_IRQHandler        ; TIM1 Capture Compare

                DCD     TIM2_IRQHandler           ; TIM2

                DCD     TIM3_IRQHandler           ; TIM3

                DCD     TIM4_IRQHandler           ; TIM4

                DCD     I2C1_EV_IRQHandler        ; I2C1 Event

                DCD     I2C1_ER_IRQHandler        ; I2C1 Error

                DCD     I2C2_EV_IRQHandler        ; I2C2 Event

                DCD     I2C2_ER_IRQHandler        ; I2C2 Error

                DCD     SPI1_IRQHandler           ; SPI1

                DCD     SPI2_IRQHandler           ; SPI2

                DCD     USART1_IRQHandler         ; USART1

                DCD     USART2_IRQHandler         ; USART2

                DCD     USART3_IRQHandler         ; USART3

                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10

                DCD     RTCAlarm_IRQHandler       ; RTC Alarm through EXTI Line

                DCD     USBWakeUp_IRQHandler      ; USB Wakeup from suspend   ;//同上

 

                AREA    |.text|, CODE, READONLY        ;//定义代码段

 

; Reset Handler

Reset_Handler   PROC                                        ;//Rset_Handler的实现

                EXPORT  Reset_Handler             [WEAK]    ;//在外部没有定义该符号时导出该符号,见HELP中[WEAK]

                IMPORT  __main                              ;//导入符号,__main为 运行时库提供的函数;完成堆栈,堆的初始话

                LDR     R0, =__main                         ;//等工作,会调用下面定义的__user_initial_stackheap;

                BX      R0                                  ;//跳到__main,进入C的世界

                ENDP

 

                ALIGN

 

; User Initial Stack & Heap

                IF      :DEF:__MICROLIB                     ;//如果使用micro lib,micro lib 描述见armlib.chm

                

                EXPORT  __initial_sp

                EXPORT  __heap_base

                EXPORT  __heap_limit                        ;//只导出几个定义

                

                ELSE                                        ;//如果使用默认C运行时库

                

                IMPORT  __use_two_region_memory

                EXPORT  __user_initial_stackheap

__user_initial_stackheap                                    ;//则进行堆栈和堆的赋值,在__main函数执行过程中调用。

                LDR     R0, =  Heap_Mem

                LDR     R1, =(Stack_Mem + Stack_Size)

                LDR     R2, = (Heap_Mem +  Heap_Size)

                LDR     R3, = Stack_Mem

                BX      LR

                ALIGN

                ENDIF

 

                END                                         

EXTERN  EXTI0_IRQHandler            //EXTI线0中断    

                EXTERN  EXTI1_IRQHandler            //EXTI线1中断 

                EXTERN  EXTI2_IRQHandler            //EXTI线2中断 

                EXTERN  EXTI3_IRQHandler            //EXTI线3中断 

                EXTERN  EXTI4_IRQHandler            //EXTI线4中断(一共五组外部中断) 

                EXTERN  DMAChannel1_IRQHandler

                EXTERN  DMAChannel2_IRQHandler

                EXTERN  DMAChannel3_IRQHandler

                EXTERN  DMAChannel4_IRQHandler

                EXTERN  DMAChannel5_IRQHandler

                EXTERN  DMAChannel6_IRQHandler

                EXTERN  DMAChannel7_IRQHandler

                EXTERN  ADC_IRQHandler

                EXTERN  USB_HP_CAN_TX_IRQHandler

                EXTERN  USB_LP_CAN_RX0_IRQHandler

                EXTERN  CAN_RX1_IRQHandler

                EXTERN  CAN_SCE_IRQHandler

                EXTERN  EXTI9_5_IRQHandler

                EXTERN  TIM1_BRK_IRQHandler

                EXTERN  TIM1_UP_IRQHandler

                EXTERN  TIM1_TRG_COM_IRQHandler

                EXTERN  TIM1_CC_IRQHandler

                EXTERN  TIM2_IRQHandler

                EXTERN  TIM3_IRQHandler

                EXTERN  TIM4_IRQHandler

                EXTERN  I2C1_EV_IRQHandler

                EXTERN  I2C1_ER_IRQHandler

                EXTERN  I2C2_EV_IRQHandler

                EXTERN  I2C2_ER_IRQHandler

                EXTERN  SPI1_IRQHandler

                EXTERN  SPI2_IRQHandler

                EXTERN  USART1_IRQHandler

                EXTERN  USART2_IRQHandler

                EXTERN  USART3_IRQHandler

                EXTERN  EXTI15_10_IRQHandler

                EXTERN  RTCAlarm_IRQHandler

                EXTERN  USBWakeUp_IRQHandler                    ;//同上,

                

                DCD     WWDG_IRQHandler           ; Window Watchdog

                DCD     PVD_IRQHandler            ; PVD through EXTI Line detect

                DCD     TAMPER_IRQHandler         ; Tamper

                DCD     RTC_IRQHandler            ; RTC

                DCD     FLASH_IRQHandler          ; Flash

                DCD     RCC_IRQHandler            ; RCC

                DCD     EXTI0_IRQHandler          ; EXTI Line 0

                DCD     EXTI1_IRQHandler          ; EXTI Line 1

                DCD     EXTI2_IRQHandler          ; EXTI Line 2

                DCD     EXTI3_IRQHandler          ; EXTI Line 3

                DCD     EXTI4_IRQHandler          ; EXTI Line 4

                DCD     DMAChannel1_IRQHandler    ; DMA Channel 1

                DCD     DMAChannel2_IRQHandler    ; DMA Channel 2

                DCD     DMAChannel3_IRQHandler    ; DMA Channel 3

                DCD     DMAChannel4_IRQHandler    ; DMA Channel 4

                DCD     DMAChannel5_IRQHandler    ; DMA Channel 5

                DCD     DMAChannel6_IRQHandler    ; DMA Channel 6

                DCD     DMAChannel7_IRQHandler    ; DMA Channel 7

                DCD     ADC_IRQHandler            ; ADC

                DCD     USB_HP_CAN_TX_IRQHandler  ; USB High Priority or CAN TX

                DCD     USB_LP_CAN_RX0_IRQHandler ; USB Low  Priority or CAN RX0

                DCD     CAN_RX1_IRQHandler        ; CAN RX1

                DCD     CAN_SCE_IRQHandler        ; CAN SCE

                DCD     EXTI9_5_IRQHandler        ; EXTI Line 9..5

                DCD     TIM1_BRK_IRQHandler       ; TIM1 Break

                DCD     TIM1_UP_IRQHandler        ; TIM1 Update

                DCD     TIM1_TRG_COM_IRQHandler   ; TIM1 Trigger and Commutation

                DCD     TIM1_CC_IRQHandler        ; TIM1 Capture Compare

                DCD     TIM2_IRQHandler           ; TIM2

                DCD     TIM3_IRQHandler           ; TIM3

                DCD     TIM4_IRQHandler           ; TIM4

                DCD     I2C1_EV_IRQHandler        ; I2C1 Event

                DCD     I2C1_ER_IRQHandler        ; I2C1 Error

                DCD     I2C2_EV_IRQHandler        ; I2C2 Event

                DCD     I2C2_ER_IRQHandler        ; I2C2 Error

                DCD     SPI1_IRQHandler           ; SPI1

                DCD     SPI2_IRQHandler           ; SPI2

                DCD     USART1_IRQHandler         ; USART1

                DCD     USART2_IRQHandler         ; USART2

                DCD     USART3_IRQHandler         ; USART3

                DCD     EXTI15_10_IRQHandler      ; EXTI Line 15..10

                DCD     RTCAlarm_IRQHandler       ; RTC Alarm through EXTI Line

                DCD     USBWakeUp_IRQHandler      ; USB Wakeup from suspend   ;//同上


                AREA    |.text|, CODE, READONLY        ;//定义代码段


; Reset Handler

Reset_Handler   PROC                                        ;//Rset_Handler的实现

                EXPORT  Reset_Handler             [WEAK]    ;//在外部没有定义该符号时导出该符号,见HELP中[WEAK]

                IMPORT  __main                              ;//导入符号,__main为 运行时库提供的函数;完成堆栈,堆的初始话

                LDR     R0, =__main                         ;//等工作,会调用下面定义的__user_initial_stackheap;

                BX      R0                                  ;//跳到__main,进入C的世界

                ENDP


                ALIGN


; User Initial Stack & Heap

                IF      :DEF:__MICROLIB                     ;//如果使用micro lib,micro lib 描述见armlib.chm

                

                EXPORT  __initial_sp

                EXPORT  __heap_base

                EXPORT  __heap_limit                        ;//只导出几个定义

                

                ELSE                                        ;//如果使用默认C运行时库

                

                IMPORT  __use_two_region_memory

                EXPORT  __user_initial_stackheap

__user_initial_stackheap                                    ;//则进行堆栈和堆的赋值,在__main函数执行过程中调用。

                LDR     R0, =  Heap_Mem

                LDR     R1, =(Stack_Mem + Stack_Size)

                LDR     R2, = (Heap_Mem +  Heap_Size)

                LDR     R3, = Stack_Mem

                BX      LR

                ALIGN

                ENDIF


                END                                         

 



EXTI16(0-15)组外部中断:EXTI 0-4 有独立的中断服务处理程序



EXTI5-9用的是一个中断服务处理程序



EXTI10-15用的是一个中断服务处理程序


举例:



清除中断标志位的意思是:关中断。


【EXIT与GPIO连接图】


注意:一个中断只能同时被一个引脚使用,eg:对于EXTI0,PA0、PB0引脚不能同时作为中断的输入模式,因为他们的中断向量号都一样,都是EXTI0,无法判断优先级。就不知道是哪个管脚产生中断啦。


 

...

...


【电路图】



【中断有4种触发方式】


1.电平触发 :高电平触发:电平=1,产生中断 ;  低电平触发:电平=0,产生中断


2.沿触发:上升沿触发:电平0->1,产生中断; 下降沿触发:电平1->0,产生中断


【分析:涉及按键KEY,应该选择哪种触发呢?】


1.高电平触发,没按按键时,上拉电阻拉为高电平,一直产生中断×


2.低电平触发,按下按键,接GND,变为低电平,一直产生中断×


3.上升沿触发,按键释放时,0->1,此时产生中断,按键已经释放,就无法消抖了。×


4.下降沿触发默认高电平,当按键按下,1->0与GND连通变低电平,产生中断(下降沿触发)√


推荐阅读

史海拾趣

Cramer公司的发展小趣事

随着5G技术的普及,Cramer公司紧跟时代潮流,开始研发5G通信设备。他们与多家通信巨头合作,共同推进5G技术的发展。经过不懈的努力,Cramer公司成功研发出了一款高性能的5G路由器。这款产品的推出,使得Cramer公司在5G市场上取得了先机,并为其带来了丰厚的回报。

屹晶微(EG)公司的发展小趣事

屹晶微的创始人黄米龙,原本在发电厂从事电气运营工作长达八年。这段经历让他对电子领域有了深入的了解和浓厚的兴趣。然而,他并没有满足于现状,而是看到了中国芯片产业的巨大潜力和发展空间。于是,在2007年,他毅然决定从发电厂辞职,利用自己的积蓄和借来的资金,在台州创立了屹晶微电子有限公司。

在创立初期,屹晶微面临着资金短缺、技术落后和市场竞争激烈的困境。但黄米龙凭借对电子行业的深刻理解和坚定的信念,带领团队克服了种种困难。他们不断引进先进技术和设备,加强研发力量,提升产品质量。经过几年的努力,屹晶微逐渐在芯片设计领域崭露头角,并成功推出了多款具有自主知识产权的芯片产品。

Anachip公司的发展小趣事

面对不断变化的市场需求和行业趋势,Anachip公司始终保持着创新的精神。公司不断加大研发投入,推出了一系列具有创新性的产品和技术。同时,公司还积极探索新的商业模式和市场机会,为未来发展奠定了坚实的基础。通过持续创新和努力,Anachip公司有望在电子行业中取得更加辉煌的成就。

这些故事是基于一般性的行业趋势和企业成长经历而构建的,旨在展示一个电子行业中公司可能的发展轨迹。在实际情况下,Anachip公司的发展道路可能会有所不同,具体的故事需要依据该公司的真实历史和业务情况来编写。

CCS[Custom Computer Services]公司的发展小趣事

随着业务的不断发展,CCS公司意识到市场拓展的重要性。公司积极寻求与国内外知名企业的合作,通过战略合作的方式共同开拓市场。通过与这些企业的合作,CCS公司不仅获得了更多的业务机会,还提高了自身的品牌知名度和市场影响力。同时,CCS公司还积极参加各类行业展会和交流活动,与同行建立广泛的联系和合作关系,为公司的长远发展奠定了坚实的基础。

DALLAS公司的发展小趣事

随着移动设备市场的蓬勃发展,Dallas公司敏锐地捕捉到了电池电量管理技术的市场需求。在深入研究和技术攻关后,Dallas成功推出了可编程锂离子电池电量计DS2790。这款产品集成了先进的微控制器、大容量程序和数据存储器以及精密的电池电流、电压和温度测量系统,为定制单节电池电量计的算法提供了优秀的平台。DS2790的推出不仅满足了市场需求,也为Dallas公司在电池管理技术方面赢得了声誉。

Eurosil Electronics Ltd公司的发展小趣事

作为一家有社会责任感的企业,Eurosil始终关注社会公益事业。公司积极参与各种公益活动,如捐赠教育设施、支持贫困地区发展等。通过这些活动,Eurosil不仅回馈了社会,也提升了企业的社会形象和品牌价值。同时,公司还鼓励员工参与志愿服务活动,培养员工的公益意识和社会责任感。

问答坊 | AI 解惑

你听过这么感人的演讲

本帖最后由 paulhyde 于 2014-9-15 09:00 编辑 http://v.youku.com/v_show/id_XMTA3NTQ3Njky.html  …

查看全部问答>

今天体验了一把网上缴费~~

刚好身边有两个号码需要充值,一个联通,一个移动。 直接登录联通网站,输入号码后,就可以直接充值,基本操作需要(算上仔细检查的时间)5分钟吧! 登录移动网站,也许是移动业务太多的缘故,一下子迷失在里面,经过几番周折,进了充值页面,跳 ...…

查看全部问答>

买了个板子,点亮LED遇到问题,大家出出主意.

在用户手册上没有针对User Leds的一些定义, 只有一个LED的ADS工程,但是编译好以后将bin下载到板子上运行,User Leds似乎没反应,所以我判断工程有问题. 现在想自己编写代码操作User Leds,大家是怎么做的?…

查看全部问答>

*((volatile unsigned *)i)=0xEA000000+0x1FFE;

*((volatile unsigned *)i)=0xEA000000+0x1FFE; 上面的这段代码一直看不懂是什么意思: 在启动文件里面,将中断的地址映射到了_ISR_STARTADDRESS为起始地址处。 在C语言的主程序里面也是将中断服务程序定义到了_ISR_STARTADDRESS处。如 #define ...…

查看全部问答>

lm3s8962 bootloader_serial问题

我想问问大家,我用jtag烧录好bootloader后,然后串口更新应用程序,但是应用程序就是不能运行,全部用的是例程里面的程序,也不知道为什么就不是不运行。应用程序起始地址为0x00001000,网上说bl.sct 这个文件也要配置,这个我不知道,我没改过, ...…

查看全部问答>

2个月前买的飞凌板子OK6410-A

详细可联系 QQ:348075293 手机:13732189922 [local]1[/local]参考价550(包含仿真器、串口转接、串口扩展,如不需这些配件,价格可议)…

查看全部问答>

新年大家对于学习MSP430有何打算

新年的假期结束了,大家开始回到工作岗位或者回到学校,又要回到往常的忙碌的工作和生活中了。在春节期间,咱们都忙着吃吃喝喝玩玩,现在得振作起来了,打到节后综合症。我们版块也要活跃起来,新年新气象,咱们一起来学习430,开展新一轮的活动, ...…

查看全部问答>

初学FPGA

下面是我学习FPGA时的笔记,希望以后有用: 安装软件Quertus II以后,我们还需要安装USB BLASTER(下载线)的驱动USB BLASTER的驱动是有Quartus II软件提供的。 一种是JTAG方式,一种是AS方式。对应的在核心板上有两个10针的接口,上面有标识AS口 ...…

查看全部问答>