STM32定时器3定时自定义定时时间函数
时间: 2023-10-23 13:15:08 浏览: 36
下面是一个基于STM32定时器3的自定义定时时间函数的示例代码:
```c
#include "stm32f10x.h"
void init_timer(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
TIM_TimeBaseInitStruct.TIM_Prescaler = 7200-1; // 时钟预分频值,72M/7200=10KHz
TIM_TimeBaseInitStruct.TIM_Period = 1000-1; // 定时器计数器的最大值,10KHz/1000=10Hz
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; // 定时器计数模式为向上计数
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频因子
TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; // 重复计数器的值
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct);
TIM_Cmd(TIM3, ENABLE); // 使能定时器3
}
void delay_ms(uint16_t ms)
{
TIM_SetCounter(TIM3, 0); // 重置计数器
while (TIM_GetCounter(TIM3) < ms); // 等待定时器计数器达到指定的值
}
int main(void)
{
init_timer(); // 初始化定时器3
while (1)
{
GPIO_SetBits(GPIOC, GPIO_Pin_13); // 点亮LED
delay_ms(500); // 延时500ms
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 熄灭LED
delay_ms(500); // 延时500ms
}
}
```
这段代码使用定时器3和GPIO控制板上的LED,实现了一个闪烁的效果。delay_ms函数接受一个时间参数,使用定时器3来实现延时,ms参数就是要延时的毫秒数。在delay_ms函数中,首先调用了TIM_SetCounter函数将计数器重置为0,然后进入一个循环,等待定时器计数器达到指定的值,即等待延时时间结束。最后,函数返回,程序继续执行。