0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的SysTick时钟源是来自Cortex系统定时器吗?

5RJg_mcuworld 来源:lp 2019-04-03 13:54 次阅读

有位朋友在后台大概问了这样一个问题:STM32的SysTick时钟源是来自Cortex系统定时器吗?

引伸:

为什么STM32CubeMX中Cortex系统定时器可选择1分频(和8分频)?

1写在前面

看到这个问题,我在想,这位朋友可能没有认真看手册,同时也存在一个误区。

我顺便也搜索了一下,网上很多文章都说到:SysTick时钟源是来自Cortex系统定时器,就是那个有8分频的时钟

但是,我们实际应用中,SysTick时钟源真的是来自这个Cortex系统定时器吗?

2

SysTick时钟初始化代码

不管是使用标准外设库,还是HAL库,你初始化SysTick,都会调用内核中的SysTick_Config函数。

比如:

SysTick_Config(SystemCoreClock / 1000);

初始化调用这段代码之后,SysTick将会实现1ms中断一次。

这段代码实现1ms中断一次相信大家都能理解,但是这里SysTick初始化和上面说的时钟『/8』有关系吗?

3

SysTick时钟源是来自哪里?

这个问题只要认真看参考手册都能找到答案。

RCC通过AHB时钟(HCLK)8分频后作为Cortex系统定时器(SysTick)的外部时钟。

通过对SysTick控制与状态寄存器的设置,可选择上述时钟或Cortex(HCLK)时钟作为SysTick时钟。

--来自参考手册

也就是说SysTick时钟源可以来自两个地方:

AHB时钟8分频

HCLK(内核)时钟

通过SysTick控制与状态寄存器的设置进行选择时钟源。

具体就是通过CLKSOURCE(时钟源)这一Bit位来选择:

再次看SysTick_Config函数源码:

__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 */}

你会发现,其实源码已经默认使用HCLK(内核)时钟。

而SysTick_Config函数属于内核(如core_cm3.h)已经写好源码,一般我们不去修改。

所以,到这里,你会明白:SysTick时钟源其实就是用的HCLK(内核)时钟。

4

STM32CubeMX...可选择1分频

分析上面问题的时候,我突然发现一个问题:为什么STM32CubeMX中Cortex系统定时器可选择1分频(和8分频)?

(使用STM32CubeMX V5.1.0)

我通过配置1分频和8分频,各自生成代码,进行对比,发现生成的代码完全一样。

然后,我又查看手册,RCC时钟树中的这个位置是固定『/8』,也没有看到可『/1』的说明。

这里就留下一个问题:

你认为STM32CubeMX配置Cortex系统定时器时钟是有Bug吗?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10896

    浏览量

    355767
  • 时钟
    +关注

    关注

    10

    文章

    1733

    浏览量

    131454
  • 定时器
    +关注

    关注

    23

    文章

    3246

    浏览量

    114733

原文标题:STM32的SysTick时钟源来自哪里?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    STM32 SYSTICK定时器常见问题

    我们知道,STM32库函数里通常使用来自内核的系统定时器SYSTICK作为时基,实现计数延时。一般来讲,ST公司提供的库函数里将
    发表于 09-13 16:20 3040次阅读

    STM32SysTick时钟来自Cortex系统定时器

    置顶/星标公众号,不错过每一条消息!有位朋友在后台大概问了这样一个问题:STM32SysTick时钟来自
    发表于 08-19 08:19

    为什么STM32CubeMX中Cortex系统定时器可选择1分频

    有位朋友在后台大概问了这样一个问题:STM32SysTick时钟来自Cortex
    发表于 08-19 09:07

    STM32SysTick时钟

    有位朋友在后台大概问了这样一个问题:STM32SysTick时钟来自Cortex
    发表于 08-19 06:47

    STM32SysTick时钟到底是从哪来呢

    STM32SysTick时钟来自哪里?STM32Sys
    发表于 11-24 08:05

    STM32SysTick时钟来自Cortex系统定时器

    STM32SysTick时钟来自Cortex系统
    发表于 11-24 07:24

    STM32--SYSTICK超简易定时器

    当然CORTEX-M3独有的定时功能可是超级简单的 那就是SySTick,所谓的系统定时器。配置方式简单,简单的不能再简单,因为
    发表于 03-16 15:47 19次下载

    什么是SysTick定时器?实现STM32时钟系统的详细资料说明

    什么是SysTick定时器?实现STM32时钟系统的详细资料说明主要内容包括了:Systick
    发表于 01-02 08:00 3次下载
    什么是<b class='flag-5'>SysTick</b><b class='flag-5'>定时器</b>?实现<b class='flag-5'>STM32</b><b class='flag-5'>时钟</b><b class='flag-5'>系统</b>的详细资料说明

    STM32中的SysTick时钟来自哪里?

    STM32SysTick时钟来自哪里?
    的头像 发表于 03-03 14:32 7860次阅读

    STM32入门(十五)----SysTick系统定时器

    Cortex-M内核的单片机都具有这个定时器。《STM32参考手册》里的一句话:关于Cortex-M3核心、 SysTick
    发表于 12-01 15:06 8次下载
    <b class='flag-5'>STM32</b>入门(十五)----<b class='flag-5'>SysTick</b><b class='flag-5'>系统</b><b class='flag-5'>定时器</b>

    SysTick 定时器

    11.1关于 SysTick 定时器SysTick定时器(又名系统滴答定时器)是存在于
    发表于 12-05 14:51 9次下载
    <b class='flag-5'>SysTick</b> <b class='flag-5'>定时器</b>

    初学stm32-Systick滴答时钟定时

    系统的心跳时钟。这样可以节省MCU资源,不用浪费一个定时器。比如uCOS中,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统
    发表于 12-31 19:46 15次下载
    初学<b class='flag-5'>stm32-Systick</b>滴答<b class='flag-5'>时钟</b><b class='flag-5'>定时</b>

    systick定时器 延时计时

    systick定时器是属于cortex M内核的外设,专门为RTOS的系统时钟节拍设计的。systick
    发表于 01-18 10:28 7次下载
    <b class='flag-5'>systick</b><b class='flag-5'>定时器</b> 延时计时

    STM32SysTick滴答定时器(delay延时函数讲解)

    Systick定时器,是一个简单的定时器,对于CM3、CM4内核芯片,都有Systick定时器Syst
    发表于 02-10 10:35 13次下载
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>SysTick</b>滴答<b class='flag-5'>定时器</b>(delay延时函数讲解)

    STM32SysTick时钟来自哪里?

    STM32SysTick时钟来自哪里?
    的头像 发表于 10-26 15:58 1947次阅读
    <b class='flag-5'>STM32</b>的<b class='flag-5'>SysTick</b><b class='flag-5'>时钟</b><b class='flag-5'>源</b><b class='flag-5'>来自</b>哪里?