STM32单片机的延时函数

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


//微秒级的延时
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行左右,把他注释掉就好了。

猜你喜欢

转载自blog.csdn.net/qq_38156743/article/details/131087002