搜索
bottom↓
回复: 5

stm8不能切换到24MHz晶振?

[复制链接]

出0入0汤圆

发表于 2009-5-18 22:10:00 | 显示全部楼层 |阅读模式
用以下代码切换到HSE不工作。我焊的是24MHz的晶振。用示波器x10档观察到一个24MHz幅度1V的正弦波,这应该是说起振了啊,但连LED闪烁的程序都跑不起来。
    CLK_DeInit();

    /* Configure the Fcpu to DIV1*/
    CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
               
    /* Configure the HSI prescaler to the optimal value */
    CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
   
    /* Initilize the CLock controller according to CLK_InitStructure */
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, DISABLE);          // 这一条语句单步调试就“死机”了;step into出现下面的错误。
   
    CLK_HSECmd(ENABLE);
奇怪的是这个代码在stm8 minikit上可以工作。这可能是什么问题呢?

(原文件名:stvd调试出错.JPG)

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2009-5-19 00:19:28 | 显示全部楼层
刚才换了个晶振,用我手上有的16MHz、12MHz、11.0592MHz、4MHz发现都能工作;24MHz的换上去就“死了”一点反映都没有。

难道不能工作到24MHz?

出0入0汤圆

 楼主| 发表于 2009-5-19 13:01:45 | 显示全部楼层
最新进展,采用下列代码测试,Fmaster分频选择2分频可以用24MHz,选1分频,工作不正常。
  
  /* Configure clock prescaler */
    CLK->CKDIVR = 0x01;          /* To be programmed with different value */
                                /* Fmaster, Fmaster/2, ...               */
    /* To select external source by automtic switch */
    CLK->SWCR |= 0x02;            /* Enable switch */
    CLK->SWR   = 0xB4;            /* Select HSE */
               
    while (!(CLK->SWCR & 0x08));  /* Wait for switch done */
               
                /* verify the external clock is selected (optional) */
    if (CLK->CMSR != 0xB4)        
                    while(1);
   
    CLK->CSSR |= 0x01;

出0入0汤圆

 楼主| 发表于 2009-5-20 17:35:31 | 显示全部楼层
问题已解决,CPU工作在24M时,访问Flash要插入等待周期,通过写Option字节实现。

出0入8汤圆

发表于 2009-5-21 00:42:28 | 显示全部楼层
这个问题,四个月前我在21ic上有问过。

1、STM8S的Flash工艺导致如果代码在Flash上运行,16MHz以上,24MHz以下,必需在option中配置Flash插入一个等待周期;
2、如果在16MHz以下,无需加入;
3、如果代码在RAM中运行,无此限制;
4、但请注意由于STM8S的内核结构,RAM的总线宽度是8bit,Flash的总线宽度是32bit,也就是,无论上述何种情况,在RAM中运行都要比在Flash中运行代码效率更差;
5、当使用24MHz时钟尽管插入了一个等待周期,但要记得全部外设(除Flash以外)的时钟配置都是以24MHz为基准计算;

出0入0汤圆

 楼主| 发表于 2009-5-21 10:20:34 | 显示全部楼层
多谢Grant的解释。
在stm8的官方培训资料中了解到stm8的内核采用了3级流水线和32位总线宽度,所以即便取指插入了一个等待周期,在绝大多数时候指令的执行还是不会“断流”的。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 15:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表