我用的单片机型号:STM8L052R8,时钟切换不正常,在debug时候发现,一执行CLK_SWCR_SWEN = 1命令,debug出错: Failed to read memory at 0x50C7: SWIM error [30004]: Comm timeout Failed to read memory at 0x50C8: SWIM error [30004]: Comm timeout Failed to read memory at 0x50C9: SWIM error [30004]: Comm timeout Failed to read memory at 0x50Ca: SWIM error [30004]: Comm timeout 这几个地址对应CLK的几个寄存器。切换顺序严格按Datasheet要求的,还找不到原因。 哪位遇到类似问题,还请赐教。 |
从零开始操作STM8寄存器(风驰iCreate奉献)
【中文资料】初学STM8库函数的中文帮助软件
绝对经典的中文STM8学习手册,淘宝上学习板资料,友情大放送!
【原创教程】风驰iCreate独家开源STM8 27个例程和10多万字的pdf教程
STM8的LCD1602 4线驱动,为什么不工作
【精华资料】由零开始开发STM8
STM8S 的触摸库是如何在主程序中查询键的呢、
【精华资料】STM8的C语言编程1-14讲完整版
【精品教程】STM8系列单片机入门教程系列
STM8 第一次进中断不准【悬赏问答】
回复:关于STM8L时钟切换问题
{
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时钟切换问题
RE:关于STM8L时钟切换问题
RE:关于STM8L时钟切换问题
RE:关于STM8L时钟切换问题
RE:关于STM8L时钟切换问题
RE:关于STM8L时钟切换问题
RE:关于STM8L时钟切换问题
在各位的提示下,换了晶振,执行上面转换程序,Debug没有报错。但又出现新问题:
1.如果在转换程序中将分频系数改为 CLK_CKDIVR_CKM = 1,Debug仍会报同样错误。
2.程序正常运行为LSE,要实现某个功能时转换到HSI,执行完成再换到LSE,这样执行程序会跑飞。
各位能否帮助分析一下,谢谢
RE:关于STM8L时钟切换问题
RE:关于STM8L时钟切换问题