[牛人杂谈] 滴答时钟的配置

[复制链接]
1654|9
 楼主| xinxianshi 发表于 2022-1-20 14:53 | 显示全部楼层 |阅读模式
NUC029有多少个系列不同的有不同个系统时钟源
NUC029xAN系列有3个时钟源
1485661e9000c84f86.png
NUC029xGE系列的系统时钟有6个时钟源
1644961e900447fccf.png
在Cortex®-M0核中的SysTick的时钟源可以使用CPU时钟或者外部时钟(SYST_CSR[2])。如果使用
外部时钟,SysTick时钟(STCLK)有4个时钟源。时钟源切换使用寄存器STCLK_S(CLKSEL0[5:3]的
设置。 SysTick时钟框图如图
4249861e90496257a2.png 3028761e904c102c74.png
因此对于滴答时钟都是一样的,一共五个选择
我们看官方提供的BSP库函数,如何使用滴答时钟

  1. void CLK_SetSysTickClockSrc(uint32_t u32ClkSrc);
  1. void CLK_EnableSysTick(uint32_t u32ClkSrc, uint32_t u32Count);
  1. void CLK_DisableSysTick(void);

  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]      Set SysTick clock source
  3.   * @param[in]  u32ClkSrc is module clock source. Including:
  4.   *             - \ref CLK_CLKSEL0_STCLKSEL_HXT
  5.   *             - \ref CLK_CLKSEL0_STCLKSEL_LXT
  6.   *             - \ref CLK_CLKSEL0_STCLKSEL_HXT_DIV2
  7.   *             - \ref CLK_CLKSEL0_STCLKSEL_HCLK_DIV2
  8.   *             - \ref CLK_CLKSEL0_STCLKSEL_HIRC_DIV2
  9.   * [url=home.php?mod=space&uid=266161]@return[/url]     None
  10.   * [url=home.php?mod=space&uid=1543424]@Details[/url]    This function set SysTick clock source. \n
  11.   *             The register write-protection function should be disabled before using this function.
  12.   */
  13. void CLK_SetSysTickClockSrc(uint32_t u32ClkSrc)
  14. {
  15.     CLK->CLKSEL0 = (CLK->CLKSEL0 & ~CLK_CLKSEL0_STCLKSEL_Msk) | u32ClkSrc;
  16. }
  1. /**
  2.   * @brief      Enable System Tick counter
  3.   * @param[in]  u32ClkSrc is System Tick clock source. Including:
  4.   *             - \ref CLK_CLKSEL0_STCLKSEL_HXT
  5.   *             - \ref CLK_CLKSEL0_STCLKSEL_LXT
  6.   *             - \ref CLK_CLKSEL0_STCLKSEL_HXT_DIV2
  7.   *             - \ref CLK_CLKSEL0_STCLKSEL_HCLK_DIV2
  8.   *             - \ref CLK_CLKSEL0_STCLKSEL_HIRC_DIV2
  9.   *             - \ref CLK_CLKSEL0_STCLKSEL_HCLK
  10.   * @param[in]  u32Count is System Tick reload value. It could be 0~0xFFFFFF.
  11.   * @return     None
  12.   * @details    This function set System Tick clock source, reload value, enable System Tick counter and interrupt. \n
  13.   *             The register write-protection function should be disabled before using this function.
  14.   */
  15. void CLK_EnableSysTick(uint32_t u32ClkSrc, uint32_t u32Count)
  16. {
  17.     /* Set System Tick counter disabled */
  18.     SysTick->CTRL = 0;

  19.     /* Set System Tick clock source */
  20.     if(u32ClkSrc == CLK_CLKSEL0_STCLKSEL_HCLK)
  21.         SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;
  22.     else
  23.         CLK->CLKSEL0 = (CLK->CLKSEL0 & ~CLK_CLKSEL0_STCLKSEL_Msk) | u32ClkSrc;

  24.     /* Set System Tick reload value */
  25.     SysTick->LOAD = u32Count;

  26.     /* Clear System Tick current value and counter flag */
  27.     SysTick->VAL = 0;

  28.     /* Set System Tick interrupt enabled and counter enabled */
  29.     SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk;
  30. }
  1. /**
  2.   * @brief      Disable System Tick counter
  3.   * @param      None
  4.   * @return     None
  5.   * @details    This function disable System Tick counter.
  6.   */
  7. void CLK_DisableSysTick(void)
  8. {
  9.     /* Set System Tick counter disabled */
  10.     SysTick->CTRL = 0;
  11. }



kiwis66 发表于 2022-1-21 11:21 | 显示全部楼层
感谢楼主讲解
littlelida 发表于 2022-1-28 16:04 | 显示全部楼层
这是时钟部分,感谢分享
zljiu 发表于 2022-2-6 19:32 | 显示全部楼层
可以选择什么时钟源啊
tfqi 发表于 2022-2-6 19:44 | 显示全部楼层
滴答时钟都用作什么呢
nawu 发表于 2022-2-6 20:02 | 显示全部楼层
一般最快是多少呢
gwsan 发表于 2022-2-6 20:16 | 显示全部楼层
都可以成为它的时钟源吗
aoyi 发表于 2022-2-6 20:32 | 显示全部楼层
有没有什么简单的配置方式呢
麻花油条 发表于 2022-2-8 16:35 来自手机 | 显示全部楼层
选择性还是挺多的
sadicy 发表于 2022-2-10 14:31 | 显示全部楼层
每次看完就忘,因为基本配置,或者看完之后,基本不会更改了
但这个又很重要
您需要登录后才可以回帖 登录 | 注册

本版积分规则

102

主题

1019

帖子

1

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