systick 定时器的好处
使用平台stm32f4/f1;在CM3CM4中都有该定时器;用来作延时,或者实时系统的心跳时钟。可以节约MCU资源,不用浪费一个定时器。
Systick是一个24位的倒计数定时器,计到0时,将从RELOAD寄存器中自动重装载定时器初值。只要不把sysTick控制及状态寄存器的使能位清除,就永不停息。即使在睡眠中也能工作。
__IO uint32_t TimingDelay;
//config确定systick定时器的值,初始化
void SysTick_Init(void)
{
if(SysTick_Config(9000000/1000))
{
while(1);
}
//SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
}
//直接卡在我们输入的时间ms
void Delay_ms(uint16_t nTime)
{
TimingDelay = nTime;
while(TimingDelay !=0);
}
```//这里实现灯的亮灭
GPIO_Write(GPIOA, 0xfe);
Delay_ms(1000);//SysTick Timer Delay 1s
GPIO_Write(GPIOA, 0xfd);
Delay_ms(1000);
> 这里是引用
> 这里是引用
> SysTick中组要有四个寄存器
***1)CTRL 控制状态寄存器
2)LOAD自动重装在初值寄存器
3)VAL当前寄存器
4)CALIB校准值寄存器***
```bash
```bash
在这里插入代码片
(1)72MHz利用滴答定时器实现us级延时:
72MHz/8=9Mhz
void delay_us(u32 i)
{
u32 temp;
SysTick->LOAD=9*i; //设置重装数值
SysTick->CTRL=0X01; /清零计数器
SysTick->VAL=0;//使能,减到零时无动作,采用外部时钟源(系统时钟的8分频)
do
{
temp=SysTick->CTRL; //读取当前倒计数值
}
while((temp&0x01)&&(!(temp&(1<<16)))); //读取当前倒计数值
SysTick->CTRL=0; //关闭计数器
SysTick->VAL=0;//清空计数器
}