如何开启STM32F103C8T6单片机PA4和PA5的外部中断
时间: 2024-12-09 20:29:31 浏览: 18
在STM32F103C8T6单片机上,PA4和PA5可以作为GPIO端口用于外部中断功能。以下是启用这两个端口外部中断的基本步骤:
1. **配置GPIO**:
- 首先,你需要将PA4和PA5配置为输入模式,以便它们能检测到外部信号。在STM32CubeMX工具或者通过编写STM32 HAL库中的代码,设置GPIOB->MODER寄存器,将对应位置位为"AFx"(其中x取决于外设的中断请求线),比如`GPIO_InitStruct.Pin = GPIO_Pin_4 | GPIO_Pin_5;`
- 确认GPIO功能组已切换到AFIO模数,例如`GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;`
2. **配置EXTI(外部中断控制器)**:
- 导入相关的 EXTI 模块头文件,如 `#include "stm32f1xx_exti.h"`
- 初始化 EXTI 控制器,例如`EXTI_InitTypeDef EXTI_InitStructure;`
- 设置 EXTI_InitStructure,指定EXTI线号(EXTI_Line_4 for PA4 和 EXTI_Line_5 for PA5)、触发边沿(`EXTI_Trigger_Rising` 或 `EXTI_Trigger_Falling` 或 `EXTI_Trigger_RISING_FALLING`) 和线的状态(`EXTI_Mode_Interrupt` or `EXTI_Mode_Event`)
- 调用`EXTI_GetExtLineConfig(GPIOB, EXTI_Pin_4)` 和 `EXTI_GetExtLineConfig(GPIOB, EXTI_Pin_5)` 确定当前配置是否匹配需求,然后清除之前的配置
- 调用`EXTI_InitStructure Line = EXTI_Pin_4;` 和 `EXTI_InitStructure.Line = EXTI_Pin_5;`
- 使用`EXTI_InitStructure.Mode = EXTI_Mode_Interrupt;` 设置为中断模式
- 调用`EXTI_InitStructure Trigger = EXTI_Trigger_Rising;` 选择上升沿触发(可根据需要调整)
- 调用`EXTI_InitStructure.ActiveState = EXTI_Active_High;` 设定高电平有效(可选,也可以设为低电平有效)
- 最后,调用`EXTI_RegisterEXTILine(&EXTI_InitStructure);` 注册EXTI线
3. **配置中断系统**:
- 在你的应用程序中,注册外部中断处理函数,通常会包含在`void HAL_NVIC_Configuration(void)` 函数中。这里需要配置中断向量表(NVIC Vector Table)和相应的中断优先级。例如,设置中断为优先级0并连接到适当的中断服务程序(ISR)。
- 对于PA4和PA5,可能涉及到的中断向量分别是`EXTI0_IRQn` 和 `EXTI1_IRQn`。
4. **启动中断**:
- 最后一步是打开中断,调用`NVIC_EnableIRQ(EXTI0_IRQn)` 和 `NVIC_EnableIRQ(EXTI1_IRQn)` 来激活PA4和PA5的中断。
```c
// 示例代码片段
EXTI_InitStructure = (EXTI_InitStructure){};
EXTI_InitStructure.Line = EXTI_Pin_4;
EXTI_InitStructure.Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.ActiveState = EXTI_Active_High;
EXTI_RegisterEXTILine(&EXTI_InitStructure);
// 类似地为PA5做同样的操作...
EXTI_InitStructure.Line = EXTI_Pin_5;
// 启动中断
NVIC_EnableIRQ(EXTI0_IRQn);
NVIC_EnableIRQ(EXTI1_IRQn);
```
阅读全文