gd32 delay_1ms
时间: 2023-07-21 17:45:48 浏览: 219
gd32 delay_1ms 函数的实现如下:
```c
#include "gd32f10x.h"
void delay_1ms(uint32_t count)
{
uint32_t i,j;
for(i = 0; i < count; i++)
{
for(j = 0; j < 4000; j++);
}
}
```
在该函数中,通过嵌套循环来实现延时,其中外层循环控制延时的次数,内层循环控制每次延时的时长。由于每次内层循环大约需要执行 4000 次,因此可以实现大约 1ms 的延时。在使用该函数时,只需要传入需要延时的毫秒数即可。
相关问题
gd32 delay_1ms 循环出不来
根据引用[1]和引用[2]的代码,可以看出在主函数中使用了delay_ms函数来延时1秒钟。而delay_ms函数的实现是通过调用delay_1ms函数来实现的。根据引用[1]的代码,delay_1ms函数是一个延时一定时间的函数。然而,根据引用[3]的代码,可以看出systick_config函数中的SysTick_Config函数被注释掉了,这个函数是用来配置SysTick定时器的。因此,可能是因为没有正确配置SysTick定时器导致delay_1ms函数无法正常工作,从而导致延时函数无法正常执行。建议取消注释SysTick_Config函数,并确保SysTick定时器正确配置,以解决延时函数无法正常工作的问题。
#include "gd32f30x.h" #include "gd32f303r_start.h" #include "systick.h" /*! \brief main function \param[in] none \param[out] none \retval none */ int main(void) { /* enable the LED1,2,3,4 clock */ rcu_periph_clock_enable(RCU_GPIOB); /* configure LED1,2,3,4 GPIO port */ gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9); gpio_bit_reset(GPIOB, GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9); systick_config(); while(1) { /* turn on PB5 */ GPIO_BOP(GPIOB) = GPIO_PIN_5; /* insert 200 ms delay */ delay_1ms(200); /* turn on PB8 */ GPIO_BOP(GPIOB) = GPIO_PIN_8; /* insert 200 ms delay */ delay_1ms(200); /* turn on PB9 */ GPIO_BOP(GPIOB) = GPIO_PIN_9; /* insert 200 ms delay */ delay_1ms(200); /* turn off LEDs */ GPIO_BC(GPIOB) = GPIO_PIN_5; GPIO_BC(GPIOB) = GPIO_PIN_8; GPIO_BC(GPIOB) = GPIO_PIN_9; /* insert 200 ms delay */ delay_1ms(200); } } 注释每一行代码
这段代码是一个使用GD32F303芯片的嵌入式应用程序。下面是对每一行代码的注释:
```c
#include "gd32f30x.h"
#include "gd32f303r_start.h"
#include "systick.h"
```
这些是所需的头文件,用于包含GD32F303芯片的相关定义和函数。
```c
/*!
\brief main function
\param[in] none
\param[out] none
\retval none
*/
int main(void)
```
这是主函数的定义,程序从这里开始执行。
```c
/* enable the LED1,2,3,4 clock */
rcu_periph_clock_enable(RCU_GPIOB);
```
启用LED1、LED2、LED3和LED4的时钟。
```c
/* configure LED1,2,3,4 GPIO port */
gpio_init(GPIOB, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9);
```
配置LED1、LED2、LED3和LED4的GPIO端口,使用推挽输出模式。
```c
gpio_bit_reset(GPIOB, GPIO_PIN_5 | GPIO_PIN_8 | GPIO_PIN_9);
```
将LED1、LED2、LED3和LED4的GPIO引脚复位,即关闭LED灯。
```c
systick_config();
```
配置系统滴答定时器。
```c
while(1) {
/* turn on PB5 */
GPIO_BOP(GPIOB) = GPIO_PIN_5;
/* insert 200 ms delay */
delay_1ms(200);
/* turn on PB8 */
GPIO_BOP(GPIOB) = GPIO_PIN_8;
/* insert 200 ms delay */
delay_1ms(200);
/* turn on PB9 */
GPIO_BOP(GPIOB) = GPIO_PIN_9;
/* insert 200 ms delay */
delay_1ms(200);
/* turn off LEDs */
GPIO_BC(GPIOB) = GPIO_PIN_5;
GPIO_BC(GPIOB) = GPIO_PIN_8;
GPIO_BC(GPIOB) = GPIO_PIN_9;
/* insert 200 ms delay */
delay_1ms(200);
}
```
在一个无限循环中,依次点亮LED1、LED2、LED3并延时200毫秒,然后关闭所有LED并再次延时200毫秒。
希望这能帮助到你!如果还有其他问题,请随时提问。
阅读全文