历史上的今天
返回首页

历史上的今天

今天是:2025年01月26日(星期日)

2021年01月26日 | STM32的SysTick时钟源来自哪里

2021-01-26 来源:eefocus

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


引伸:

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


1写在前面

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


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

图片


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


2SysTick时钟初始化代码

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


比如:


SysTick_Config(SystemCoreClock / 1000);


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


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


3SysTick时钟源是来自哪里?

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

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(内核)时钟。


4STM32CubeMX...可选择1分频

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

(使用STM32CubeMX V5.1.0)


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


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


这里就留下一个问题:

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


推荐阅读

史海拾趣

E-Switch公司的发展小趣事

在E-Switch的发展历程中,品质一直是公司最为重视的方面之一。公司始终坚持严格的质量管理体系,从原材料采购到生产流程控制,再到产品出厂检验,每一个环节都严格把关。正是这种对品质的执着追求,让E-Switch的产品在市场上赢得了良好的口碑。

Antex公司的发展小趣事

Antex公司始于1917年,当时它主要从事锻件的制造和销售。这一时期的Antex,凭借着对锻造技术的深入研究和不断创新,逐渐在电子行业中崭露头角。公司注重产品质量和客户需求,通过设计、锻造、机械加工、装配的一站式服务,赢得了客户的信赖。

Franel Corp公司的发展小趣事

法勒公司始终将技术创新视为企业发展的核心驱动力。在中国市场,法勒不断推出适应本土需求的新产品和解决方案,如非接触供电系统、智能故障诊断系统等。这些创新技术不仅提升了物流设备的智能化水平,还为客户带来了更高的效率和更低的运行成本。法勒的技术创新不仅赢得了市场的广泛认可,也推动了整个物流装备行业的技术进步和产业升级。

Bourns公司的发展小趣事

Bourns公司的卓越表现得到了全球知名代理商TTI, Inc.的认可。Bourns连续多年获得TTI全球运营卓越奖,这一奖项是对Bourns全球绩效的最高认可。这一成就不仅彰显了Bourns在全球电子组件市场的领导地位,也反映了其持续提供优质产品和服务的承诺。

歌尔(Goertek)公司的发展小趣事

Bourns公司的创立源自Marlan和Rosemary Bourns夫妇在自家车库中的创新努力。在1947年,这两位创始人成功研发出了创新的航天传感器,这一突破性的发明为飞行员提供了精确校正飞机垂直定位的方法。这一创新不仅解决了航空领域的关键问题,也为Bourns公司的诞生奠定了坚实的基础。

安美通(APPCON)公司的发展小趣事

为了进一步扩大市场份额,安美通积极开展市场推广和品牌建设。公司参加了多个国内外知名展会和技术交流会议,与众多客户建立了良好的合作关系。同时,安美通还加大了对营销网络的投入,建立了完善的销售体系和客户服务体系,提高了客户满意度和忠诚度。

问答坊 | AI 解惑

元件封装

MAXIN元件封装…

查看全部问答>

WINDOWS CE 5.0 拼音输入问题

我的系统已经添加了拼音输入了,系统也可以正常显示中文,但是不能输入汉字 我在区域语言中选中  拼音输入,系统说要重新启动设备,但是我点OK之后,再去点区域语言,还是没选中 默认的是灰色的,不可以选,之后我重新启动了之后也是不 ...…

查看全部问答>

wince x86 下报:无法找到sqlceme30.dll

最近在研究wince 下的X86板子,是那种带内存条的板子,带有CF卡。这两天一直在测试,头疼的是,连接.sdf数据库时,用的sqlserverce.dll的底层,用sqllite也不行。总是报:无法找到sqlceme30.dll 网上也找了相关方法。总是不行。CAB也都装了。就是 ...…

查看全部问答>

感觉stm32F103+ENC28J60比stm32f107+PHY更方便。

反正是要两片芯片。总价位上差距也不大吧。…

查看全部问答>

vs1001k与vs1003有什么不同吗

由于vs1001k实在太贵了,所以想用vs1003代替有没有问题,两者有什么区别,两者编程时有什么不同的吗?望用过的指点下,谢谢…

查看全部问答>

op运放

本帖最后由 paulhyde 于 2014-9-15 09:22 编辑 op运放  …

查看全部问答>

关注MSP-EXP430FR5739套件抢购

     本人是MSP430单片机小白,因工作原因正准备学习,前一段时间错过了LaunchPad,肠子都悔青了,现急需一块MSP430的板子,希望能抢购成功。…

查看全部问答>

关于多路复用器的简单提问,求助啊

有三路频率信号(频率不同的近似方波幅值3V,频率范围1Khz-100Khz),我想做一个三选一处理,就是由单片机控制多路复用器选择这三个频率信号中的一个,我想问:三路频率信号在多路复用器这里会不会产生干扰,导致频率信号的频率改变或是波形恶化, ...…

查看全部问答>

更新《NiosII嵌入式系统开发手册》与《NiosII嵌入式系统开发平台》

replyreload += \',\' + 1445462;1. NiosII嵌入式系统开发平台的下载 在2012-7-17发布过[size=1.17em]NiosII嵌入式系统开发平台VER1.0.0,关于《NiosII嵌入式系统开发平台VER1.0.0》说明请阅读: https://bbs.eeworld.com.cn/thread-340261-1-1.h ...…

查看全部问答>

UCOS移植到MSP430过程与心得体会《2》

以下是includes.h文件的内容. #include    #include    #include    #include    #include    #include    \"stdbool.h\" #include    #include    ...…

查看全部问答>