SysTick 定时器延时
CM3 内核的处理器,内部包含了一个SysTick 定时器,SysTick 是一个24 位的倒计数定时器,当计到0 时,将从RELOAD 寄存器中自动重装载定时初值。只要不把它在SysTick 控制及状态寄存器中的使能位清除,就永不停息。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。下面是.c和.h文件中的代码
#include "bsp_SysTick.h"
static __IO u32 TimingDelay;
/**
* @brief Æô¶¯ÏµÍ³µÎ´ð¶¨Ê±Æ÷ SysTick
* @param ÎÞ
* @retval ÎÞ
*/
void SysTick_Init(void)
{
/* SystemFrequency / 1000 1msÖжÏÒ»´Î
* SystemFrequency / 100000 10usÖжÏÒ»´Î
* SystemFrequency / 1000000 1usÖжÏÒ»´Î
*/
if (HAL_SYSTICK_Config(SystemCoreClock / 1000000))
{
/* Capture error */
while (1);
}
}
/**
* @brief usÑÓʱ³ÌÐò,10usΪһ¸öµ¥Î»
* @param
* @arg nTime: Delay_us( 1 ) ÔòʵÏÖµÄÑÓʱΪ 1 * 10us = 10us
* @retval ÎÞ
*/
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief »ñÈ¡½ÚÅijÌÐò
* @param ÎÞ
* @retval ÎÞ
* @attention ÔÚ SysTick ÖжϺ¯Êý SysTick_Handler()µ÷ÓÃ
*/
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00)
{
TimingDelay--;
}
}
#ifndef __SYSTICK_H
#define __SYSTICK_H
#include "stm32f1xx.h"
typedef uint32_t u32;
void SysTick_Init(void);
void Delay_us(__IO u32 nTime);
#define Delay_ms(x) Delay_us(1000*x) //µ¥Î»ms
#endif /* __SYSTICK_H */
如果要使用的话需要将TimingDelay_Decrement函数添加到滴答定时器的中断里。