历史上的今天
今天是: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吗?
史海拾趣
|
我的系统已经添加了拼音输入了,系统也可以正常显示中文,但是不能输入汉字 我在区域语言中选中 拼音输入,系统说要重新启动设备,但是我点OK之后,再去点区域语言,还是没选中 默认的是灰色的,不可以选,之后我重新启动了之后也是不 ...… 查看全部问答> |
|
wince x86 下报:无法找到sqlceme30.dll 最近在研究wince 下的X86板子,是那种带内存条的板子,带有CF卡。这两天一直在测试,头疼的是,连接.sdf数据库时,用的sqlserverce.dll的底层,用sqllite也不行。总是报:无法找到sqlceme30.dll 网上也找了相关方法。总是不行。CAB也都装了。就是 ...… 查看全部问答> |
|
本人是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 ...… 查看全部问答> |
|
以下是includes.h文件的内容. #include #include #include #include #include #include \"stdbool.h\" #include #include   ...… 查看全部问答> |




