STM32是如何进入中断函数xxx_IRQHandler的
来源:互联网 发布:jquery.ajaxqueue.js 编辑:程序博客网 时间:2024/05/23 01:46
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;#endifOS_ENTER_CRITICAL(); OSIntEnter();OS_EXIT_CRITICAL();UartISR(U1ART);OSIntExit();
}
那么程序是如何找到它的呢?在启动文件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,进而执行中断服务函数中的应用。
- STM32是如何进入中断函数xxx_IRQHandler的
- STM32是如何进入中断服务函数xxx_IRQHandler的
- stm32 EXTI中断BUG,无法进入外部中断的问题
- STM32串口悬空导致CPU持续进入中断函数
- stm32外部中断进入不了的原因分析
- STM32定时器进入中断后无法退出的解决方法
- stm32不断的进入中断形成死循环
- STM32单片机串口的深思--主要是接收中断函数的编写
- STM32 的中断函数的学习
- stm32 EXTI对应的中断函数
- stm32中断服务函数的机制
- STM32 UART2 中断函数的写法
- STM32中断入口地址与中断服务函数的关系
- STM32共用中断和共用中断函数的判断
- STM32中关于串口中断的调试(不断进入发送中断的原因)
- STM32-外部中断函数
- STM32中断函数名
- STM32 定时器中断函数
- 【面试加分项】运行时多态与编译时多态
- Servlet 实现访问量的统计小案例
- 小白学开发(iOS)OC_封装_成员变量(set get方法)(2015-07-24)
- ACdream 1154 Lowbit Sum(数位DP)
- SDL游戏开发系列第一话:Hello SDL
- STM32是如何进入中断函数xxx_IRQHandler的
- hadoop2.7.0版本搭建伪分布式环境
- 1011. A+B和C (15)
- 数塔
- Objective-C面向对象-对象和类
- HttpURLConnection 下载
- 网站的安全性测试工具网站
- SAP创建中国版免费在线课程openSAP
- 一次Maven项目编译失败的分析过程