stm32f103 PC6外部中断代码
时间: 2024-08-14 20:00:52 浏览: 60
【STM32F103笔记】4、中断之外部中断——喂~烧水啦
STM32F103系列微控制器支持外部中断功能,这是一种重要的实时系统处理技术,用于在特定事件发生时触发响应程序。例如,在按键按下、传感器信号变化等情况下激活中断服务例行程序(ISR)。
### STM32F103 PC6外部中断配置步骤:
#### 1. 初始化GPIO
首先需要初始化作为外部中断输入口的GPIO引脚。这里以PC6为例,假设我们需要将PC6设置为外部中断输入,并连接到某个物理中断源上(比如按键)。
```c
#include "stm32f1xx_hal.h"
void GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 设置时钟使能
__HAL_RCC_GPIOC_CLK_ENABLE();
// 配置PC6为Alternate Function推挽输出模式
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_6, GPIO_PIN_SET);
// 初始化PC6为通用I/O端口并设置模式
GPIO_InitStruct.Pin = GPIO_PIN_6;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发中断
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
}
```
#### 2. 初始化EXTI线程
接着初始化EXTI线程,配置PC6对应的外部中断。
```c
void EXTI_Init(void)
{
// 启动EXTI中断线程
__HAL_RCC_EXTI_CLK_ENABLE();
// 配置EXTI线程,指定中断触发的线(对应GPIO_Pin)和中断优先级
EXTI_InitTypeDef sConfigExtiLine = {
.ExtiEnable = ENABLE,
.ExtiTrigger = EXTI_TRIGGER_FALLING, // 下降沿触发
.ExtiSource = EXTI_SOURCE_GPIO,
.ExtiPort = EXTI_PORTC, // 对应GPIOC
.ExtiPin = GPIO_PIN_6, // 对应PC6
.ExtiPriority = EXTIPRI_LOW,
.ExtiMode = ENABLE
};
HAL_NVIC_SetPriority(EXTI0_1_IRQn, 15, 0); // 设置中断优先级,数值越小级别越高
HAL_NVIC_EnableIRQ(EXTI0_1_IRQn); // 开启中断
if (HAL_EXINT_Init(&sConfigExtiLine) != HAL_OK) {
Error_Handler(); // 如果配置失败,则执行错误处理函数
}
}
```
#### 3. 中断服务例行程序(ISR)
最后,定义中断服务例行程序(ISR),该函数将在外部中断事件触发时运行。
```c
void EXTI0_1_IRQHandler()
{
// 中断服务例行程序的具体操作
// 这里可以插入针对外部中断事件的相应处理代码
// 例如,更新状态指示灯,记录日志等
// ...
HAL_NVIC_ClearPendingIRQ(EXTI0_1_IRQn); // 清除中断标志位
}
```
### 注意事项:
- **外部中断引脚选择**:确保所选引脚未与其他功能(如定时器、ADC等)冲突。
- **中断优先级**:合理设置中断优先级,避免高优先级中断掩盖低优先级中断。
- **硬件复位和电源管理**:某些外部中断配置可能会影响硬件复位或电源管理功能,请确保所有配置不会造成潜在风险。
- **调试**:使用ST提供的串行调试工具(如SWD或JTAG)进行调试,以便观察和测试中断是否按预期工作。
---
阅读全文