你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于STM8L时钟切换问题

[复制链接]
谈笑之间 提问时间:2014-7-11 12:00 /
我用的单片机型号: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要求的,还找不到原因。
 
哪位遇到类似问题,还请赐教。
收藏 1 评论11 发布时间:2014-7-11 12:00

举报

11个回答
谈笑之间 回答时间: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猜测的,看能否解决楼主的问题
有缘于你 回答时间: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时钟切换问题

是转换中的异常么,。设置肯定对吗
霹雳之火 回答时间:2014-7-30 22:52:46

RE:关于STM8L时钟切换问题

有的存储器系统时钟是刚开始locktime内设置,是不是这个原因
lyrics1314 回答时间:2015-4-24 10:48:19
LZ注意,STM8L时钟切换到LSE时会导致程序断开,仿真不了的,知悉
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版