打印
[STM8]

STM8时钟切换

[复制链接]
7356|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
箫笑|  楼主 | 2009-11-4 14:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
不知道这个结不结帖有没啥关系的,21也来搞个这玩意儿,于是,重开帖.

已知,相同的时钟切换程序用在三合一板上的STM8S完全没有问题,但是烧进另一个STM8AH就不行了.
设置CLK_SWR = 0xB4之后,SWBSY就一直是1,SWIF一直为0,测OSCIN跟OSCOUT都没有起振.
已经把晶振换成8M,没有大于16M的疑虑,HSI和LSI之间的切换完全OK.

这是STM8的Bug?还是某些批次出了问题?还是时钟切换有不同操作步骤和方法没注意?
沙发
IJK| | 2009-11-4 14:36 | 只看该作者
应该是那片STM8AH的个别问题
如果OSCIN跟OSCOUT都没有起振(需要注意测试方法),即HSE没有起振,那当然就切换不过去

使用特权

评论回复
板凳
香水城| | 2009-11-4 18:10 | 只看该作者
请注意:STM8S与STM8AH是完全不同的产品,它们2个的关系仅仅是使用了相同的内核,因此在STM8S上成功的程序,到STM8AH上并一定能够成功。

使用特权

评论回复
地板
young_xyj| | 2009-11-5 09:29 | 只看该作者
说到时钟切换我觉得也有很多问题:
我是用下面得函数来切换的,但是切到内部128K后,量外部的晶振,其照样再震荡。
void        RunIntoHighMode(void)
{
        CLK_ClockSwitchCmd(ENABLE);
        CLK_HSECmd(ENABLE);
        CLK_LSICmd(DISABLE);
        CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
}

void        RunIntoLowMode(void)
{
        CLK_ClockSwitchCmd(ENABLE);
        CLK_LSICmd(ENABLE);
        CLK_HSECmd(DISABLE);
        CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_LSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
}

当调用RunIntoLowMode()后外部晶振照样震荡,这是不是有问题。

还有就是我使用内部的高速
CLK_ClockSwitchCmd(ENABLE);
CLK_HSICmd(ENABLE);
CLK_LSICmd(DISABLE);
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSI, DISABLE, CLK_CURRENTCLOCKSTATE_DISABLE);
这样根本就切换不到内部的16M,所以这个时钟根本就是由很多问题,当然我也不确定是否是程序有问题?

使用特权

评论回复
5
箫笑|  楼主 | 2009-11-5 09:37 | 只看该作者
CLK_SWR = 0xB4;                                         //select HSE
        while (!(CLK_SWCR & 0x08))                                //wait for Hse ready       
                ;                                                       
        CLK_SWCR |= 0x02;                                 //enable clk switch*/
根据手册描写的方法,手动切换,但是HSE始终不就绪

使用特权

评论回复
6
young_xyj| | 2009-11-5 09:50 | 只看该作者
所以这个问题就不知道是什么意思了,楼主出来说说啊,大家都等着呢

使用特权

评论回复
7
箫笑|  楼主 | 2009-11-5 10:49 | 只看该作者
??
不知道我这个问题什么意思??
坛子里之前有人发过,他换成16M以下的晶振就解决了,但是我换成8M也不行,我跟他的一样的现像
https://bbs.21ic.com/icview-110925-1-2.html

使用特权

评论回复
8
efengxing| | 2013-11-28 21:10 | 只看该作者
也碰到LZ的问题,内部时钟可以,外部晶振就可以,反复实验,怎么都过不去。
刚刚解决,分享一下,愿可以帮到有需要的人:
1、先用示波器测试晶振引脚的波形,发现没有波形输出;有测试晶振引脚的对地电阻,OSCIN引脚竟然对地短路,更换芯片,问题解决。
2、切换程序:
    CLK->ECKR = 0X01;   //允许外部高速振荡器工作
    while((CLK->ECKR & 0x02) == 0x00);  //等待外部高速振荡器准备好
   
    CLK->SWCR = CLK->SWCR|0X02;     //使能切换
    CLK->SWR = 0XB4;                //选择芯片外部的高速振荡器为主时钟
    while((CLK->SWCR&0X08));        //等待切换成功
    CLK->SWCR = CLK->SWCR&0XFD;     //清除切换标志

使用特权

评论回复
9
pillarpeng| | 2016-4-27 17:15 | 只看该作者
efengxing 发表于 2013-11-28 21:10
也碰到LZ的问题,内部时钟可以,外部晶振就可以,反复实验,怎么都过不去。
刚刚解决,分享一下,愿可以帮 ...

感谢,问题已经解决了。

但是这里有一点点书写错误:
您的原文:
while((CLK->SWCR&0X08));        //等待切换成功

应该为:
while((CLK->SWCR&0X08) == 0x00);        //等待切换成功

使用特权

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

本版积分规则

78

主题

368

帖子

0

粉丝