关于STM8L时钟切换问题
我用的单片机型号:STM8L052R8,时钟切换不正常,在debug时候发现,一执行CLK_SWCR_SWEN = 1命令,debug出错: Failed to read memory at 0x50C7: SWIM error : Comm timeoutFailed 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要求的,还找不到原因。
哪位遇到类似问题,还请赐教。
回复:关于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) 是可以的。
RE:关于STM8L时钟切换问题
补充一下,上述错误在切换至LSE和LSI时才出现,示波器看了,LSE没有问题RE:关于STM8L时钟切换问题
发代码看看吧。怀疑是时钟没有设置成功导致仿真失败。RE:关于STM8L时钟切换问题
那估计还是你时钟配置的问题,STM8没玩过,但应该和stm32差不多,如你所说,若执行BYTE System_Clk_AutoSwitch(HSI) 是可以的。那证明用内部时钟是可以的。LSE/LSI都不行,说明,硬件问题的可能性小点,多数还是软件问题。你看一下,是不是有东西对时钟,或者说延时有严格的要求RE:关于STM8L时钟切换问题
LSE使能后,需要短延时,让LSE稳定起振后,再将主时钟源切换成LSE,根据STM32猜测的,看能否解决楼主的问题:DRE:关于STM8L时钟切换问题
看看LSE硬件有没用问题, 虚焊之类的RE:关于STM8L时钟切换问题
可能是接触不良...RE:关于STM8L时钟切换问题
关于这个问题的发现和疑问:在各位的提示下,换了晶振,执行上面转换程序,Debug没有报错。但又出现新问题:
1.如果在转换程序中将分频系数改为 CLK_CKDIVR_CKM = 1,Debug仍会报同样错误。
2.程序正常运行为LSE,要实现某个功能时转换到HSI,执行完成再换到LSE,这样执行程序会跑飞。
各位能否帮助分析一下,谢谢
RE:关于STM8L时钟切换问题
是转换中的异常么,。设置肯定对吗
页:
[1]
2