完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
简述STM32是如何进入中断函数xxx_IRQHandler的
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,进而执行中断服务函数中的应用。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1537 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1490 浏览 1 评论
910 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
654 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1538 浏览 2 评论
1845浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
596浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
499浏览 3评论
499浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
483浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 15:22 , Processed in 0.678401 second(s), Total 73, Slave 56 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号