打印
[STM32F1]

怎么用for写1分钟的计时?

[复制链接]
824|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
王小琪|  楼主 | 2020-10-22 15:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,我想要写一个粗略的60s的计时,想要用for语句来写,举例如下:
for(i=1;i<500;i++)
for(m=1;m<500;m++)
   for(j=1;j<500;j++)
   ………………………………………………
     for(n=1;n<500;n++)
类似于这样无限套娃下去,是否就可以得到想要的任何计时了(但从理论而言,实际项目可能很少人这么做)
问题:这样的计时时间取决于没执行一步单片机的机器周期,大概是这个意思吧,但是STM32的时钟相对比较复杂,包括内部,外部,高速,低速,还是有倍频,这些时钟的选取对于用for写的计时应该是有影响的吧,如果我想要按照上面的思路写60s的计时,时钟以及上面的参数应该如何选取呢????               

PS:定时器确实可以做60s的定时,一般也都是用定时器来做。但是从研究的角度来看,我想要用for来做应该如何实现?

使用特权

评论回复
评论
thinkabout4451 2020-10-24 09:20 回复TA
弄个gpio输出led测下就知道了,但这个写法不推荐,没有可移植性,甚至和编译器的优化都有关系 
沙发
zhuomuniao110| | 2020-10-22 23:08 | 只看该作者
我觉得可以

使用特权

评论回复
板凳
zhuomuniao110| | 2020-10-22 23:09 | 只看该作者
定时器计时1秒,你for60次也可以啊

使用特权

评论回复
地板
凯复Kane| | 2020-10-22 23:17 | 只看该作者
粗略是真的粗略 麻烦也是真的麻烦 不过确实方法知道的越多越好 也好理解芯片是怎么做计时的

使用特权

评论回复
5
正圆椭圆| | 2020-10-22 23:56 | 只看该作者
哈哈 很有意思的想法 确实不实用不过理解高于应用

使用特权

评论回复
6
zchong| | 2020-10-23 07:21 | 只看该作者
看汇编,了解一个循环运行了多少条指令,之后慢慢算,应该还是能做到比较准的,哈哈

使用特权

评论回复
7
王小琪|  楼主 | 2020-10-23 08:44 | 只看该作者
zhuomuniao110 发表于 2020-10-22 23:09
定时器计时1秒,你for60次也可以啊

就是不想要定时器来做,这是两种不一样的思路,算是个人的瞎折腾吧,哈哈

使用特权

评论回复
评论
zlf1208 2020-11-13 11:03 回复TA
@王小琪 :{:handshake:} 
王小琪 2020-11-13 09:42 回复TA
@zlf1208 :见微知著,对“如果没意义,那就是浪费时间 ”这句话表达下自己的看法而已。 
zlf1208 2020-11-13 08:56 回复TA
@王小琪 :这么小的一点事,上升到价值观的层面,感觉有点夸张了。 
zlf1208 2020-11-13 08:54 回复TA
@王小琪 :机器周期在汇编指令手册上可以查到的,不需要那么费事,一条高级语言会翻译成多条低级语言,所以高级语言的机器周期与编译器有关,仅此而已 
王小琪 2020-11-13 08:49 回复TA
@zlf1208 :可以对于STM32的机器周期有一个更深刻的理解,譬如有没有机器周期,一次机器周期是多久,运行不一样的命令时间是多久等等?至于意义??每天睡8个小时和睡7.5个小时,多睡半个小时那不是浪费时间吗,这个涉及到个人价值观,不多加评价。 
zlf1208 2020-10-24 14:53 回复TA
这样做的意义在哪里呢?如果没意义,那就是浪费时间 
8
王小琪|  楼主 | 2020-10-23 08:46 | 只看该作者
zhuomuniao110 发表于 2020-10-22 23:09
定时器计时1秒,你for60次也可以啊

就是不想要定时器来做,这是两种不一样的思路,算是个人的瞎折腾吧,哈哈

使用特权

评论回复
9
王小琪|  楼主 | 2020-10-23 08:47 | 只看该作者
zchong 发表于 2020-10-23 07:21
看汇编,了解一个循环运行了多少条指令,之后慢慢算,应该还是能做到比较准的,哈哈 ...

51单片机的话有机器周期的概念,可以算出来一条指令用了几个机器周期,用了多时时间。STM32比较高级,时钟比较多,没有机器周期的概率,配置不一样的时钟,所用的时间也不一样, 这个还在研究。

使用特权

评论回复
10
王小琪|  楼主 | 2020-10-23 08:49 | 只看该作者
正圆椭圆 发表于 2020-10-22 23:56
哈哈 很有意思的想法 确实不实用不过理解高于应用

哈哈,是啊,确实不实用,直接用定时器它不香吗,算是闲来无事的胡思乱想

使用特权

评论回复
11
王小琪|  楼主 | 2020-10-23 08:51 | 只看该作者
凯复Kane 发表于 2020-10-22 23:17
粗略是真的粗略 麻烦也是真的麻烦 不过确实方法知道的越多越好 也好理解芯片是怎么做计时的 ...

太过于深入了解芯片的底层也并不是好事,就好像现在ST主推STM32CUBEMX,新的片子都不给标准库函数了,就是更多的将心思用在算法和设计上,底层的配置不建议多深究,官方给人的是这个感觉。

使用特权

评论回复
12
123654789| | 2020-10-23 09:14 | 只看该作者
  如果真的要这样下去 ,

  那么就来一个大一点的数值 ,

  unsigned   int  LX ;

  for( LX = 0xff ff ff ff ff ff ff ff ; LX > 0 ; LX-- ) ;

使用特权

评论回复
13
王小琪|  楼主 | 2020-10-23 11:22 | 只看该作者
123654789 发表于 2020-10-23 09:14
如果真的要这样下去 ,

  那么就来一个大一点的数值 ,

可是这样的话,具体延时多久判断不了啊

使用特权

评论回复
14
kingkits| | 2020-10-23 11:22 | 只看该作者
临时用个IO脚,示波器测试调整一下就好了

使用特权

评论回复
15
binoo7| | 2020-10-23 17:24 | 只看该作者
还是看定时器吧,这样的话误差太大了,就好像用汇编写NOP是一样的,多少个机器时间,如果有中断或者其他的话真的会影响定时器的运行的

使用特权

评论回复
16
icecut| | 2020-10-23 22:26 | 只看该作者
没人这么写啊. 有timer不用,自己找罪受啊

使用特权

评论回复
17
王小琪|  楼主 | 2020-10-24 08:32 | 只看该作者
icecut 发表于 2020-10-23 22:26
没人这么写啊. 有timer不用,自己找罪受啊

强迫症的执着,你不懂。就好像现在即使可以免费pcb打板,也有人执着于自己用斐林试剂自己做板。性价比不高,但自己乐在其中。

使用特权

评论回复
18
王小琪|  楼主 | 2020-10-24 08:33 | 只看该作者
binoo7 发表于 2020-10-23 17:24
还是看定时器吧,这样的话误差太大了,就好像用汇编写NOP是一样的,多少个机器时间,如果有中断或者其他的 ...

是的,误差很大。从准确性来看肯定是定时器最准确的。

使用特权

评论回复
19
icecut| | 2020-10-24 10:00 | 只看该作者
这种方法只有单片机才能搞精确.我觉得用定时器才是强迫症干的.

使用特权

评论回复
20
binoo7| | 2020-10-24 10:26 | 只看该作者
王小琪 发表于 2020-10-24 08:33
是的,误差很大。从准确性来看肯定是定时器最准确的。

因为定时器是独立存在的,与整个系统的流程不冲突

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

227

主题

578

帖子

6

粉丝