STM32中断程序例子
时间: 2023-11-28 10:06:27 浏览: 75
好的,以下是一个简单的STM32中断程序例子,以外部中断为例:
```c
#include "stm32f0xx.h"
void EXTI0_1_IRQHandler(void) //中断处理函数
{
if(EXTI_GetITStatus(EXTI_Line0) != RESET) //判断是否为EXTI0中断
{
GPIO_ToggleBits(GPIOB, GPIO_Pin_0); //外部中断触发时,翻转LED灯
EXTI_ClearITPendingBit(EXTI_Line0); //清除中断标志
}
}
int main(void)
{
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE); //使能SYSCFG时钟
GPIO_InitTypeDef GPIO_InitStructure; //定义GPIO初始化结构体
EXTI_InitTypeDef EXTI_InitStructure; //定义外部中断初始化结构体
NVIC_InitTypeDef NVIC_InitStructure; //定义中断向量初始化结构体
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选择引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50MHz速率
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不带上拉下拉
GPIO_Init(GPIOB, &GPIO_InitStructure); //初始化GPIOB
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0); //选择GPIOA0引脚
EXTI_InitStructure.EXTI_Line = EXTI_Line0; //选择中断线0
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //中断模式
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; //上升沿和下降沿触发
EXTI_InitStructure.EXTI_LineCmd = ENABLE; //使能外部中断线
EXTI_Init(&EXTI_InitStructure); //初始化外部中断
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_1_IRQn; //选择中断名
NVIC_InitStructure.NVIC_IRQChannelPriority = 0; //优先级设置
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能中断向量
NVIC_Init(&NVIC_InitStructure); //初始化中断向量
while (1)
{
}
}
```
以上代码演示了如何使用STM32的外部中断来控制GPIO的输出。当外部中断引脚(GPIOA0)被触发时,会执行中断处理函数中的代码,并翻转LED灯。
阅读全文