谈笑之间 发表于 2014-7-11 12:00:53

关于STM8L时钟切换问题

我用的单片机型号:STM8L052R8,时钟切换不正常,在debug时候发现,一执行CLK_SWCR_SWEN = 1命令,debug出错: Failed to read memory at 0x50C7: SWIM error : Comm timeout
Failed to read memory at 0x50C8: SWIM error : Comm timeout
Failed to read memory at 0x50C9: SWIM error : Comm timeout
Failed to read memory at 0x50Ca: SWIM error : Comm timeout
这几个地址对应CLK的几个寄存器。切换顺序严格按Datasheet要求的,还找不到原因。
 
哪位遇到类似问题,还请赐教。

谈笑之间 发表于 2014-7-11 18:07:33

回复:关于STM8L时钟切换问题

BYTE System_Clk_AutoSwitch(BYTE newsrc)
{
 WORD timeout=0xffff;
 //BYTE oldsrc = CLK_SCSR; //上一时钟源
 CLK_SWCR_SWEN =0;
 switch(newsrc)
 {
  case 1:  CLK_ICKCR_HSION = 1;while (CLK_ICKCR_HSIRDY == 0);CLK_CKDIVR_CKM = 0;
     CLK_SWCR_SWEN = 1;CLK_SWR = 0x01;while (CLK_SWCR_SWBSY & timeout);
     CLK_SWCR_SWEN =0;break; //HSI
     
  case 2:  CLK_ICKCR_LSION = 1;while (CLK_ICKCR_LSIRDY == 0);CLK_CKDIVR_CKM = 0;
     CLK_SWCR_SWEN = 1;CLK_SWR = 0x02;while (CLK_SWCR_SWBSY & timeout);
     CLK_SWCR_SWEN =0;break; //LSI
     
  case 3:  CLK_ECKCR_HSEON = 1;while (CLK_ECKCR_HSERDY == 0);CLK_CKDIVR_CKM = 0;CLK_SWCR_SWEN =0;
     CLK_SWCR_SWEN = 1;CLK_SWR = 0x04;while (CLK_SWCR_SWBSY & timeout);
     CLK_SWCR_SWEN =0;break; //HSE
     
  case 4:  CLK_ECKCR_LSEON = 1;while (CLK_ECKCR_LSERDY == 0);CLK_CKDIVR_CKM = 0;
     CLK_SWCR_SWEN = 1;CLK_SWR = 0x08;while (CLK_SWCR_SWBSY & timeout);
     CLK_SWCR_SWEN =0;break; //LSE  
  default : break;
 }
}
这是我的代码,请帮忙看看问题出在哪里。主程序第一条就是 BYTE System_Clk_AutoSwitch(LSE),就报以上错误。若执行BYTE System_Clk_AutoSwitch(HSI) 是可以的。

 

谈笑之间 发表于 2014-7-11 12:26:30

RE:关于STM8L时钟切换问题

补充一下,上述错误在切换至LSE和LSI时才出现,示波器看了,LSE没有问题

发表于 2014-7-11 17:03:31

RE:关于STM8L时钟切换问题

发代码看看吧。怀疑是时钟没有设置成功导致仿真失败。

yvonn 发表于 2014-7-11 22:42:25

RE:关于STM8L时钟切换问题

那估计还是你时钟配置的问题,STM8没玩过,但应该和stm32差不多,如你所说,若执行BYTE System_Clk_AutoSwitch(HSI) 是可以的。那证明用内部时钟是可以的。LSE/LSI都不行,说明,硬件问题的可能性小点,多数还是软件问题。你看一下,是不是有东西对时钟,或者说延时有严格的要求

巅峰残狼 发表于 2014-7-12 14:57:20

RE:关于STM8L时钟切换问题

LSE使能后,需要短延时,让LSE稳定起振后,再将主时钟源切换成LSE,根据STM32猜测的,看能否解决楼主的问题:D

有缘于你 发表于 2014-7-12 16:58:59

RE:关于STM8L时钟切换问题

看看LSE硬件有没用问题, 虚焊之类的

aaa999kk 发表于 2014-7-17 16:52:16

RE:关于STM8L时钟切换问题

可能是接触不良...

谈笑之间 发表于 2014-7-19 14:35:18

RE:关于STM8L时钟切换问题

关于这个问题的发现和疑问:
在各位的提示下,换了晶振,执行上面转换程序,Debug没有报错。但又出现新问题:
1.如果在转换程序中将分频系数改为 CLK_CKDIVR_CKM = 1,Debug仍会报同样错误。
2.程序正常运行为LSE,要实现某个功能时转换到HSI,执行完成再换到LSE,这样执行程序会跑飞。
各位能否帮助分析一下,谢谢

feixiang20 发表于 2014-7-23 02:20:55

RE:关于STM8L时钟切换问题

是转换中的异常么,。设置肯定对吗
页: [1] 2
查看完整版本: 关于STM8L时钟切换问题