stm32f103定时器
时间: 2023-07-11 18:47:21 浏览: 85
STM32F103的定时器比较多,其中包括基本定时器、通用定时器、高级定时器等。在使用定时器之前,需要先配置定时器的时钟源、时钟分频、计数模式、自动重载值等参数,然后开启定时器,即可开始计时。
以下是一个使用STM32F103基本定时器TIM2的示例代码,演示了如何实现定时器中断:
```c
#include "stm32f10x.h"
void TIM2_IRQHandler(void)
{
if(TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)
{
// 这里添加定时器中断处理代码
// ...
TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志位
}
}
int main(void)
{
// 使能定时器时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
// 配置定时器
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_TimeBaseStructure.TIM_Period = 10000 - 1; // 自动重载值
TIM_TimeBaseStructure.TIM_Prescaler = 72 - 1; // 时钟分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数模式
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分割
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// 配置定时器中断
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); // 使能定时器中断
TIM_Cmd(TIM2, ENABLE); // 开启定时器
while(1)
{
// 这里添加主程序代码
// ...
}
}
```
在上面的代码中,定时器的时钟源为APB1时钟,即72MHz,时钟分频为72,计数模式为向上计数,自动重载值为10000,即定时器中断周期为1ms。在定时器中断处理函数中添加相应的处理代码即可。
阅读全文