在STM32f4中写一个延时微妙的函数
时间: 2024-04-23 10:28:05 浏览: 91
在STM32F4中,你可以使用SysTick定时器来实现微秒级的延时函数。下面是一个示例代码:
```c
#include "stm32f4xx.h"
// 初始化SysTick定时器
void SysTick_Init(void) {
SysTick->LOAD = (uint32_t)(SystemCoreClock / 1000000) - 1; // 设置每微秒的计数值
SysTick->VAL = 0; // 清空当前计数值
SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; // 使能SysTick定时器
}
// 微秒级延时函数
void delay_us(uint32_t us) {
uint32_t start = SysTick->VAL;
uint32_t target = start - us * (SystemCoreClock / 1000000);
if (target > start) { // 检查是否会溢出
while (SysTick->VAL > target) {
// 等待计数值达到目标值
}
} else {
while ((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0) {
// 等待计数值溢出
}
while (SysTick->VAL > target) {
// 等待计数值达到目标值
}
}
}
int main(void) {
// 初始化相关硬件和外设
SysTick_Init(); // 初始化SysTick定时器
while (1) {
// 执行其他任务
delay_us(1000); // 延时1微秒
}
}
```
在上面的示例代码中,我们通过设置SysTick定时器的加载值来实现每微秒的计数。然后,我们在延时函数`delay_us()`中计算出目标计数值,并使用循环等待SysTick计数值达到目标值。
请注意,以上代码仅为示例,实际使用时请根据自己的需求进行适当修改和调整。
阅读全文