历史上的今天
今天是: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,进而执行中断服务函数中的应用。执行完之后再回到主函数继续执行。
上一篇:STM32 F103 时钟树详解
下一篇:STM32_按键中断
史海拾趣
|
avr中的twi协议有误么?? 在主机接收模式的状态码里:的0x40 .。 No TWDR action or No TWDR action 我认为应该是 Read data byte or Read data byte。。 这个时候是来了一个ack信号,但是紧接着来了个8个字节的数据在twdr中 ...… 查看全部问答> |
|
刚涉足嵌入式,老大给了我一份MCP2510的官方手册,我觉得看得差不多了 他说我没看懂,然后问我如果启用报文接收满中断,且开启RXnBF引脚并配置为中断请求模式 那么当有报文收到时,CTRLINTF.RXnIF被置为,从而使INT引脚和RXnIF引脚都变为低电平了 ...… 查看全部问答> |
|
程序用到STM32的TIM1功能,在用MDK软件调试时,发现在运行到TIM1_DeInit()时MDK软件卡死了,单步运行进一步发现程序跳到如下(1)时卡死了,刚开始怀疑是哪个外设时钟没配置好,但检查了好 ...… 查看全部问答> |
|
ADC12MCTLx的最高位EOS代表的含义是什么? 还有那个Veref+和Veref-在没有外接电压的情况下处于什么电平?我量了Veref-在0.95v~1.05V之间变动?那是为何? :o… 查看全部问答> |




