stm32F103 us级延时不用定时器
时间: 2023-07-06 09:06:04 浏览: 87
在STM32F103中,可以使用内置的SysTick定时器来实现微秒级的延时,而不需要使用外部定时器。SysTick定时器是一个24位的向下计数器,可以用来产生精确的时间基准。以下是使用SysTick实现微秒级延时的示例代码:
```c
// 使能SysTick定时器
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
// 计算SysTick每个tick的时间
// 假设系统时钟频率为72MHz
uint32_t tick_time_us = 1000000 / SystemCoreClock;
// 微秒级延时函数
void delay_us(uint32_t us) {
uint32_t start_tick = SysTick->VAL;
uint32_t target_tick = start_tick - us * tick_time_us;
if (target_tick > start_tick) {
// 如果计数器溢出,需要加上计数器的最大值
target_tick += SysTick->LOAD + 1;
}
while (SysTick->VAL > target_tick);
}
```
在这个示例代码中,我们首先使能了SysTick定时器,并计算出每个tick的时间。然后,我们定义了一个名为`delay_us`的函数,用于实现微秒级延时。在函数中,我们首先获取当前的SysTick计数器值,然后计算出目标计数器值。最后,我们在一个循环中等待SysTick计数器达到目标值。当计数器溢出时,我们需要加上计数器的最大值。