野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10966|回复: 9

零死角玩转 第12章 SysTick 定时器 开启后不关闭不会有影响么

[复制链接]
发表于 2016-8-12 09:38:54 | 显示全部楼层 |阅读模式
零死角玩转 第12章 SysTick 定时器  在Delay_us(100000)中 开启后不关闭,不会影响下一个Delay_us(100000)的精确计时么?
回复

使用道具 举报

发表于 2016-8-12 10:05:26 | 显示全部楼层
不会
回复

使用道具 举报

 楼主| 发表于 2016-8-12 10:11:52 | 显示全部楼层

是因为使能定时器的时候,计数的寄存器被重置么?
回复 支持 反对

使用道具 举报

发表于 2016-8-12 10:24:09 | 显示全部楼层
不用担心 发表于 2016-8-12 10:11
是因为使能定时器的时候,计数的寄存器被重置么?

不是,当定时的时间到了,产生中断,然后计数器的值就会被重置
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-12 10:48:19 | 显示全部楼层
fire 发表于 2016-8-12 10:24
不是,当定时的时间到了,产生中断,然后计数器的值就会被重置

看您的回复感觉可能您理解错了我的问题
04 LED1( ON );
05 Delay_us(100000);
06LED1( OFF );
07
08
09 LED2( ON );
10 Delay_us(100000);
12 LED2( OFF );
第五行代码跳出以后,定时器是否还是在计数?如果还在计数的话,假如5到10两次延时程序之间代码较多,占用一些时间,那是否会影响到第二次的延时程序的精确程度?(最多为定时器的一个计数周期,本例为10us,从这个例子看可能影响不大,但若是精度要求较高,是不是会不准确?)
回复 支持 反对

使用道具 举报

发表于 2016-8-12 12:43:00 | 显示全部楼层
不用担心 发表于 2016-8-12 10:48
看您的回复感觉可能您理解错了我的问题
04 LED1( ON );
05 Delay_us(100000);

不会,
  1. void Delay_us(__IO u32 nTime)
  2. {
  3.         TimingDelay = nTime;       

  4.         SysTick->CTRL |=  SysTick_CTRL_ENABLE_Msk;

  5.         while(TimingDelay != 0);
  6. }
复制代码
  1. void TimingDelay_Decrement(void)
  2. {
  3.         if (TimingDelay != 0x00)
  4.         {
  5.                 TimingDelay--;
  6.         }
  7. }
复制代码
每次调用都会把参数传递给TimingDelay,中断就负责只要TimingDelay>0,就每次自减,所以每次调用都会重新更新需要自减的数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-12 15:18:50 | 显示全部楼层
满地落叶est 发表于 2016-8-12 12:43
不会,每次调用都会把参数传递给TimingDelay,中断就负责只要TimingDelay>0,就每次自减,所 ...

TimingDelay(中断的个数)确实是不会有错。但第二次进入void Delay_us(__IO u32 nTime)函数时,TimingDelay第一次减1的时间历程有没有可能不够一个定时器中断周期?假如定时器从开启之后就一直工作,那第二次刚进入void Delay_us(__IO u32 nTime)函数时,此时的定时器 数据寄存器中的数会不会不是设定值N,而是小于N的某个数,甚至是1,导致第二个延时程序的第一个中断会时间很短,甚至接近于0?
回复 支持 反对

使用道具 举报

发表于 2016-8-12 18:14:46 | 显示全部楼层
不用担心 发表于 2016-8-12 15:18
TimingDelay(中断的个数)确实是不会有错。但第二次进入void Delay_us(__IO u32 nTime)函数时,TimingDe ...

不会,因为嘀嗒定时器的值初始化后就不会再改变,每次定时器的值自减,自减完后重新装载。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-14 08:51:48 | 显示全部楼层
满地落叶est 发表于 2016-8-12 18:14
不会,因为嘀嗒定时器的值初始化后就不会再改变,每次定时器的值自减,自减完后重新装载。

不好意思昨天有事没看论坛,感觉可能是我没表述清楚,总觉得并不是我想要的答案,但还是谢谢了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-8-14 08:52:25 | 显示全部楼层
满地落叶est 发表于 2016-8-12 18:14
不会,因为嘀嗒定时器的值初始化后就不会再改变,每次定时器的值自减,自减完后重新装载。

不好意思昨天有事没看论坛,感觉可能是我没表述清楚,总觉得并不是我想要的答案,但还是谢谢了!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-8 22:37 , Processed in 0.040764 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表