历史上的今天
返回首页

历史上的今天

今天是:2024年10月09日(星期三)

正在发生

2021年10月09日 | STM32是如何进入中断服务函数xxx_IRQHandler的

2021-10-09 来源:eefocus

今天在看stm32的中断,一时间不理解stm32主函数是如何进入中断函数的,按C编程的理解,会有个特定的入口之类的,但是看demo过程中没有发现入口。

 

以串口中断服务函数void USART1_IRQHandler(void) 为例,首先用到串口中断,需要先设定串口中断初始化以及串口初始化,另外void USART1_IRQHandler(void) 中断服务函数也应该写好。


发现在stm32的启动文件startup_stm32f10x_md.s中写到 
DCD USART1_IRQHandler 
其中DCD是一条数据定义伪指令,用于分配一片连续的字存储单元并用指定的数据初始化。 
 
库里定义 #define USART1 ((USART_TypeDef *) USART1_BASE) 
同时 #define USART1_BASE (APB2PERIPH_BASE + 0x3800)  

当配置好USART1的控制寄存器中断使能时,当发生中断(异常)时,该异常被Cortex-M3内核接受,对应的异常Handler就会执行。而这个响应过程都是硬件来完成的,当然为了决定Handler的入口地址,Cortex-M3使用了“向量表查表机制”。startup_stm32f10x_md.s启动文件已经为USART1_IRQHandler赋予了该地址。所以在异常发生后,CPU进入异常模式,同时程序计数器PC自动指向异常入口地址,也就是USART1_IRQHandler,进而执行中断服务函数中的应用。执行完之后再回到主函数继续执行。


推荐阅读

史海拾趣

GREEGOO公司的发展小趣事
在需要时钟分路的地方,使用专用的时钟分路、放大、整形的芯片,以确保时钟信号的无衰减传输。
Advanced Milliwave Laboratories Inc公司的发展小趣事

Advanced Milliwave Laboratories Inc(AML)成立于XXXX年,最初由几位在微波技术领域具有丰富经验的专家组成。初创期,AML专注于高频微波技术的研发,通过不断的实验和创新,成功开发出多款具有高性能和稳定性的微波产品。这些产品迅速获得了市场的认可,为AML在微波技术领域奠定了坚实的基础。

Foxconn_Optical_Interconnect_Technologies__Inc.公司的发展小趣事

随着全球电子市场的不断发展和竞争的加剧,AML开始实施全球化战略布局。公司在全球范围内设立了多个分支机构和销售网络,进一步拓展市场。同时,AML还加强了与国际同行的交流与合作,共同推动微波技术的发展和应用。展望未来,AML将继续致力于技术创新和市场拓展,努力成为全球微波技术领域的领导者。

这五个故事展示了Advanced Milliwave Laboratories Inc公司在电子行业中的发展历程和成就,凸显了其在技术创新、市场拓展、质量管理以及全球化战略等方面的努力和成果。

DBLECTRO公司的发展小趣事

2010年,迪贝电子面临了一次重大的市场挑战。随着国内外竞争对手的不断涌入,气体检测及分析仪器市场的竞争日益激烈。为了应对这一挑战,迪贝电子加大了技术创新的力度,积极引进国内外最新的技术和设备,不断提升产品的性能和品质。同时,公司还加强了与客户的沟通和合作,深入了解客户需求,提供个性化的解决方案。这些努力使得迪贝电子在激烈的市场竞争中保持了领先地位。

Advanced Analog公司的发展小趣事

随着技术的不断进步和市场需求的多样化,Advanced Analog的产品逐渐应用于更广泛的领域。从最初的TFT-LCD面板,到后来的数字相机、手持装置、网络通讯装置等领域,Advanced Analog都提供了完整的解决方案和优质的服务。通过与各行业合作伙伴的紧密合作,Advanced Analog的产品助力众多电子设备实现了更高效、更稳定的性能,推动了整个电子行业的发展。

Fremont_Micro_Devices_USA公司的发展小趣事

随着技术的不断进步和市场需求的多样化,Advanced Analog的产品逐渐应用于更广泛的领域。从最初的TFT-LCD面板,到后来的数字相机、手持装置、网络通讯装置等领域,Advanced Analog都提供了完整的解决方案和优质的服务。通过与各行业合作伙伴的紧密合作,Advanced Analog的产品助力众多电子设备实现了更高效、更稳定的性能,推动了整个电子行业的发展。

问答坊 | AI 解惑

bootloader说明

bootloader 来自网络。…

查看全部问答>

怎样理解肖特基二极管中少数载流子的存贮效应甚微

看了半天书还是不理解肖特基二极管中少数载流子的存贮效应甚微,肯请达人们详细解答下,拜托了,谢谢…

查看全部问答>

avr中的twi协议有误???(状态码0x40)

avr中的twi协议有误么??   在主机接收模式的状态码里:的0x40 .。 No TWDR action or No TWDR action 我认为应该是 Read data byte or Read data byte。。 这个时候是来了一个ack信号,但是紧接着来了个8个字节的数据在twdr中 ...…

查看全部问答>

求程序员故事,有故事的朋友请进来。

本人正在写一个关于程序员的故事。 《程序员神话之XX》欢迎有故事的朋友发e-mail给我 e-mail:huawuzixun@163.com…

查看全部问答>

请问MCP2510中RXnBF引脚怎么用啊?

刚涉足嵌入式,老大给了我一份MCP2510的官方手册,我觉得看得差不多了 他说我没看懂,然后问我如果启用报文接收满中断,且开启RXnBF引脚并配置为中断请求模式 那么当有报文收到时,CTRLINTF.RXnIF被置为,从而使INT引脚和RXnIF引脚都变为低电平了 ...…

查看全部问答>

会躲闪的汽车

当汽车相撞时,一方面会因为惯性而导致伤亡,另一方面也会由于对方车辆的直接撞击而将车体压扁从而导致车内人员受伤或死亡。而今天的这款奇特的概念车就是专门为减小后一种情况带来的伤害而设计的。这款汽车的底盘和车厢并不是固定在一起的,车厢可 ...…

查看全部问答>

MDK软件调试时卡死的问题??

        程序用到STM32的TIM1功能,在用MDK软件调试时,发现在运行到TIM1_DeInit()时MDK软件卡死了,单步运行进一步发现程序跳到如下(1)时卡死了,刚开始怀疑是哪个外设时钟没配置好,但检查了好 ...…

查看全部问答>

不花钱的可靠性设计

今天和几个朋友吃饭,席间请朋友们帮助推介我的业务,其中有几位大倒苦水,“现在经济危机呵,可靠性一直就想做,可拿不出钱来添置设备、增加产品的成本啊”,还都是曾经有过机电技术经历的人,有感而发,完成此文,展示给大家看,原来“可靠性设计 ...…

查看全部问答>

大虾们,请出手(AD转换)

ADC12MCTLx的最高位EOS代表的含义是什么? 还有那个Veref+和Veref-在没有外接电压的情况下处于什么电平?我量了Veref-在0.95v~1.05V之间变动?那是为何? :o…

查看全部问答>

求延时函数???

这个延时函数怎么不能使用呢???两个led不交替闪烁。。。。。#include int main(void) {   WDTCTL = WDTPW + WDTHOLD;   P1DIR |= 0x41; void delay(int i) { int j; for(j=0;j } int main(void) { 省略。。。。 while( ...…

查看全部问答>