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

查看: 10673|回复: 11

关于STM8L时钟切换问题

[复制链接]

1

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2014-7-11 12:00:53 | 显示全部楼层 |阅读模式
我用的单片机型号: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

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 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) 是可以的。

 
回复 支持 0 反对 2

使用道具 举报

1

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2014-7-11 12:26:30 | 显示全部楼层

RE:关于STM8L时钟切换问题

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

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2014-7-11 17:03:31 | 显示全部楼层

RE:关于STM8L时钟切换问题

发代码看看吧。怀疑是时钟没有设置成功导致仿真失败。
回复 支持 反对

使用道具 举报

2

主题

71

回帖

0

蝴蝶豆

初级会员

最后登录
2018-11-13
发表于 2014-7-11 22:42:25 | 显示全部楼层

RE:关于STM8L时钟切换问题

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

使用道具 举报

24

主题

514

回帖

6

蝴蝶豆

金牌会员

最后登录
2019-4-8
发表于 2014-7-12 14:57:20 | 显示全部楼层

RE:关于STM8L时钟切换问题

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

使用道具 举报

2

主题

295

回帖

0

蝴蝶豆

初级会员

最后登录
2018-4-6
发表于 2014-7-12 16:58:59 | 显示全部楼层

RE:关于STM8L时钟切换问题

看看LSE硬件有没用问题, 虚焊之类的
回复 支持 反对

使用道具 举报

23

主题

195

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2014-7-17 16:52:16 | 显示全部楼层

RE:关于STM8L时钟切换问题

可能是接触不良...
回复 支持 反对

使用道具 举报

1

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2014-7-19 14:35:18 | 显示全部楼层

RE:关于STM8L时钟切换问题

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

使用道具 举报

91

主题

4603

回帖

4

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2014-7-23 02:20:55 | 显示全部楼层

RE:关于STM8L时钟切换问题

是转换中的异常么,。设置肯定对吗
回复 支持 反对

使用道具 举报

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版