你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SysTick时钟做延时

[复制链接]
andrewsss 提问时间:2019-1-8 10:36 /
阅读主题, 点击返回1楼
收藏 评论16 发布时间:2019-1-8 10:36
16个回答
五哥1 回答时间:2019-1-23 01:36:07
watershade 发表于 2019-1-22 11:09
你如果愿意回答请好好回答。不要通过灌水的方式来赚积分。谢谢
HAL_Delay的函数原型是:void HAL_Delay ( ...

我尝试过用HAL_Delay(0.15)来代替正点原子程序里Delay(150us)的延时,并且成功把标准库的程序改成了HAL库的程序,你有测试过吗?你如何确定这个是灌水?别死搬教条,实践是检验真理的唯一标准。

点评

相信大家的出发点都是希望帮助小伙伴解决问题,社区也会酌情进行奖励,不过管管觉得过于简短的回复可能帮不上忙,如果有完整一些的回复会更好  发表于 2019-1-24 10:21
watershade 回答时间:2019-1-25 09:51:46
本帖最后由 watershade 于 2019-1-25 10:08 编辑
五哥1 发表于 2019-1-23 01:36
我尝试过用HAL_Delay(0.15)来代替正点原子程序里Delay(150us)的延时,并且成功把标准库的程序改成了HAL库 ...

兄弟,首先我道个歉。应该和你联系一下,先讨论一下再说你是不是灌水。Whatever,咱就说说这是不是死板和教条。如果你非要用HAL_Delay,那最好的办法是你再重写这个函数,否则按照C语言语法和编译原则你输入的Doubl或float类型回被强制转换成整形。0.15会变成0.但是如果你非要争论会不会产生延时。我想会的。毕竟你执行了几句话,但是延时不可能太大的。而且也不是你想要的150us延时。(实际上这里你写的0.15默认是double类型)
否则按照函数的内容,怎么可能实现?
  1. __weak void HAL_Delay(uint32_t Delay)
  2. {
  3.   uint32_t tickstart = HAL_GetTick();
  4.   uint32_t wait = Delay;

  5.   /* Add a period to guaranty minimum wait */
  6.   if (wait < HAL_MAX_DELAY)
  7.   {
  8.     wait++;
  9.   }

  10.   while((HAL_GetTick() - tickstart) < wait)
  11.   {
  12.   }
  13. }
复制代码
你忽悠我吧。如果你能让我信服,我发个帖子。专门向你道歉


五哥1 回答时间:2019-1-25 18:17:48
watershade 发表于 2019-1-25 09:51
兄弟,首先我道个歉。应该和你联系一下,先讨论一下再说你是不是灌水。Whatever,咱就说说这是不是死板和教 ...

不知道你有没有WT588D的语音模块,给你个程序来测下。
watershade 回答时间:2019-1-26 18:23:34
五哥1 发表于 2019-1-25 18:17
不知道你有没有WT588D的语音模块,给你个程序来测下。

咱们讨论的是这个funtion,怎么扯到模块上了?
chenplay 回答时间:2019-5-3 07:26:57
使用的比较少的话,用定时中断,也可以。不然资源浪费在等待上
12

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版