初始化滴答定时器
void SysTick_Init(void)
{
if (SysTick_Config(SystemCoreClock / 1000000)){
while (1);
}
SysTick->CTRL &= ~ SysTick_CTRL_ENABLE_Msk;
}
#define SysTick_CTRL_ENABLE_Pos 0 /*!< SysTick CTRL: ENABLE Position */
#define SysTick_CTRL_ENABLE_Msk (1ul << SysTick_CTRL_ENABLE_Pos) /*!< SysTick CTRL: ENABLE Mask */
#define SysTick_LOAD_RELOAD_Pos 0 /*!< SysTick LOAD: RELOAD Position */
#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFul << SysTick_LOAD_RELOAD_Pos) /*!< SysTick LOAD: RELOAD Mask */
延时程序
定义静态全局变量和延时函数
static __IO u32 TimingDelay;
void Delay_us(__IO u32 nTime)
{
TimingDelay = nTime;
SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
while(TimingDelay != 0);
}
SysTick中断函数SysTick_Handler()
#include "bsp_systick.h"
void SysTick_Handler(void)
{
TimingDelay_Decrement();
}
SysTick中断函数调用的函数
void TimingDelay_Decrement(void)
{
if (TimingDelay != 0x00){
TimingDelay--;
}
}
使用宏定义写出不同单位的延时函数
#define Delay_ms(x) Delay_us(1000*x)
#define Delay_s(x) Delay_us(1000000*x)