STM32F103滴答定时器 毫秒微秒延时
时间: 2023-07-28 13:09:34 浏览: 195
对于STM32F103系列微控制器的滴答定时器,可以使用它来实现毫秒和微秒级的延时。下面是两个简单的函数示例,用于实现延时。
首先,我们需要启用滴答定时器。可以使用下面的代码片段来初始化滴答定时器:
```c
void SysTick_Init(void)
{
SysTick->LOAD = (uint32_t)(SystemCoreClock / 1000) - 1; // 设置滴答定时器的重装载值,实现1ms的中断一次
SysTick->VAL = 0; // 清空当前计数值
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; // 开启滴答定时器
}
```
接下来,我们可以定义一个函数来实现毫秒级延时:
```c
void delay_ms(uint32_t ms)
{
uint32_t start = SysTick->VAL; // 记录当前计数值
uint32_t target = start - (ms * (SystemCoreClock / 1000)); // 计算目标计数值
if (start < target) // 处理计数器溢出的情况
{
while (SysTick->VAL > start || SysTick->VAL <= target);
}
else
{
while (SysTick->VAL > start && SysTick->VAL <= target);
}
}
```
最后,我们可以定义一个函数来实现微秒级延时:
```c
void delay_us(uint32_t us)
{
uint32_t start = SysTick->VAL; // 记录当前计数值
uint32_t target = start - (us * (SystemCoreClock / 1000000)); // 计算目标计数值
if (start < target) // 处理计数器溢出的情况
{
while (SysTick->VAL > start || SysTick->VAL <= target);
}
else
{
while (SysTick->VAL > start && SysTick->VAL <= target);
}
}
```
使用这两个函数,你可以在STM32F103微控制器上实现所需的毫秒和微秒级延时。请注意,这些函数会阻塞程序的执行,直到延时结束。
阅读全文
相关推荐















