stm32f103c8t6最小系统板外部中断按键代码寄存器版本
时间: 2025-05-30 20:26:53 浏览: 11
### STM32F103C8T6 外部中断按键寄存器实现
在 STM32F103C8T6 的最小系统板上,通过寄存器操作来实现外部中断功能是一种高效的方式。以下是基于寄存器的外部中断按键代码示例。
#### GPIO 配置
GPIO 引脚需要配置为输入模式,并启用外部中断触发功能。具体来说,EXTI(External Interrupt Line)用于处理外部中断事件[^1]。
```c
#include "stm32f1xx.h"
void GPIO_Init(void) {
// 启用 GPIOA 时钟
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
// PA0 设置为浮空输入 (Input Floating Mode)
GPIOA->CRL &= ~(0xF << 0); // 清除 PA0 的配置位
GPIOA->CRL |= (0x0 << 0); // 浮空输入模式
}
void EXTI_Init(void) {
// 启用 AFIO 和 SYSCFG 时钟
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
// 将 PA0 映射到 EXTI_Line0
AFIO->EXTICR[0] &= ~AFIO_EXTICR1_EXTI0_PA;
// 配置 EXTI 控制寄存器
EXTI->IMR |= EXTI_IMR_MR0; // 解锁 EXTI 线 0 中断屏蔽
EXTI->RTSR |= EXTI_RTSR_TR0; // 上升沿触发
EXTI->FTSR |= EXTI_FTSR_TR0; // 下降沿触发 (可选)
// NVIC 配置
NVIC_EnableIRQ(EXTI0_IRQn);
}
```
#### 中断服务函数
当检测到按键按下或释放时,会进入对应的中断服务程序 ISR。
```c
void EXTI0_IRQHandler(void) {
if (EXTI->PR & EXTI_PR_PR0) { // 检查是否有未清除的中断标志
// 执行按键响应逻辑
// ...
// 清除中断挂起状态
EXTI->PR = EXTI_PR_PR0;
}
}
```
#### 主函数初始化流程
主函数负责调用上述初始化函数并启动循环等待。
```c
int main(void) {
GPIO_Init(); // 初始化 GPIO
EXTI_Init(); // 初始化 EXTI
while (1) {
// 循环运行其他任务
}
}
```
此代码实现了基于寄存器的操作方式,在 STM32F103C8T6 最小系统板上完成了一个简单的外部中断按键功能。
阅读全文
相关推荐


















