STM32 使用SysTick实现延时
添加#include “misc.h”
输入delay.c代码
下面是 延时代码
。
// An highlighted block
/*-------------------------------------------------------------------------------
文件描述:SysTick系统滴答时钟1us中断函数库,中断时间可自由配置
备注:程序默认使用72M时钟
----------------------------------------------------------------------------------*/
#include "delay.h"
static __IO u32 TimingDelay;
/*-------------------------------------------------------------------------------
程序描述:启动系统滴答定时器SysTick
备注:使用此功能之前需要调用此函数,初始化寄存器等参数
---------------------------------------------------------------------------------*/
void SysTick_Init(void)
{
// SystemFrequency / 1000 1msÖжÏÒ»´Î
// SystemFrequency / 100000 10usÖжÏÒ»´Î
// SystemFrequency / 1000000 1usÖжÏÒ»´Î
if (SysTick_Config(SystemCoreClock / 1000000)) // 1us ST3.5.0¿â°æ±¾
{
/* Capture error */
while (1);
}
}
/*-------------------------------------------------------------------------------
延时微秒
---------------------------------------------------------------------------------*/
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/*-------------------------------------------------------------------------------
程序描述:数字递减直到0
备注:需要在中断函数SysTick_Handler()中调用
---------------------------------------------------------------------------------*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
在stm3f10x_it.c中SysTick_Handler()的加入
下面 SysTick_Handler()
的内容。
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
SysTick初始化
在main函数加入SysTick_Init();
之后就可以尽情调用Delay_us()和Delay_ms()了