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

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

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

评论

弄个gpio输出led测下就知道了,但这个写法不推荐,没有可移植性,甚至和编译器的优化都有关系  发表于 2020-10-24 09:20
zhuomuniao110 发表于 2020-10-22 23:08 | 显示全部楼层
我觉得可以
zhuomuniao110 发表于 2020-10-22 23:09 | 显示全部楼层
定时器计时1秒,你for60次也可以啊
凯复Kane 发表于 2020-10-22 23:17 | 显示全部楼层
粗略是真的粗略 麻烦也是真的麻烦 不过确实方法知道的越多越好 也好理解芯片是怎么做计时的
正圆椭圆 发表于 2020-10-22 23:56 | 显示全部楼层
哈哈 很有意思的想法 确实不实用不过理解高于应用
zchong 发表于 2020-10-23 07:21 来自手机 | 显示全部楼层
看汇编,了解一个循环运行了多少条指令,之后慢慢算,应该还是能做到比较准的,哈哈
 楼主| 王小琪 发表于 2020-10-23 08:44 | 显示全部楼层
zhuomuniao110 发表于 2020-10-22 23:09
定时器计时1秒,你for60次也可以啊

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

评论

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

就是不想要定时器来做,这是两种不一样的思路,算是个人的瞎折腾吧,哈哈
 楼主| 王小琪 发表于 2020-10-23 08:47 | 显示全部楼层
zchong 发表于 2020-10-23 07:21
看汇编,了解一个循环运行了多少条指令,之后慢慢算,应该还是能做到比较准的,哈哈 ...

51单片机的话有机器周期的概念,可以算出来一条指令用了几个机器周期,用了多时时间。STM32比较高级,时钟比较多,没有机器周期的概率,配置不一样的时钟,所用的时间也不一样, 这个还在研究。
 楼主| 王小琪 发表于 2020-10-23 08:49 | 显示全部楼层
正圆椭圆 发表于 2020-10-22 23:56
哈哈 很有意思的想法 确实不实用不过理解高于应用

哈哈,是啊,确实不实用,直接用定时器它不香吗,算是闲来无事的胡思乱想
 楼主| 王小琪 发表于 2020-10-23 08:51 | 显示全部楼层
凯复Kane 发表于 2020-10-22 23:17
粗略是真的粗略 麻烦也是真的麻烦 不过确实方法知道的越多越好 也好理解芯片是怎么做计时的 ...

太过于深入了解芯片的底层也并不是好事,就好像现在ST主推STM32CUBEMX,新的片子都不给标准库函数了,就是更多的将心思用在算法和设计上,底层的配置不建议多深究,官方给人的是这个感觉。
123654789 发表于 2020-10-23 09:14 | 显示全部楼层
  如果真的要这样下去 ,

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

  unsigned   int  LX ;

  for( LX = 0xff ff ff ff ff ff ff ff ; LX > 0 ; LX-- ) ;
 楼主| 王小琪 发表于 2020-10-23 11:22 | 显示全部楼层
123654789 发表于 2020-10-23 09:14
如果真的要这样下去 ,

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

可是这样的话,具体延时多久判断不了啊
kingkits 发表于 2020-10-23 11:22 | 显示全部楼层
临时用个IO脚,示波器测试调整一下就好了
binoo7 发表于 2020-10-23 17:24 | 显示全部楼层
还是看定时器吧,这样的话误差太大了,就好像用汇编写NOP是一样的,多少个机器时间,如果有中断或者其他的话真的会影响定时器的运行的
icecut 发表于 2020-10-23 22:26 | 显示全部楼层
没人这么写啊. 有timer不用,自己找罪受啊
 楼主| 王小琪 发表于 2020-10-24 08:32 | 显示全部楼层
icecut 发表于 2020-10-23 22:26
没人这么写啊. 有timer不用,自己找罪受啊

强迫症的执着,你不懂。就好像现在即使可以免费pcb打板,也有人执着于自己用斐林试剂自己做板。性价比不高,但自己乐在其中。
 楼主| 王小琪 发表于 2020-10-24 08:33 | 显示全部楼层
binoo7 发表于 2020-10-23 17:24
还是看定时器吧,这样的话误差太大了,就好像用汇编写NOP是一样的,多少个机器时间,如果有中断或者其他的 ...

是的,误差很大。从准确性来看肯定是定时器最准确的。
icecut 发表于 2020-10-24 10:00 | 显示全部楼层
这种方法只有单片机才能搞精确.我觉得用定时器才是强迫症干的.
binoo7 发表于 2020-10-24 10:26 | 显示全部楼层
王小琪 发表于 2020-10-24 08:33
是的,误差很大。从准确性来看肯定是定时器最准确的。

因为定时器是独立存在的,与整个系统的流程不冲突
您需要登录后才可以回帖 登录 | 注册

本版积分规则

232

主题

585

帖子

7

粉丝
快速回复 在线客服 返回列表 返回顶部