stm32NVIC与EXTI的关系
时间: 2023-06-06 14:04:40 浏览: 73
stm32NVIC和EXTI都是嵌入式系统中常用的中断控制器。在stm32中,NVIC是中断向量表的管理者,而EXTI则是外部中断的管理者。当外部中断发生时,EXTI会通过NVIC通知CPU去执行相应中断处理函数。因此,可以说NVIC和EXTI是密不可分的关系。
相关问题
stm32f103资料exti代码
STM32F103是一款高性能的ARM Cortex-M3微控制器,是ST公司的产品之一。该微控制器具有丰富的外设和强大的处理能力,在各类电子应用中得到广泛应用。
其中,外部中断(EXTI)模块是STM32F103中一个重要的外设模块。它可以监测来自外部的信号变化(如按键按下)并向处理器发送中断请求。在这方面,STM32F103非常灵活和强大。
下面是一个简单的EXTI代码示例:
首先,需要打开GPIO外设时钟,并配置GPIO口为输入模式:
```
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //按键所在的引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
```
接下来,需要对EXTI进行初始化,并设置中断触发条件:
```
EXTI_InitTypeDef EXTI_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); //将GPIO口与EXTI线连接起来
EXTI_InitStructure.EXTI_Line = EXTI_Line0; //EXTI线为0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能EXTI线
EXTI_Init(&EXTI_InitStructure);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; //EXTI线0对应的中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; //抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; //子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断通道
NVIC_Init(&NVIC_InitStructure);
```
最后,编写中断服务函数,响应中断:
```
void EXTI0_IRQHandler(void) {
if (EXTI_GetITStatus(EXTI_Line0) != RESET) { //判断是否为EXTI0中断
//这里写中断服务代码
EXTI_ClearITPendingBit(EXTI_Line0); //清除中断标志位
}
}
```
以上就是一个简单的EXTI代码示例。需要注意的是,在实际应用中,需要根据具体的需求来配置外设和中断触发条件,并编写相应的中断服务程序。
野火stm32f407EXTI中断灯用寄存器写
在野火stm32f407开发板上,可以使用寄存器来配置和控制EXTI中断灯。
以下是一种使用寄存器编写的方法:
1. 首先,需要开启SYSCFG时钟和GPIO时钟,以便使用相关的寄存器。可以使用RCC_APB2PeriphClockCmd和RCC_AHB1PeriphClockCmd函数进行时钟使能。
2. 然后,需要设置中断线与外设之间的映射,将中断线连接到相应的GPIO引脚。可以使用SYSCFG_EXTILineConfig函数进行配置。
3. 接下来,需要配置EXTI的触发模式、中断模式以及中断线的使能。可以使用EXTI_InitTypeDef结构体和EXTI_Init函数进行配置。
4. 创建中断服务函数,用于处理中断事件。中断服务函数的命名和中断向量的配置需要参考所使用的开发板和MCU型号的相关文档。
5. 最后,需要在main函数中使能中断控制器NVIC,并设置优先级,以便使能和处理EXTI中断。
以上是使用寄存器编写的一种方法来控制EXTI中断灯。通过配置相关寄存器,可以实现对中断触发条件和中断线的控制。具体的寄存器地址和配置值可以参考开发板的相关文档或者MCU的参考手册。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [STM32的EXTI外部中断(直接操作寄存器)](https://download.csdn.net/download/weixin_41205554/10136418)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [轻松搞懂STM32F407之中断及NVIC与EXTI](https://blog.csdn.net/weixin_44091010/article/details/118555476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]