历史上的今天
返回首页

历史上的今天

今天是:2025年06月08日(星期日)

正在发生

2018年06月08日 | STM32是如何进入中断函数xxx_IRQHandler的

2018-06-08 来源:eefocus

STM32是如何进入中断函数xxx_IRQHandler的,如:void USART1_IRQHandler(void) 
前段时间开始接触STM32的时候遇到这样一个问题,程序里面配置好中断设置时,程序运行的时候是怎么进入中断函数的(当然这里所说的中断都是硬件中断),因为跑C程序的时候,本人的理解是,你总得有个“接力棒”或者一个“入口”吧,它才能进入到下一个函数中去。 
以uart1配置作为例子, 
//中断初始化 
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); 
NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; 
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 
NVIC_Init(&NVIC_InitStructure);

/串口初始化 
USART_StructInit(&USART_InitStructure); //串口一用默认配置 
USART_Init(USART1, &USART_InitStructure); //初始化串口 
USART_Cmd(USART1, ENABLE); //使能串口

USART_ITConfig(USART1, USART_IT_TXE, DISABLE); //关闭发送缓冲区空中断 
USART_ITConfig(USART1, USART_IT_TC , ENABLE); //发送完成中断 
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); //接收中断 
USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); //接收空闲中断

当中断发生时,程序响应stm32f10x_it.c中的中断服务函数 
void USART1_IRQHandler(void) 
{

#if OS_CRITICAL_METHOD == 3                      
    OS_CPU_SR  cpu_sr = 0;
#endif
OS_ENTER_CRITICAL(); 
OSIntEnter();
OS_EXIT_CRITICAL();

UartISR(U1ART);
OSIntExit();12345678910


那么程序是如何找到它的呢?在启动文件startup_stm32f10x_md.s中有这样一段代码,汇编 
DCD USART1_IRQHandler 
其中DCD是一条数据定义伪指令,用于分配一片连续的字存储单元并用指定的数据初始化。 
还有一些如PUBWEAK USART1_IRQHandler等,具体意思不是很清楚。 
库里定义 #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,进而执行中断服务函数中的应用。


推荐阅读

史海拾趣

安路科技(Anlogic)公司的发展小趣事

安路科技始终将技术创新作为公司发展的核心驱动力。公司不断加大研发投入,引进高端人才,建立了一支具有强大研发实力的团队。通过持续的技术创新,安路科技在FPGA领域取得了多项重要突破,推出了多款具有领先水平的产品,进一步巩固了公司在市场中的地位。

厦门法拉(faratronic)公司的发展小趣事

FMI公司成立于1971年,作为标准通信公司的受控供应商,公司自成立之初便专注于为通信市场提供快速交货和严格公差的石英晶体及晶体振荡器。在成立初期,FMI面临着市场竞争激烈和技术挑战的双重压力,但公司凭借其卓越的产品质量和快速响应客户需求的能力,逐渐在行业中站稳脚跟。通过不断的技术创新和产品优化,FMI逐渐扩大了其市场份额,为后续的快速发展奠定了坚实基础。

Elprotronic Inc.公司的发展小趣事

品质管理一直是Elprotronic Inc.非常重视的一项工作。公司建立了一套完善的品质管理体系,从原材料采购到产品生产、检测、包装等各个环节都进行严格把关。同时,公司还引入了先进的生产设备和技术手段,提高了产品的生产效率和质量水平。此外,公司还定期组织员工进行品质管理培训和学习交流活动,不断提升员工的品质意识和技能水平。这些措施的实施使得Elprotronic Inc.的产品质量得到了进一步提升和保障。

Conxall公司的发展小趣事

Conxall公司的创始人李华,是一位在电子行业摸爬滚打多年的工程师。他深感市场上电子产品同质化严重,缺乏真正的创新。于是,他毅然决定创立Conxall公司,致力于研发具有独特功能和高性能的电子产品。李华带领团队日夜奋战,终于研发出了第一款具有自主知识产权的智能手机芯片,凭借其出色的性能和稳定性,迅速在市场上获得了认可。

Glorious Sources Co Ltd公司的发展小趣事
采取必要的抗干扰措施,如屏蔽、接地等,以提高电路的稳定性和可靠性。
EDDING公司的发展小趣事

随着Eclipse的不断发展壮大,ECLIPSE公司也面临着越来越多的挑战和风险。其中最大的挑战之一是保持Eclipse的开放性和灵活性,同时确保其稳定性和安全性。为此,ECLIPSE公司采取了一系列措施,包括加强代码审核、引入安全漏洞奖励计划等。此外,公司还积极应对来自竞争对手的挑战和市场变化,不断调整和优化自身的战略和业务模式。

问答坊 | AI 解惑

74LS47驱动数码管问题!!!

请问大家哈,我用74LS47驱动两个4位数码管,数码管亮度很微弱,我更改为双电源,单独给数码管提供5V电压,但是情况仍没有改变。我一时找不到原因!大家有什么看法没?感谢!!感谢!!感谢!!!…

查看全部问答>

手机电路中的特殊元器件

一、开关元件 开关、干簧管和霍耳元件都是用来控制线路的通断的器件。不同的是开关一般是人工手动操作的,而干簧管和霍克元件则是通过磁信号来控制线路的通和断。 1.开关 在手机中使用的开关通常是薄膜按键开关,它由触点和触片组成。按键的两个 ...…

查看全部问答>

单脉冲序列对双激式开关电源变压器铁心的磁化开关电源原理与设计(连载53)

2-1-1-4.脉冲序列对双激式开关电源变压器铁心的磁化 双激式变压器与单激式变压器的区别主要是两者输入电压的参数不一样。单激式变压器输入的电压是单极性直流脉冲,而双激式变压器输入的电压是双极性交流脉冲。为了简单起见,我们把双激式变压器 ...…

查看全部问答>

IOCTL CODE DeviceIoControl

我做摄像头的数据采集,用CreateFile打开设备,然后调用DeviceIoControl函数,第二个参数需要的是控制CODE,这个CODE需要驱动来提供?不是标准调用吧。如果驱动没有提供读数据的控制CODE,那我是不是就没有办法用DeviceIoControl得到数据了?…

查看全部问答>

WinCE BSP开发的几个问题,急!!!

我是青岛的目前原来是从事应用程序开发的,想转型做WinCE BSP开发,现在已经辞职在家专心学习WinCE BSP开发,现在实验用的板子是飞凌的OK2440III。由于在青岛没有找到这方面的朋友,所以许多问题只能靠自己研究或是到网上查资料。现在我有下面的一 ...…

查看全部问答>

笔记本HP500键盘无响应?

笔记本HP500键盘无响应? 重起之后就可以用了!但是用不了多久就又没有响应了! 请问如何解决?…

查看全部问答>

LM3S菜鸟成长日记-SD卡-文件写/读

replyreload += \',\' + 813951;实现功能:创建12-29.txt,写入EEWORD GOOD!,然后在读出来 主代码: int main(void){ //系统时钟 SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_OSC| SYSCTL_OSC_MAIN |     &n ...…

查看全部问答>

全局时钟资源的使用方法

IBUFG + BUFG的使用方法:IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。 IBUFGDS + BUFG的使用方法:当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。 ...…

查看全部问答>

请问,BRR值的怎么得出来的?

小弟手上的开放板的外部晶振是25M,串口通信,波特率为115200时,BRR是0x0135. 想问下0x0135是怎么算出来的?看了STM32的数据手册,没看懂。…

查看全部问答>

大家说说 ,自己都什么情况下把 DSP给烧了.

大家说说 ,自己都什么情况下把 DSP给烧了. 说说我的: AD 的过压.   另外模拟地没有处理好. 短路了.   有经历过更复杂的吗? …

查看全部问答>