你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

我使用HSI作为系统时钟源,为什么生成的代码对于systick的重装载值是按MSI计算的

[复制链接]
人物 提问时间:2023-10-13 15:01 / 未解决

首先说一下,我使用的是stm32l072cbt6这款芯片

我的时钟设置如图

image.png

但是生成后,我查代码发现systick重装载值是这样的

image.pngimage.png

这样是代表我的系统时钟实际上是MSI吗,这个HAL设置的1ms是否还准确呢

image.png
收藏 评论4 发布时间:2023-10-13 15:01

举报

4个回答
butterflyspring 回答时间:2023-10-16 14:39:28
你图中的  SystemCoreClock 是默认值,默认是MSI。
应用中,STOP唤醒后需要重新系统时钟配置,根据当前时钟来重新初始化 TICK
配置时钟函数里包含了更新时钟源,所以使用的是当前时钟源,并非默认时钟源。
你可以参考库中代码,使用中不要拆分库函数使用。

Stm32 InitTick.PNG
人物 回答时间:2023-10-13 18:44:17

经过长时间的查找,我发现这样一种可能,也许能解释这个问题(要是我说错了还望大佬不吝赐教)。我找到RCC有这样一个位(RCC_CFGR的STOPWUCK) ,当离开stop模式时,会根据这个位选择HSI还是MSI作为时钟源。而我实验了下发现这个位是默认值,也就是离开stop时会选择MSI作为时钟源。是不是因此生成的程序默认为MSI了?如果是这样的话,这个1MS的延时应该不准吧?

butterflyspring 回答时间:2023-10-16 09:51:54
人物 发表于 2023-10-13 18:44
[md]经过长时间的查找,我发现这样一种可能,也许能解释这个问题(要是我说错了还望大佬不吝赐教)。我找到 ...

唤醒之后需要重新配置系统运行时钟,配置过程中,将这1MS的时钟配置为当前时钟。这样才能保持一致和定时准确。楼主可以试试看。
人物 回答时间:2023-10-16 11:13:23

butterflyspring 发表于 2023-10-16 09:51
唤醒之后需要重新配置系统运行时钟,配置过程中,将这1MS的时钟配置为当前时钟。这样才能保持一致和定时准 ...

可是,我的默认时钟是通过PLL分配的16MHz不是么,但是按我在提问中展示的代码,它给的1ms延时不是按MSI时钟来的吗(也就是SystemCoreClock和MSI的时钟频率一致,而不是和我设置的时钟频率一致)。我要是不进行stop模式再唤醒,cubemx生成的这个1ms不是永远都不对吗

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版