编制基于stm32f103单片机的100msTIM1定时器中断服务函数并配有中文注释
时间: 2023-12-22 12:06:08 浏览: 91
好的,以下是一个基于STM32F103单片机的100ms TIM1定时器中断服务函数,并配有中文注释:
```c
#include "stm32f10x.h"
void TIM1_UP_IRQHandler(void) // TIM1中断处理函数
{
if (TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET) // 判断TIM1更新(溢出)中断是否发生
{
TIM_ClearITPendingBit(TIM1, TIM_IT_Update); // 清除TIM1更新中断标志位
// 在此处添加需要执行的代码
}
}
int main(void)
{
// 初始化TIM1定时器
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // 使能TIM1时钟
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 9999; // 计数器自动重装值,100ms = 10Hz,定时器时钟频率为72MHz,则计数器自动重装值为:(72MHz/10Hz)-1 = 7199
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 分频器,时钟频率为72MHz,分频系数为7199+1,则定时器时钟频率为:72MHz/(7199+1) = 10kHz
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); // 初始化TIM1定时器
// 配置TIM1中断
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; // TIM1中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE); // 使能TIM1更新(溢出)中断
TIM_Cmd(TIM1, ENABLE); // 使能TIM1定时器
while (1)
{
// 在此处添加需要执行的代码
}
}
```
以上代码中,TIM1定时器的时钟频率为72MHz,分频系数为7199+1,计数器自动重装值为9999,因此定时器的计数周期为100ms,即每隔100ms会产生一次中断。在TIM1中断处理函数中,可以添加需要执行的代码。在此示例中,我们只是清除了TIM1更新(溢出)中断标志位。
阅读全文