stm32滴答定时器延时函数ms,us
时间: 2023-07-11 11:05:30 浏览: 130
stm32的滴答定时器可以用来实现毫秒级和微秒级的延时。下面是两个简单的延时函数示例:
1. 毫秒级延时函数
```c
#include "stm32f10x.h"
void delay_ms(uint32_t n)
{
SysTick->LOAD = 8000 * n; // 时钟频率为8MHz,每1ms计数8000次
SysTick->CTRL = 0x01; // 开启定时器
while(!(SysTick->CTRL & 0x10000)); // 等待计数完成
SysTick->CTRL = 0x00; // 关闭定时器
}
```
2. 微秒级延时函数
```c
#include "stm32f10x.h"
void delay_us(uint32_t n)
{
uint32_t temp;
SysTick->LOAD = 8 * n; // 时钟频率为8MHz,每1us计数8次
SysTick->CTRL = 0x01; // 开启定时器
do{
temp = SysTick->CTRL;
}while(!(temp & 0x01) && (temp & 0x10000)); // 等待计数完成
SysTick->CTRL = 0x00; // 关闭定时器
SysTick->VAL = 0x00; // 清空计数器
}
```
这两个函数都是基于SysTick定时器实现的,需要注意的是,SysTick定时器的时钟频率是8MHz,也就是每1个时钟周期是125ns。在使用时需要根据实际需要进行调整。
阅读全文