gd32 几种延时的代码实现
时间: 2023-07-28 19:09:46 浏览: 277
在GD32微控制器中,常见的延时方式有以下几种:
1. 硬件延时
使用定时器模块来进行延时,通过设置定时器的计数值和时钟源来实现延时。该方法的优点是精度高,缺点是需要占用一个定时器。
2. 循环延时
使用循环语句来进行延时,通过循环指定的次数来实现延时。该方法的优点是简单易用,缺点是精度较低,且容易受到系统负载的影响。
3. SysTick延时
SysTick是一个系统定时器,可以用来进行精确的延时。通过设置SysTick的计数值和时钟源来实现延时。该方法的优点是精度高,且不需要占用其他硬件资源。
以下是三种延时方式的代码实现:
1. 硬件延时
```c
#include "gd32f1x0.h"
void delay_us(uint32_t us)
{
uint32_t count = us * (SystemCoreClock / 1000000);
TIMER_Delay(TIMER0, TIMER_CH_0, count);
}
void delay_ms(uint32_t ms)
{
uint32_t count = ms * (SystemCoreClock / 1000);
TIMER_Delay(TIMER0, TIMER_CH_0, count);
}
```
2. 循环延时
```c
#include "gd32f1x0.h"
void delay_us(uint32_t us)
{
uint32_t count = us * (SystemCoreClock / 1000000) / 5;
while(count--) {}
}
void delay_ms(uint32_t ms)
{
uint32_t count = ms * (SystemCoreClock / 1000) / 5;
while(count--) {}
}
```
3. SysTick延时
```c
#include "gd32f1x0.h"
void delay_us(uint32_t us)
{
uint32_t count = us * (SystemCoreClock / 1000000);
SysTick_Config(count);
while(SysTick->CTRL & SysTick_CTRL_ENABLE_Msk) {}
}
void delay_ms(uint32_t ms)
{
uint32_t count = ms * (SystemCoreClock / 1000);
SysTick_Config(count);
while(SysTick->CTRL & SysTick_CTRL_ENABLE_Msk) {}
}
```