使用定时器3 基于f103标准库 进行配置,需要计时一秒钟的代码
时间: 2024-02-26 07:59:29 浏览: 23
好的,以下是使用定时器3实现1秒计时的代码,基于STM32F103标准库:
```c
#include "stm32f10x.h"
void TIM3_Init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
// 开启定时器3时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
// 定时器3初始化
TIM_TimeBaseStructure.TIM_Period = 9999; // 计数周期为10000-1
TIM_TimeBaseStructure.TIM_Prescaler = 7199; // 预分频系数为7199
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// 定时器3中断配置
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);
// 使能定时器3更新中断
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
// 启动定时器3
TIM_Cmd(TIM3, ENABLE);
}
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)
{
// 定时器3中断处理
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);
// 在这里执行需要计时的代码
// ...
// 计时1秒钟
static uint32_t count = 0;
count++;
if (count == 100)
{
// 1秒钟到达,重置计数器
count = 0;
// 执行1秒钟定时任务
// ...
}
}
}
int main(void)
{
// 定时器3初始化
TIM3_Init();
while (1)
{
// 在这里可以执行其他任务
// ...
}
}
```
这段代码的作用是,使用定时器3进行1秒钟的计时,计时结束后执行一些定时任务。在 `TIM3_IRQHandler` 函数中,使用一个计数器 `count` 记录已经过去的定时周期数,当计数器累加到100时,说明已经过去了1秒钟,此时执行1秒钟的定时任务,并重置计数器。
在 `main` 函数中,调用 `TIM3_Init` 函数初始化定时器3。在 while 循环中,可以执行其他任务,比如检测传感器、控制执行器等等。