STM32定时器3定时自定义定时时间函数
时间: 2023-10-23 10:22:20 浏览: 154
以下是使用STM32定时器3定时自定义定时时间的函数示例:
```c
#include "stm32f10x.h"
void TIM3_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 使能TIM3时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 配置TIM3为定时器模式
TIM_TimeBaseStructure.TIM_Period = 65535; // 自动重载值
TIM_TimeBaseStructure.TIM_Prescaler = 71; // 分频系数(时钟预分频)
TIM_TimeBaseStructure.TIM_ClockDivision = 0; // 时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数模式
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// 配置TIM3中断
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; // 中断通道
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; // 抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // 子优先级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // 使能中断通道
NVIC_Init(&NVIC_InitStructure);
// 使能TIM3更新中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
// 启动TIM3
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
// 在此处添加需要执行的定时任务
// ...
// 清除TIM3更新中断标志
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
}
}
void delay_ms(uint16_t ms)
{
TIM3_Configuration();
TIM_SetCounter(TIM3, 0);
while (TIM_GetCounter(TIM3) < ms);
TIM_Cmd(TIM3, DISABLE);
TIM_ITConfig(TIM3, TIM_IT_Update, DISABLE);
}
```
在上述代码中,`delay_ms`函数用于实现自定义的定时等待时间。在函数内部,首先调用`TIM3_Configuration`函数初始化定时器3,然后设置计数器初始值为0,等待计数器达到设定值后退出循环即可。
需要注意的是,定时器3的分频系数需要根据实际的系统时钟频率和所需的定时精度进行调整。在本例中,系统时钟频率为72MHz,分频系数为71,计数器周期为1ms。如果需要更高的定时精度,可以增大分频系数或减小计数器周期。
阅读全文