java定时器只执行一次_stm32系列之系统滴答定时器

最近在研究系统滴答定时器,简单的说一下对于STM32单片机中,有关于系统滴答定时器的一些感悟,因为刚刚步入,一些不对的观点希望大家给予一点建议或意见。同时也欢迎志同道合的朋友一起学习,也欢迎对科学,对学习充满热爱的朋友一起学习。

为什么我突然想要学习系统滴答定时器器呢?原因是由于最近在一个项目中,沿用老方法,使用原子库自带的延时去处理程序中,需要的一些延时。目前使用来看,好像是影响不大,没有什么危害。但是我发现使用延时的话,程序是处于等待状态的。也就是说,这个时候你的程序是死的。而且一般来说,程序执行速度是非常快的,目前看来大部分的程序,估计10微秒就可以执行完了。但是,当我们使用过多延时在程序中时,就会造成资源的浪费,对于程序本身来说,也非常不便。举一个很简单的例子,就比如说,我们目前一般使用按键时会加上一个10MS的延时来进行去抖,为了去除按键抖动,10MS延时本身是没有任何问题的。但是在这10MS内,单片机只做了一件事,那就是等待。对于主程序执行一次只需要US级别来说,这段时间单片机都可以喝杯茶了。基于以上思路,促使我想要更好的改变这种单片机等待状态。在CM3系列,systick定时器是AMR内核都存在的,这样对于移植程序来说也非常的方便。

肯定有朋友会说,你说的不就是跟使用普通定时器产生中断一样吗?是的,从本质上来说,系统滴答定时器就是一个定时器,他只计数而已。我们当然也可以用其他定时器产生同样的效果,但是既然是单片机自身带的,使用系统滴答定时器获得精准延时岂不是更好,也非常节省资源。

2bb76d35b89e4bd625e9e59048b7ecfc.png

下面是我对于STM32SYSTICK定时器调节过程中的一些方法,仅供参考!

1、要使用systick定时器,只需调用SysTick_Config(uint32_t ticks)函数即可,

自动完成了,重装载值的装载,时钟源选择,计数寄存器复位,中断优先级的设置(低),开中断,开始计数的工作。

2、要修改时钟源调用SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)。

3、要修改中断优先级调用

void NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)

应用说明:

1、因systick是一个24位的定时器,故重装值最大值为2的24次方=16 777 215,

要注意不要超出这个值。

2、systick是cortex_m3的标配,不是外设。故不需要在RCC寄存器组打开他的时钟。

3、每次systick溢出后会置位计数标志位和中断标志位,计数标志位在计数器重装载后被清除,而中断标志位也会随着中断服务程序的响应被清除,所以这两个标志位都不需要手动清除。

4、采用使用库函数的方法,只能采用中断的方法响应定时器计时时间到,如要采用查询的方法,那只能采用设置systick的寄存器的方法,具体操作以后再做分析。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值