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

使用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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版