stm32f103c8t6中断服务函数
时间: 2024-12-26 08:19:14 浏览: 4
### STM32F103C8T6 中断服务函数
对于STM32F103C8T6微控制器而言,中断机制允许处理器响应外部事件而不必轮询这些事件的状态。为了实现这一功能,在编写程序时需定义特定的中断服务函数(ISR),以便当触发条件满足时执行相应的处理逻辑。
#### 定义中断向量表
在启动文件(`startup_stm32f1xx.s`)中已经预设好了所有可能使用的中断入口地址列表——即所谓的“中断向量表”。每个外设都有对应的IRQn_Type枚举值来表示其位置[^1]。
#### 配置NVIC (嵌套向量中断控制器)
要使能某个具体的中断源之前,还需要配置NVIC以设置优先级并开启该通道:
```c
// 设置EXTI线9-5中断分组抢占优先级为1, 子优先级也为1
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC📐⚗📐📐📐📐📐📐📐📐⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗⚗📐
def NVIC_PriorityGroupConfig(NVIC_PriorityGroup);
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
```
#### 编写自定义ISR
接下来就是创建实际用于响应中断的服务例程了。通常情况下会把它们放在`stm32f1_it.c`这个文件里,并且按照标准命名约定给定名称,比如针对按键产生的下降沿触发的外部中断可以这样写:
```c
void EXTI9_5_IRQHandler(void){
if(EXTI_GetITStatus(EXTI_Line7)!= RESET){ // 检查是否是LINE7引起的中断请求
/* 处理代码 */
// 清除标志位以防再次误触
EXTI_ClearITPendingBit(EXTI_Line7);
}
}
```
上述例子展示了如何检测到指定线路(这里假设为GPIO端口上的第7脚)发生状态变化后所采取的动作序列[^2]。
阅读全文