stm32 滴答定时器做一个非阻塞式的延时函数
时间: 2023-08-17 09:06:15 浏览: 251
好的,针对您的问题,我可以为您提供以下代码实现:
```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函数时,可以同时执行其他操作。
阅读全文
相关推荐
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)