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

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

日研发消防机器人 可用水柱操控方向
贸泽电子与Analog Devices联手推出新电子书《Industry 4.0 and Beyond》
音视频图像处理神器FFmpeg有用的命令示例
WiFi 6到底需不需要升级
游戏开发不再难:华为这款服务器为小程序与 PC 游戏提供强大支持
STM32中的SysTick时钟源来自哪里?
华为首次携端到端安全能力集体亮相2023国家网络安全宣传周
电子产品采用触控方式已经成为了市场主流趋势
TDK-EPC推移动电视用超薄型带阻滤波器B8740
单芯片音频功率放大器
SpaceX SN4星际飞船原型机将进行150米高空测试
WTN6语音芯片在防盗报警器的应用
微雪电子 树莓派游戏机扩展板|GamePi43 4.3寸屏介绍
特斯拉延长标准续航升级版Model 3在国内的交付时间
减少焊接机器人应力与变形的工艺措施
台积电将在2021年开设新研发中心,致力于研究2纳米芯片
idc是什么意思_idc机房是什么
Keil C的应用动态存储管理的原理和实现方法分析
首批预定的AirPods 2陆续发货 iOS 12.2正式版即将到来
半导体腐蚀新技术