STM32

一:系统滴答定时器SysTick

  现在我们想通过Systick定时器做一个精确的延迟函数,比如让LED精确延迟1秒钟闪亮一次。

 思路:利用systick定时器为递减计数器,设定初值并使能它后,它会每个1系统时钟周期计数器减,计数到 0时,SysTick计数器自动重装初值并继续计数,同时触发中断。

那么每次计数器减到0,时间经过了:系统时钟周期 *计数器初值。我们使用72M作为系统时钟,那么每次计数器减1所用的时间是1/72M,计数器的初值如果是72000,那么每次计数器减到0,时间经过(1/72M)*72000= 0.001,即1ms(简单理解:用72M的时钟频率,即1s计数72M=72000000次,那1ms计数72000次,所以计数值为72000 

系统滴答定时器的配置可调用库函数:

SysTick_Config(72000000 / 1000); // 设置计数个数:1/1000s = nTick * 1/72M


// 编写延时函数

void Delay_nMS(u32 nMS)
{
TimingDelay = nMS;
while(TimingDelay != 0);
}

// 在滴答定时器中断中调用

void SysTick_Interrupt_Service(void)
{
if(TimingDelay != 0)
{
TimingDelay--;
}
}


注意:使用时要开总中断:

void Driver_OpenEA(void)
{
// 开总中断
__enable_irq(); 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值