stm32f103 TIM3 100ms定时器中断
时间: 2023-05-26 09:03:00 浏览: 160
STM32F103定时器中断
4星 · 用户满意度95%
以下是一个基本的STM32F103 TIM3定时器的100ms中断的示例,可以方便地在Keil IDE以及其他一些IDE中使用:
```c
#include "stm32f10x.h"
void TIM3_IRQHandler(void) {
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
// 在此处添加需要执行的代码
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
int main(void) {
// 启用定时器3
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitTypeDef timerInitStructure;
timerInitStructure.TIM_Prescaler = 7200 - 1; // 设置预分频器
timerInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 配置为向上计数
timerInitStructure.TIM_Period = 10000 - 1; // 设置定时器周期为100ms
timerInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
timerInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM3, &timerInitStructure);
// 激活计数器
TIM_Cmd(TIM3, ENABLE);
// 使能定时器3的中断
NVIC_InitTypeDef nvicStructure;
nvicStructure.NVIC_IRQChannel = TIM3_IRQn; // 设置TIM3中断通道
nvicStructure.NVIC_IRQChannelPreemptionPriority = 0; // 设置抢占优先级为0
nvicStructure.NVIC_IRQChannelSubPriority = 1; // 设置子优先级为1
nvicStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&nvicStructure);
while (1) {
// 在此处添加需要执行的代码
}
}
```
在上述代码中,我们启用了计时器3,设置了预分频器为7200,以便将时钟频率减少为10kHz。然后,我们将计数器配置为向上计数,定时器周期为10000,则定时器初始频率为1Hz。最后,打开计数器并启用中断。在定时器中断中,我们可以添加需要执行的代码,然后清除中断标志以准备下一个中断。在主循环中,我们可以添加需要执行的代码。
阅读全文