stm32f103使用定时器2写一个延迟函数,延迟一秒
时间: 2024-10-14 10:04:28 浏览: 34
STM32F103微控制器上有一个常用的定时器是Timer 2,可以用来实现精确的时间间隔控制。要编写一个简单的延迟函数,通常会利用定时器2的预分频器、计数器和中断机制。这里提供一个基础的示例:
首先,你需要配置定时器2作为自由运行模式,并设置定时器2的计数器初始值和溢出时间间隔(如1秒等于65536个定时器周期)。假设我们使用的是16位定时器。
```c
#include "stm32f1xx_hal.h"
// 配置定时器2
void configure_Timer2(uint32_t prescaler, uint32_t initial_count) {
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
TIM_TimeBaseInitTypeDef timerInit;
timerInit.TIM_Prescaler = prescaler; // 分频系数
timerInit.TIM_Period = initial_count - 1; // 计数器最大值减1(因为计数从0开始)
timerInit.TIM_ClockDivision = TIM_CKD_DIV1; // 分频因子1
timerInit.TIM_RepetitionCounter = 0; // 无重复计数
HAL_TIM_TimeBaseConfig(&htim2, &timerInit);
}
void delay_Sec(uint32_t sec) {
static uint32_t count = 0;
if (sec > 0) {
while (count < 65536 * sec) { // 每个计数周期大约对应1us
__HAL_TIM_GET_TIME(&htim2); // 更新当前计数值
count++;
}
} else {
while (!__HAL_TIM_GET_FLAG(&htim2, TIM_FLAG_UPDATE)); // 等待定时器溢出标志触发
}
}
```
这个`delay_Sec()`函数接受一个秒数参数,然后通过不断读取定时器2的当前时间来实现延迟。当需要1秒钟的延时时,函数内部的循环会执行大约65536次。
阅读全文