硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1917|回复: 3
收起左侧

[HAL] 测试不错的HAL_Delay,HAL_InitTick和HAL_GetTick重定向

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
发表于 2021-10-7 14:38:50 | 显示全部楼层 |阅读模式


  1. void HAL_Delay(uint32_t Delay)
  2. {
  3. //        bsp_DelayMS(Delay);
  4.         uint32_t tickstart = HAL_GetTick();
  5.         uint32_t wait = Delay;

  6.         if (wait < HAL_MAX_DELAY)
  7.         {
  8.                 wait += (uint32_t)(HAL_TICK_FREQ_DEFAULT);
  9.         }

  10.         while((HAL_GetTick() - tickstart) < wait)
  11.         {
  12.                 __NOP();
  13.         }
  14. }

  15. HAL_StatusTypeDef HAL_InitTick (uint32_t TickPriority)
  16. {
  17.     return HAL_OK;
  18. }

  19. uint32_t HAL_GetTick (void)
  20. {
  21.         static uint32_t ticks = 0U;
  22.         uint32_t i;

  23.         if (_tx_thread_system_state == TX_INITIALIZE_IS_FINISHED)
  24.         {
  25.                         return ((uint32_t)_tx_time_get());
  26.         }

  27.         /* 如果ThreadX还没有运行,采用下面方式 */
  28.         for (i = (SystemCoreClock >> 14U); i > 0U; i--)
  29.         {
  30.                         __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
  31.                         __NOP(); __NOP(); __NOP(); __NOP(); __NOP(); __NOP();
  32.         }
  33.    
  34.         return ++ticks;
  35. }
复制代码


回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2021-10-7 17:51:10 | 显示全部楼层
感谢分享
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2021-10-12 17:57:37 | 显示全部楼层
我用HAL_Delay 然后用GetTick打印Tick时间 发现时间计次之后就不准了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106731
QQ
 楼主| 发表于 2021-10-14 00:20:19 | 显示全部楼层
翱翔云端的鸟 发表于 2021-10-12 17:57
我用HAL_Delay 然后用GetTick打印Tick时间 发现时间计次之后就不准了

这个是正常的,因为我们这里是纯软件的延迟,除非是你用到RTOS里面

if (_tx_thread_system_state == TX_INITIALIZE_IS_FINISHED) 这个才能起作用,这样就是基于滴答时钟节拍了

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-2 16:35 , Processed in 0.219635 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表