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

使用STM32CUBE生成STM32L073的工程,如何实现us级延时?

[复制链接]
烟花绽放 提问时间:2016-5-10 10:30 /
HAL库里面有ms级的延时__weak void HAL_Delay(__IO uint32_t Delay)
{
  uint32_t tickstart = 0;
  tickstart = HAL_GetTick();
  while((HAL_GetTick() - tickstart) < Delay)
  {
  }
},
但是如何实现us级的延时呢?
昨天尝试着修改了
__weak HAL_StatusTypeDef HAL_Delay_us(uint32_t TickPriority)
{
  /*Configure the SysTick to have interrupt in 1ms time basis*/
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  /*Configure the SysTick IRQ priority */
  HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority ,0);

   /* Return function status */
  return HAL_OK;
}

没有实现要求,而且还出现了其他问题,程序不运行,所以想请教一下大家,如何在HAL库中实现us延时?
目前在做DHT11的程序
收藏 评论23 发布时间:2016-5-10 10:30

举报

23个回答
whtt 回答时间:2016-5-10 10:48:11
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
这个函数是设置重载寄存器值得,为1ms,如果想设置1us要改为HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
因为STM32F073最大32M时钟,函数调用等等操作有可能超过32个时钟,所以用中断函数实现1us延时是有难度的。根据需要可以试试10us或者更大时间的延时
烟花绽放 回答时间:2016-5-10 10:56:46
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000000);
修改成这个样子,昨天试过了,程序下载下去之后直接不运行了,不晓得什么原因
风子 回答时间:2016-5-10 12:09:03
函数库里写明了HAL_Delay会用于HAL库本身配置过程中的很多地方,不能随便改,,可以用另外一个定时器实现
中山无雪 回答时间:2016-5-10 12:41:29
还是使用定时器实现吧,那样更好操作些
烟花绽放 回答时间:2016-5-10 12:42:17
中山无雪 发表于 2016-5-10 12:41
还是使用定时器实现吧,那样更好操作些

好的,,我去试一下
烟花绽放 回答时间:2016-5-10 12:42:33
风子 发表于 2016-5-10 12:09
函数库里写明了HAL_Delay会用于HAL库本身配置过程中的很多地方,不能随便改,,可以用另外一个定时器实现 ...

嗯嗯嗯,我去试一下
huaiqiao 回答时间:2016-5-10 13:09:08
HAL_Delay 这个函数里面有说明的,它就是毫秒级的延时呀。
ifif 回答时间:2016-5-10 14:49:17
用systick写个定时,可以到1us,挺准的
烟花绽放 回答时间:2016-5-10 16:33:21
试了,,但是也是不行,今天晚上回去写个像用51时的延时函数,不行的话就开个定时器
123下一页
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版