打印

STM32L152的内部MSI晶振为什么偏差这么大?

[复制链接]
9192|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hackthree|  楼主 | 2011-12-13 15:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32L152的内部MSI晶振。使用官方的时钟配置工具生成的代码和手工配置的都是一样的结果。
配置成MSI value (range 6)即4.192M,通过MCO输出测得只有3.5M。
配置成MSI value (range 5)即2.097M,通过MCO输出测得只有1.6M。

为什么会偏差这么大?要如何校准?
官方的那个internal RC oscillator calibration文档,没怎么看懂。
求解惑。。
沙发
szguoguo| | 2011-12-13 15:54 | 只看该作者
偏差不会这么大吧,你在换一个芯片试试

使用特权

评论回复
板凳
hackthree|  楼主 | 2011-12-13 16:06 | 只看该作者
2# szguoguo

手上只有这个一块片子。。:L

使用特权

评论回复
地板
hackthree|  楼主 | 2011-12-14 11:04 | 只看该作者
用152的人真少。。。:L

使用特权

评论回复
5
IJK| | 2011-12-14 14:12 | 只看该作者
按理,在出厂前ST 会对HSI、MSI、LSI 都进行校准,LZ的情况估计是没有进行出厂MSI校准(或许是早期的芯片)

使用特权

评论回复
6
nikita-fuck| | 2011-12-14 14:55 | 只看该作者
lz,你用的是什么型号,我送你几个好了,,

使用特权

评论回复
7
hackthree|  楼主 | 2011-12-15 07:10 | 只看该作者
6# nikita-fuck
STM32L152vbt6的。。

使用特权

评论回复
8
hackthree|  楼主 | 2011-12-15 07:13 | 只看该作者
5# IJK
昨天用官方的那个校准例程初始化的时候校准了下,

配置成MSI value (range 6)即4.192M,通过MCO输出测得有4.447M。:L
越来越搞不懂这个了。
而且还不是特别稳定。。

使用特权

评论回复
9
hackthree|  楼主 | 2011-12-16 07:20 | 只看该作者
测试了一夜,还是不是稳定,跳动在5000HZ左右,忽大忽小。。

使用特权

评论回复
10
IJK| | 2011-12-16 09:20 | 只看该作者
跳动是正常的,RC振荡器(STM32L的MSI属于这个类型)的自身稳定性肯定比较差,并且它没有锁相环

使用特权

评论回复
11
hackthree|  楼主 | 2011-12-16 10:06 | 只看该作者
10# IJK 额,看来只能用外部晶振了。。
用外部晶振,功耗又大了:Q

使用特权

评论回复
12
cocoasuny| | 2011-12-16 15:02 | 只看该作者
用外部晶振功耗又大了?不知道楼主对功耗要求怎样了,我们做手持式设备的,要求连续工作16小时以上,整块板卡电流控制在100mA一下,一直使用的是外部晶振,内部晶振偏差有那么大吗?等下去实测一下!

使用特权

评论回复
13
hackthree|  楼主 | 2011-12-16 16:03 | 只看该作者
12# cocoasuny
呵呵,我这个要求比你的高的多,不是以小时为单位,而是以年为单位,以前用msp430做的是不超过50ua,电池供电两年。
现在增加功能,就换STM32L152做,舍弃电池供电,用两线制4-20ma,所以要求整机不超过3.5mA。
如果在系统时钟不小于4M的情况下,功耗能越小的话就更好了,这样就能保证在没有4-20ma的时候可以用电池供电时间长一点。

使用特权

评论回复
14
hackthree|  楼主 | 2011-12-16 16:06 | 只看该作者
12# cocoasuny
而且新增加的功能对系统时钟的频率很敏感,所以跳动5000HZ就没法用了。。500hz的跳动还能接受。

使用特权

评论回复
15
s284630173| | 2015-3-6 17:59 | 只看该作者
楼主 我也用的stm32L152系列的,我在RCC时钟那里就卡主了,内部时钟,不能倍频到32M晶振,你可以么?
整体程序如下   通过检测发现  i 一直都是i0x00,有个MSI时钟我一直也不知道怎么用,帮帮忙吧,邮箱123mmmne@163.com
void Clock_Init(void)
{
u8 i;
    RCC_DeInit  ( );                                               
    RCC_HSEConfig(RCC_HSE_OFF);         //关闭HSE时钟
    RCC_HSICmd(ENABLE);                                             //时能HSI时钟
    while(RCC_GetFlagStatus  ( RCC_FLAG_HSIRDY) == RESET )          //等待HSI时钟稳定
    {
    }   
    FLASH_PrefetchBufferCmd(ENABLE);                                //开启FLASH预读缓冲功能,加速FLASH的读取
    FLASH_SetLatency(FLASH_Latency_1);                              //FLASH时序延迟1个周期,等待总线同步操作
    RCC_PLLConfig(RCC_PLLSource_HSI,RCC_PLLMul_4,RCC_PLLDiv_2);     //HSI作为PLL时钟4倍频,2分频
    RCC_HCLKConfig(RCC_SYSCLK_Div1);                                //AHB =  SYSCLK       16M
    RCC_PCLK2Config(RCC_HCLK_Div1) ;                                //APB2=16M
    RCC_PCLK1Config(RCC_HCLK_Div1);                                 //APB1=16M
    RCC_PLLCmd(ENABLE);                                           //只能PLL时钟
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)            //PLL稳定
    {
     }
   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK) ;                    //选用PLL时钟为系统时钟32M
i=RCC_GetSYSCLKSource();
    while(RCC_GetSYSCLKSource()!= 0x0C)//while(RCC_GetSYSCLKSource()!= 0x0C)//  //等待时钟稳定
    {

    }   
}

使用特权

评论回复
16
lyrics1314| | 2015-6-19 10:10 | 只看该作者
cocoasuny 发表于 2011-12-16 15:02
用外部晶振功耗又大了?不知道楼主对功耗要求怎样了,我们做手持式设备的,要求连续工作16小时以上,整块板 ...

我们要求一个3Ah的锂亚电池能工作3~5年

使用特权

评论回复
17
desertsailor| | 2015-6-22 20:08 | 只看该作者
应该是你使用的问题,我用过stm8和stm32,其内部hsi非常准,几乎不需要额外校准

使用特权

评论回复
18
尤彼卡| | 2015-6-22 20:12 | 只看该作者
芯片没有问题吧

使用特权

评论回复
19
cornrn| | 2017-6-2 09:10 | 只看该作者
desertsailor 发表于 2015-6-22 20:08
应该是你使用的问题,我用过stm8和stm32,其内部hsi非常准,几乎不需要额外校准 ...

HSI和MSI不一样大哥

使用特权

评论回复
20
cornrn| | 2017-6-2 09:11 | 只看该作者

现在我用的STM32L476RET6 问题也有,没楼主说的STM32L151这么严重

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

220

帖子

1

粉丝