写一个STM32F103c8的延时函数
时间: 2025-01-05 08:45:33 浏览: 7
在STM32F103C8微控制器上编写一个延时函数通常会利用硬件定时器,比如 TIM1 或 TIM2。这里是一个使用TIM1的简单示例,使用了SysTick中断来实现软件延时:
```c
#include "stm32f1xx_hal.h"
#include "tim HAL库"
// 定义延时宏,单位为毫秒
#define DELAY_MS(ms) ((ms * SysClock_GetHertz()) / 1000)
void Delay(uint32_t delay_ms)
{
// 初始化TIM1
TIM_HandleTypeDef htim;
htim.Instance = TIM1;
htim.Init.Prescaler = (SystemCoreClock / 1000U) - 1; // 计算出1ms的Prescaler值(假设你的系统频率是168MHz)
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
htim.Init.Period = DELAY_MS(delay_ms) - 1; // 防止计数溢出
htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
HAL_TIM_Base_Init(&htim);
// 启动定时器
HAL_TIM_Base_Start_IT(&htim);
// 等待计时完成
while (HAL_TIM_GET_FLAG(&htim, TIM_FLAG_UPDATE) == RESET);
}
阅读全文