1、STM32如何进入中断函数的?

在启动文件startup_stm32f429xx.s中定义了以下向量表:

__Vectors       DCD     __initial_sp               ; Top of Stack


                DCD     TIM2_IRQHandler                   ; TIM2                                            
                DCD     TIM3_IRQHandler                   ; TIM3                                            
                DCD     TIM4_IRQHandler                   ; TIM4  

DCD是一条伪指令,伪指令是汇编器用的。用于分配一片连续的字存储单元并用指定的数据初始化
因此中断函数的名称是固定的(在启动文件中定义,为其分配固定地址),在中断发生后,CPU响应中断,同时程序计数器PC自动指向中断入口地址。

STM32的EXTI(外部中断控制器)是一种外设模块,用于处理来自外部输入信号的中断请求。EXTI中断服务函数是在STM32的固件库或用户程序中定义的一组函数,当特定的GPIO端口状态改变、外部事件发生等满足预设条件时,这些函数会被自动调用。 在UVision5集成开发环境中,编写EXTI中断服务函数通常包括以下几个步骤: 1. **配置中断**: 首先,需要配置EXTI线路上的中断,设置中断使能、触发模式(上升沿、下降沿、双边缘)、以及INTERRUPT_LINE_x对应的中断优先级。 ```c RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE); // 接通GPIOx时钟 EXTI_InitStructure.ExtiLine = EXTI_Line_y; // y是GPIO Pin的编号 EXTI_InitStructure.PinSelection = EXTI_PinSel_GPIOx_y; EXTI_InitStructure.Mode = EXTI_Mode_Interrupt; // 异步边沿触发 EXTI_InitStructure.Interrupt = EXTI_Int Rising Falling; // 触发类型 EXTI_Init(&EXTI_InitStructure); ``` 2. **注册中断回调**: 使用`EXTI_Callback()`宏注册中断处理函数。这是用户自定义的部分,例如: ```c void EXTI_IRQHandler(void) { EXTI_DeInit(); // 初始化中断防止寄存器冲突 EXTI_IRQHandlerInstance[y](); // EXTI_IRQHandlerInstance是你定义的函数指针数组 } static void EXTI_IRQHandlerInstance(void) interrupt_handler // 这里是你的中断服务函数名 { // 处理中断逻辑 } ``` 3. **启用中断**: 最后,在系统初始化后启用EXTI中断,并将其连接到处理器的中断向量表上: ```c NVIC_EnableIRQ(EXTI_IRQn); // EXTI_IRQn是EXTI中断对应于NVIC的中断号 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值