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

查看: 10702|回复: 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 &amp; 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 &amp; 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 &amp; 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 &amp; 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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版