莉赛特卡拉 发表于 2019-6-19 11:22:13

使用STM32Cube生成工程,时钟配置同时使用了HSI和HSE

本帖最后由 莉赛特卡拉 于 2019-6-19 12:18 编辑

你好,遇到个奇怪的问题
我使用STM32CUBE 建立了一个 ADC读取芯片电压的工程,发现在时钟配置的时候是如下语句
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_HSE;同时使用外部高速和内部高速? 并且编译没有问题。并且我并没有选择内部高速时钟,仅仅使用了外部高速时钟,但是还是被强行初始化了。由图是看到HSI被分配到了ADC上,但是ADC也是被挂载ABP2上的吧



程序能够正常运行,在采集电压的时候,3.3V读出的寄存器值是1500左右,//2.8 => 1805   2.7 => 1856 反比例函数
但是我在删除使用内部高速时钟,则ADC无法正常运行,但是程序打印时正常的,也就表示系统使用了外部高速时钟,但是ADC挂了,也就是ADC使用了内部高速时钟不科学额, 就比较迷糊了,为啥STM32CUBE生产的 时钟配置会 同时启动内部和外部的时钟呢,照理说应该只能使用一个吧。难道他在 使用ADC的时候 给切换到 内部高速时钟,然后用完了再切换回来??
谢谢

补充:使用的是STM32L151,时钟树有下列该处

莉赛特卡拉 发表于 2019-6-19 13:54:07

看了下手册,有如下描述
ADC clock
To avoid unnecessary consumption while not converting, the ADC digital interface has been designed to operate in a completely independent manner, at its maximum speed using an internal 16 MHz clock source (HSI), whatever the CPU operating frequency (which can range from a few sub-kHz up to 32 MHz).
这就很无语了,用个ADC居然不得不把内部时钟给开了

wenyangzeng 发表于 2019-6-19 11:36:20

本帖最后由 wenyangzeng 于 2019-6-19 11:37 编辑

楼主的配置并没有使用HSI,从图中可以看到HSI一开始就未选中,VCO输入是走HSE一路的。ADC出错应该查找ADC配置及运行方面的问题。

莉赛特卡拉 发表于 2019-6-19 12:14:48

wenyangzeng 发表于 2019-6-19 11:36
楼主的配置并没有使用HSI,从图中可以看到HSI一开始就未选中,VCO输入是走HSE一路的。ADC出错应该查找ADC配 ...
你好
是的 按照STM32CUBE的确是没有配置的,但是在生成的自动化代码时钟配置函数SystemClock_Config ,却是使能了外部和内部时钟,我刚刚测试过,如果在STM32CUBE 中取消ADC的选项,则HSI就没有被初始化,生产代码变成了RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON; ,也就是ADC它还真是只用了HSI的, SMT32还能内部外部混着用??

五哥1 发表于 2019-6-19 12:47:28

一般的工程应用里会有检测如果外部时钟失效会转入内部时钟的程序,你的ADC的无效怀疑不是时钟的锅,建议在查下硬件。

wenyangzeng 发表于 2019-6-19 12:47:52

莉赛特卡拉 发表于 2019-6-19 12:14
你好
是的 按照STM32CUBE的确是没有配置的,但是在生成的自动化代码时钟配置函数SystemClock_Config ,却 ...

ADC使用的时钟HSI14RC好像与HSI RC不一样



五哥1 发表于 2019-6-19 15:04:11

莉赛特卡拉 发表于 2019-6-19 13:54
看了下手册,有如下描述
ADC clock



很了不起的发现,谢谢分享

songshiqun2010 发表于 2019-6-19 17:22:04

看来这是芯片的设定,user只能遵循规则咯~
页: [1]
查看完整版本: 使用STM32Cube生成工程,时钟配置同时使用了HSI和HSE