温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

STM32 的Systick操作

发布时间:2020-07-10 16:19:22 来源:网络 阅读:1084 作者:古泥瓦 栏目:开发技术


首先需要知道的是:

1)STM32的内核是Cortex-M3, 而Systick则是属于Cortex-M3的内核的。

2)Systick为内核提供系统时钟用,比如可以用来作为操作系统的滴答时钟。更多作用可以参考《ARM v7-M Architecture ReferenceManual》

3)Systick是个递减计数器,当计数值递减为0时可以产生Exception中断,中断号为15.

4)Systick相关的寄存器有4个。参考《ARMv7-M Architecture Reference Manual》

5)Systick的控制与状态寄存器SYST_CSR的CLOCKSOURCE可以选择外部参考时钟(external reference clock)也可以选择内核时钟(core clock).内核时钟是肯定可以选择的(在STM32中这个内核时钟就是System Clock),而外部时钟的有无则都是不一定的,如果有外部时钟,它具体的实现则是根据厂家来的,比如在STM32L152中,这个外部时钟是AHB clock = (HCLK) / 8. 具体参考《Reference Manual_STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced ARM_-based 32-bit MCUs》128页。

6)具体配置函数,在core_cm3.h中有SysTick_Config()函数用于配置Systick。

__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

{

  if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) { return (1UL); }    /* Reload value impossible */


  SysTick->LOAD  = (uint32_t)(ticks - 1UL);                         /* set reload register */

  NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */

  SysTick->VAL   = 0UL;                                             /* Load the SysTick Counter Value */

  SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                   SysTick_CTRL_TICKINT_Msk   |

                   SysTick_CTRL_ENABLE_Msk;                         /* Enable SysTick IRQ and SysTick Timer */

  return (0UL);                                                     /* Function successful */

}


备注:

本文Systick的更多详细内容参考文献:

《ARM v7-M Architecture Reference Manual》

Reference Manual_STM32L100xx, STM32L151xx, STM32L152xx and STM32L162xx advanced ARM_-based 32-bit MCUs》

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI