stm32f103c8t6中断引脚
时间: 2025-01-09 18:49:45 浏览: 4
### STM32F103C8T6 中断引脚配置及用法
对于 STM32F103C8T6 单片机而言,外部中断线可以连接到 GPIO 的任意引脚上,但是每个端口只有一条 EXTI 线可用于触发中断事件。这意味着如果多个引脚共享同一条 EXTI 线,则这些引脚上的变化会触发相同的中断处理程序[^1]。
为了使能某个特定的外设中断,在初始化阶段需要完成如下操作:
- 配置相应的GPIO作为输入模式;
- 设置对应的EXTI线路来响应边沿检测(上升沿/下降沿/双边沿);
- 开启NVIC中的对应中断通道并设置优先级;
下面是一个简单的代码示例展示了如何配置 PA0 引发的外部中断:
```c
#include "stm32f1xx_hal.h"
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
int main(void){
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
while (1){}
}
// 初始化函数,用于配置PA0为下拉输入,并允许其产生的中断请求
static void MX_GPIO_Init(void) {
__HAL_RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA时钟
GPIO_InitTypeDef GPIO_InitStruct = {0};
/*Configure GPIO pin : PA0 */
GPIO_InitStruct.Pin = GPIO_PIN_0;
GPIO_InitStruct.Mode = GPIO_MODE_IT_FALLING; // 下降沿触发中断
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
// 启用SYSCFG时钟以便访问EXTI寄存器
__HAL_RCC_SYSCFG_CLK_ENABLE();
// 清除可能存在的挂起位
HAL_NVIC_ClearPendingIRQ(EXTI0_IRQn);
// 设置中断优先级
HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
// 使能全局中断
HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}
// 定义中断服务例程ISR
void EXTI0_IRQHandler(void){
if(__HAL_GPIO_EXTI_GET_FLAG(GPIO_PIN_0)!= RESET){
// 处理中断逻辑...
// 清除标志位以防再次误触发
__HAL_GPIO_EXTI_CLEAR_FLAG(GPIO_PIN_0);
}
}
```
阅读全文