SysTick 定时器延时
CM3?内核的处理器,内部包含了一个SysTick?定时器,SysTick?是一个24?位的倒计数定时器,当计到0?时,将从RELOAD?寄存器中自动重装载定时初值。只要不把它在SysTick?控制及状态寄存器中的使能位清除,就永不停息。系统定时器一般用于操作系统,用于产生时基,维持操作系统的心跳。下面是.c和.h文件中的代码
#include "bsp_SysTick.h"
static __IO u32 TimingDelay;
/**
* @brief ???ˉ?μí3μ?′e?¨ê±?÷ SysTick
* @param ?T
* @retval ?T
*/
void SysTick_Init(void)
{
/* SystemFrequency / 1000 1ms?D??ò?′?
* SystemFrequency / 100000 10us?D??ò?′?
* SystemFrequency / 1000000 1us?D??ò?′?
*/
if (HAL_SYSTICK_Config(SystemCoreClock / 1000000))
{
/* Capture error */
while (1);
}
}
/**
* @brief us?óê±3ìDò,10us?aò???μ¥??
* @param
* @arg nTime: Delay_us( 1 ) ?òêμ??μ??óê±?a 1 * 10us = 10us
* @retval ?T
*/
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
while(TimingDelay != 0);
}
/**
* @brief ??è??ú??3ìDò
* @param ?T
* @retval ?T
* @attention ?ú SysTick ?D??oˉêy 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函数添加到滴答定时器的中断里。
|