函数的延时有普通的方式:
//微秒级的延时
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行左右,把他注释掉就好了。