[STM32F1] stm32死延时,不用定时器,到底有没有靠谱的方法?st公司能给个办法不?

[复制链接]
10012|50
diweo 发表于 2014-9-26 08:45 | 显示全部楼层
xlsbz 发表于 2014-9-26 08:42
改变时基主要为了降低负载,比如需要采高频速度

鱼和熊掌不可兼得,具体怎么决定还是需要仔细权衡,不是一句两句话说的清楚的。
bear1 发表于 2014-9-26 09:39 | 显示全部楼层
diweo 发表于 2014-9-26 08:26
有1个定时器,就等于有了无数个定时器。
有了systick,你可以同时实现1ms,10ms,100ms,1000ms任意个时基的组 ...

时基 跟 延时 是一个概念吗?
NE5532 发表于 2014-9-26 10:57 | 显示全部楼层
ARM的内核跟存储器是分离的,延时确实有不确定性,而且编译器优化还可能影响,我们用软延时,肯定都是要求不严格的地方,而且把优化关掉。
mmuuss586 发表于 2014-9-26 12:54 | 显示全部楼层

楼主应该去参加ST的研讨会,去听听;
STM32的性能并不差,比西门子低端或一般PLC功能强多了;
研讨会专门讲到这个;
你买德国的软件,硬件你可以自己设计,或买厂家的板子,做个一般的PLC还是比较容易的。还有认证;
bear1 发表于 2014-9-26 13:15 来自手机 | 显示全部楼层
mmuuss586 发表于 2014-9-26 12:54
楼主应该去参加ST的研讨会,去听听;
STM32的性能并不差,比西门子低端或一般PLC功能强多了;
研讨 ...

西门子有那么强?
zhonggx 发表于 2014-9-26 14:14 | 显示全部楼层
典型的51思维!!
zhonggx 发表于 2014-9-26 14:15 | 显示全部楼层
xlsbz 发表于 2014-9-26 08:12
Systick是做时基没错。但是时基是可以让用户设置的。西门子PLC有1ms 10ms100ms。
现在若用户设置10ms。那 ...

汗一个……
zhonggx 发表于 2014-9-26 14:17 | 显示全部楼层
xlsbz 发表于 2014-9-26 08:34
你说的我明白。准确讲是时基的整数倍都能实现。

若我得用户把时基设置成10ms,怎么实现1ms???

你为什么认为不能小时1MS呢?你的定时器只能到周期计数?看来51教科书式的DELAY真是毒害了不少人。
zhonggx 发表于 2014-9-26 14:19 | 显示全部楼层
xlsbz 发表于 2014-9-26 08:12
Systick是做时基没错。但是时基是可以让用户设置的。西门子PLC有1ms 10ms100ms。
现在若用户设置10ms。那 ...

算了,懒得说了,你不会通过查询SYSTICK计数器来计时吗?轻松实现任意微秒级的软件延时。
snyvel 发表于 2014-9-26 14:47 | 显示全部楼层
ARM都这样,和ST无关
Ketose 发表于 2014-9-26 14:50 | 显示全部楼层
本帖最后由 Ketose 于 2014-9-26 14:52 编辑

Systick时基定为1ms,在Systick_IRQHandler里对一个全局的tick++,然后想延时多少毫秒,就延时多少毫秒。
下面是代码:
static __IO uint32_t uwTick;
__weak void HAL_IncTick(void)
{
  uwTick++;
}

__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}
延时函数(单位:你的systick时基)
__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = 0;
  tickstart = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay);
}

这应该是非常精确的延时了吧!
grant_jx 发表于 2014-9-26 16:06 | 显示全部楼层
最好的办法就是用硬件去产生时基,做衍生出几个需要的时间单元。
至于软件延时的办法,这个与ST没啥关系,内核和指令集的问题,要去找ARM。
bear1 发表于 2014-9-26 16:14 来自手机 | 显示全部楼层
Ketose 发表于 2014-9-26 14:50
Systick时基定为1ms,在Systick_IRQHandler里对一个全局的tick++,然后想延时多少毫秒,就延时多少毫秒。
下 ...

这个也要死等吧?
 楼主| xlsbz 发表于 2014-9-26 16:28 | 显示全部楼层
mmuuss586 发表于 2014-9-26 12:54
楼主应该去参加ST的研讨会,去听听;
STM32的性能并不差,比西门子低端或一般PLC功能强多了;
研讨 ...

嗯 西门子好像也是买的壳。
我们买一方梯队的
huangqi412 发表于 2014-9-26 16:47 | 显示全部楼层
该吃药了
yhn1973 发表于 2014-9-26 18:10 | 显示全部楼层
这么高级的CPU就别指望软件延时能准确了,经测试,没有任何跳转指令的一段程序执行时间也不固定
原野之浪 发表于 2014-9-26 18:17 来自手机 | 显示全部楼层
huangqi412 发表于 2014-9-26 16:47
该吃药了

傻叉
mmuuss586 发表于 2014-9-26 19:01 | 显示全部楼层
bear1 发表于 2014-9-26 13:15
西门子有那么强?

:)
难道西门子不强啊?
我说的是STM32比有些西门子中低端的PLC性能要求,比如执行一个循环指令响应速度要快;
shuangjf 发表于 2014-9-26 21:00 | 显示全部楼层
换平台了,编程方法也要跟着改变。
bear1 发表于 2014-9-26 22:40 来自手机 | 显示全部楼层
shuangjf 发表于 2014-9-26 21:00
换平台了,编程方法也要跟着改变。

是的,赞同。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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