[技术问答] SYS_SysTickDelay函数的延时单位是us吗?

[复制链接]
1082|1
 楼主| yiyigirl2014 发表于 2024-10-13 21:26 | 显示全部楼层 |阅读模式
看到示例里面的SYS_Init()中有几行
  1.     /* Update System Core Clock */
  2.     /* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
  3.     //SystemCoreClockUpdate();
  4.     PllClock        = PLL_CLOCK;            // PLL
  5.     SystemCoreClock = PLL_CLOCK / 1;        // HCLK
  6.     CyclesPerUs     = PLL_CLOCK / 1000000;  // For SYS_SysTickDelay()
那么这个是为了延时1us吗?
在clk.h
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]      This function execute delay function.
  3.   * @param[in]  us  Delay time. The Max value is 2^24 / CPU Clock(MHz). Ex:
  4.   *                             50MHz => 335544us, 48MHz => 349525us, 28MHz => 699050us ...
  5.   * [url=home.php?mod=space&uid=266161]@return[/url]     None
  6.   * [url=home.php?mod=space&uid=1543424]@Details[/url]    Use the SysTick to generate the delay time and the UNIT is in us.
  7.   *             The SysTick clock source is from HCLK, i.e the same as system core clock.
  8.   *             User can use SystemCoreClockUpdate() to calculate CyclesPerUs automatically before using this function.
  9.   */
  10. __STATIC_INLINE void CLK_SysTickDelay(uint32_t us)
  11. {
  12.     SysTick->LOAD = us * CyclesPerUs;
  13.     SysTick->VAL  = (0x00);
  14.     SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk;

  15.     /* Waiting for down-count to zero */
  16.     while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0);

  17.     /* Disable SysTick counter */
  18.     SysTick->CTRL = 0;
  19. }
看着像。不过看解释的最大延时时间比较短,应该是短的使用这个吧?

jasontu 发表于 2024-10-16 15:36 | 显示全部楼层
__STATIC_INLINE void CLK_SysTickDelay(uint32_t us) 是us为单位没错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

230

主题

3676

帖子

10

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