函数的延时有普通的方式:


//微秒级的延时
void delay_us(uint32_t delay_us)
{    
  volatile unsigned int num;
  volatile unsigned int t;
 
  
  for (num = 0; num < delay_us; num++)
  {
    t = 11;
    while (t != 0)
    {
      t--;
    }
  }
}
//毫秒级的延时
void delay_ms(uint16_t delay_ms)
{    
  volatile unsigned int num;
  for (num = 0; num < delay_ms; num++)
  {
    delay_us(1000);
  }
}

直接延时delay_ms(500)

二,定时器延时

#include "stm32f10x.h"   

volatile uint32_t ms_ticks = 0;

void SysTick_Init(void)
{
    if (SysTick_Config(SystemCoreClock / 1000))
    {
        // 错误处理
        while (1);
    }
}

void SysTick_Handler(void)
{
    ms_ticks++;
}

void delay_ms(uint32_t ms)
{
    uint32_t start_ticks = ms_ticks;

    while ((ms_ticks - start_ticks) < ms);
}

int main(void)
{
    SysTick_Init();
    
    while(1)
    {
        LED1_ON();
        delay_ms(500);
        LED1_OFF();
        delay_ms(500);
    }
}

delay_ms(500);延时500ms;

注意

void SysTick_Handler(void)
{
ms_ticks++;
}
这个函数在在stm32f10x_it.c中也有定义,但是没有实现,找到这个在stm32f10x_it.c,大约在135行左右,把他注释掉就好了。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐