systick 定时器

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;//清空计数器
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值