写一个STM32的中断程序
时间: 2023-06-25 18:02:04 浏览: 48
好的,下面是一个简单的STM32中断程序示例,以TIM2中断为例:
```c
#include "stm32f10x.h"
void TIM2_IRQHandler(void) // 中断处理函数
{
if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) // 判断是否是TIM2溢出中断
{
// 在这里编写中断处理程序
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志位
}
}
int main(void)
{
// 初始化TIM2定时器
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 1000 - 1; // 定时器周期为1000个计数器时钟周期
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; // 定时器预分频器为72-1,即计数器时钟为1MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 初始化中断控制器NVIC
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; // TIM2中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级为0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级为0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 开启TIM2中断
TIM_Cmd(TIM2, ENABLE); // 开启TIM2定时器
while (1)
{
// 在这里编写主程序
}
}
```
该程序初始化了一个TIM2定时器,并开启了它的中断功能。中断处理函数`TIM2_IRQHandler`中判断了是否是TIM2的溢出中断,并在其中编写了中断处理程序。在主程序中,可以编写其他需要执行的代码。