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
    +关注

    关注

    2295

    文章

    11035

    浏览量

    366004
  • 时钟
    +关注

    关注

    11

    文章

    1903

    浏览量

    133378
  • Cortex
    +关注

    关注

    2

    文章

    203

    浏览量

    47449
  • Systick
    +关注

    关注

    0

    文章

    63

    浏览量

    13629
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    0STM32SysTick是个啥?咋用?(可下载)

    的使能位清除,就永不停息。SysTick在《STM32xx中文参考手册》里面基本没有介绍,其详细介绍,内核编程手册。在工程我们将以
    发表于 04-01 14:52 ?0次下载

    stm32h7s78 rcc pll2时钟使能失败的原因?

    使用的板卡是 stm32h7s78-dk,启动流程是 boot + flash app 的方式,boot 参考的 xip 示例,xip 时钟绑定在 hclk 上。 问题 在 app 代码,初始化
    发表于 03-14 10:33

    stm32cubemx按照配置重新生成工程,bsp_SysTick.c一直没有呢?

    stm32cubemx按照配置重新生成工程,bsp_SysTick.c一直没有呢
    发表于 03-10 07:44

    STM32哪里可以看出芯片是否支持外部存储扩展?

    STM32哪里可以看出芯片是否支持外部存储扩展,从什么可以选出合适的芯片,主要是速度这些,大概率是怎么看的,时钟树是怎么理解的
    发表于 03-10 06:16

    ADS1298芯片内部有无时钟呢?

    我想问一下ADS1298芯片内部有无时钟呢?如果有那频率是不是:2.048MHz呢? 如果不外接时钟,这个芯片能否正常工作呢?
    发表于 02-08 06:06

    一文看懂!时钟在数据采集系统究竟起到哪些关键作用?

    时钟的基本概念 时钟是数据采集系统的关键组件,负责提供同步信号并控制数据采集和转换的时间间隔。时钟信号可以由设备内部生成,也可以通过外部信号提供。
    的头像 发表于 01-21 13:44 ?704次阅读
    一文看懂!<b class='flag-5'>时钟</b>在数据采集系统<b class='flag-5'>中</b>究竟起到哪些关键作用?

    请问AFE4400的外接晶振时钟能否用外部时钟代替?

    请问AFE4400的外接晶振时钟能否用外部时钟(如MCU时钟引脚输出)代替?
    发表于 01-08 07:20

    一千余字解读stm32时钟

    转换为多个外部设备的周期性运作。这种时钟“能量”的传递路径类似于大树的养分由主干流向各个分支,因此被称为时钟树。STM32内部也是由多种多样的电路模块组合在一起实现
    的头像 发表于 12-30 21:01 ?2880次阅读
    一千余字解读<b class='flag-5'>stm32</b><b class='flag-5'>时钟</b>树

    用ADS124S08实现高精度温度采集,用内部时钟好还是外部时钟好?

    ADS124S08的规格书里说明其系统时钟可以由内部集成的4.096MHz振荡器提供,也可以由外部时钟提供。我想请问一下两者在转换精度上有多大差异?我要用ADS124S08实现高精度温度采集,用内部
    发表于 12-20 08:12

    TLV320ADC6140内部有时钟吗?

    datasheet里说有内部时钟,并建议使用内部时钟。 但是应用文档中有提到芯片作为i2s的master模式下时需要外部提供MCLK? 所以,芯片内部有时钟
    发表于 12-03 08:12

    本源产品丨高稳低相噪时钟

    的一致性和稳定性同步工作。本源量子凭借自主研发的高稳低相噪时钟,成功搭建起连接各个组件时序控制单元的桥梁,该时钟能够提供高稳定性和高精度频率时钟
    的头像 发表于 11-14 01:05 ?589次阅读
    本源产品丨高稳低相噪<b class='flag-5'>时钟</b><b class='flag-5'>源</b>

    请问下CDCLVC1106PWR的cLKIN时钟输入管脚可以是来自FPGA或者MCU输出的时钟不?

    请问下CDCLVC1106PWR的cLKIN时钟输入管脚可以是来自FPGA或者MCU输出的时钟不?还是必须是晶振或者晶体产生的时钟
    发表于 11-13 07:05

    stm32怎样触发软件中断

    了解STM32断系统 STM32微控制器具有丰富的中断系统,包括NVIC(嵌套向量中断控制器)和SYSTICK定时器。NVIC可以处理多达240个中断
    的头像 发表于 09-02 09:32 ?2058次阅读

    STM32引脚的BOOT1在哪里

    STM32是STMicroelectronics(意法半导体)推出的一系列32位微控制器,广泛应用于嵌入式系统设计。关于STM32的BOOT1引脚,它主要与系统的启动模式有关。 BOOT1引脚功能
    的头像 发表于 08-22 09:43 ?5121次阅读

    请问TINA的电流哪里可以找到?

    我想用TINA软件来做开关电源的输出瞬态仿真测试。例如输出电流冲1A到2A的跳变,测试输出电压的变化值。我在TINA没有找到对应的脉冲电流,但是在WEBENCH就有的。请问TINA的电流
    发表于 08-09 08:22