stm32 滴答定时器做一个非阻塞式的延时函数
时间: 2023-08-17 07:06:15 浏览: 71
好的,针对您的问题,我可以为您提供以下代码实现:
```c
#include "stm32f10x.h"
volatile uint32_t ticks; //定义全局变量,用于计时
void SysTick_Handler(void)
{
ticks++; //每1ms递增1
}
void delay_ms(uint32_t ms)
{
uint32_t start = ticks; //记录开始时间
while((ticks - start) < ms); //当时间未达到所需延时时间时,一直循环
}
int main()
{
SystemInit(); //系统初始化
SysTick_Config(SystemCoreClock / 1000); //配置滴答定时器,每1ms中断一次
while(1)
{
//调用延时函数,延时1000ms
delay_ms(1000);
//执行其他操作
//...
}
}
```
以上代码中,我们使用了STM32的滴答定时器作为计时器来实现延时函数。在SysTick_Handler中,我们将ticks变量递增1,表示经过了1ms。在delay_ms函数中,我们记录下开始时间start,然后通过不断检查ticks-start是否达到所需延时时间ms来判断是否结束延时,如果时间未达到,则一直循环等待。
需要注意的是,以上代码是非阻塞式的延时函数,因此在调用delay_ms函数时,可以同时执行其他操作。