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

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

3天内不再提示

STM32中的SysTick时钟源来自哪里?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-03 14:32 次阅读

有位朋友在后台大概问了这样一个问题: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』的说明。

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

    关注

    2189

    文章

    10022

    浏览量

    344942
  • 时钟
    +关注

    关注

    10

    文章

    1364

    浏览量

    129949
  • Cortex
    +关注

    关注

    2

    文章

    182

    浏览量

    44618
  • Systick
    +关注

    关注

    0

    文章

    55

    浏览量

    12840
收藏 人收藏

    评论

    相关推荐

    STM32SysTick时钟来自Cortex系统定时器吗

    STM32SysTick时钟来自Cortex系统定时器吗?引伸:为什么ST...
    发表于 08-19 08:19

    STM32SysTick时钟

    STM32SysTick时钟来自Cortex系统定时器吗?引伸:为什么STM32CubeMXCortex系统定时器可选择1分频(和8分频)?1写在前面看到
    发表于 08-19 06:47

    请问STM32如何使用systick时钟进行延时的中断与非中断?

    STM32如何使用systick时钟进行延时的中断与非中断?
    发表于 11-16 07:56

    为什么STM32CubeMXCortex系统定时器可选择1分频

    SysTick时钟来自哪里? 为什么STM32CubeMXCortex系统定时器可选择1分频(和8分频)?
    发表于 11-24 07:51

    STM32SysTick时钟到底是从哪来呢

    STM32SysTick时钟来自哪里STM32SysTick时钟来自Cortex系统定时器吗?
    发表于 11-24 08:05

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

    SysTick定时器?实现STM32时钟系统的详细资料说明主要内容包括了:Systick原理和配置方法,ALIENTEK 延时函数delay讲解
    发表于 01-02 08:00 3次下载
    什么是<b>SysTick</b>定时器?实现<b>STM32</b><b>时钟</b>系统的详细资料说明

    STM32—关于SYSTICK系统时钟的详解及学习笔记

    SysTick_Handler也无需对中断标志进行清零(参考exit外部中断服务函数)2.要注意的是关于systick其实有两个关键函数,SySTick_Config,SysTick_CLKSourceConfig。SySTick_Config函数是总体给中断初始化一下,初
    发表于 11-30 15:51 14次下载
    <b>STM32</b>—关于<b>SYSTICK</b>系统<b>时钟</b>的详解及学习笔记

    STM32F103:精准延时delay——SysTick使用

    SysTick相关寄存器状态寄存器-CTRLSTCLK外部时钟:AHB总线时钟的 1/8FCLK 内部时钟:AHB总线时钟——STM32F103是72MHz重装载数值寄存器-LOAD当前值寄存器-VA
    发表于 12-02 18:36 9次下载
    <b>STM32</b>F103:精准延时delay——<b>SysTick</b>使用

    17、STM32——SysTick详解

    时钟频率可能会大不相同,你需要查找芯片的器件手册来决定选择什么作为时钟。Cortex-M3 的内核包含一个 SysTick 时钟SysTick 为一个 24 位递减计数器,
    发表于 12-23 19:56 0次下载
    17、<b>STM32</b>——<b>SysTick</b>详解

    初学stm32-Systick滴答时钟定时

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

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

    ,分时复用,需要一个最小的时间戳,一般在STM32+UCOS系统,都采用Systick做UCOS心跳时钟
    发表于 02-10 10:35 12次下载
    【<b>STM32</b>】<b>SysTick</b>滴答定时器(delay延时函数讲解)

    STM32SysTick时钟来自Cortex系统定时器吗?

    SysTick将会实现1ms中断一次。这段代码实现1ms中断一次相信大家都能理解,但是这里SysTick初始化和上面说的时钟『/8』有关系吗?
    的头像 发表于 04-03 13:54 5015次阅读
    <b>STM32</b>的<b>SysTick</b><b>时钟</b><b>源</b>是<b>来自</b>Cortex系统定时器吗?

    一文详解STM32的嘀嗒时钟(SysTick)

    时钟SysTick)是一个简单的系统时钟节拍计数器,它属于Cortex-M4内核嵌套向量中断控制器(NVIC)里的一个功能单元。他是一个24位的倒计时定时器(在NVIC),当
    的头像 发表于 01-19 18:11 5594次阅读
    一文详解<b>STM32</b>的嘀嗒<b>时钟</b>(<b>SysTick</b>)

    STM32时钟系统SysTick、FCLK、SYSCLK、PCLK和HCLK

    时钟信号好比是单片机的脉搏,了解STM32时钟系统是必要的,下图是STM32F1xx用户手册时钟系统结构图。
    发表于 06-15 17:07 1325次阅读
    <b>STM32</b><b>时钟</b>系统<b>中</b>的<b>SysTick</b>、FCLK、SYSCLK、PCLK和HCLK