[STM8] STM8l15x系统时钟切换

[复制链接]
3691|22
 楼主| dipingzhu 发表于 2015-7-28 10:34 | 显示全部楼层 |阅读模式
本帖最后由 dipingzhu 于 2015-7-28 11:22 编辑

STM8l15x 切换系统时钟到LSI,结果切换后串口,定时器,AD转换等都不能执行,不知道是不是没有切换成功,仿真也不能执行,代码如下:
  CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);
  
  CLK_SYSCLKSourceSwitchCmd(ENABLE);
  
  while (((CLK->SWCR)& 0x01)==0x01);
  
  CLK_HSICmd(DISABLE);
 楼主| dipingzhu 发表于 2015-7-28 13:32 | 显示全部楼层
各位大神求帮忙啊
mark0668 发表于 2015-7-28 14:53 | 显示全部楼层
    CLK_CKDIVR = 0;    //1分频    这里要为0不然出错,不知为何.
    CLK_ICKCR |= 4;
    while(!(CLK_ICKCR & 0x08));         //等待外部LSI 准备好  
    CLK_SWCR = 2;  //Enable clock switch execution.
    CLK_SWR = 0x02;  //Select LSI as system clock source  
    while (0x02 != (CLK_SCSR)) ;

这代码是可以成功切换,至于那些能不能执行不知了.
 楼主| dipingzhu 发表于 2015-7-28 16:01 | 显示全部楼层
本帖最后由 dipingzhu 于 2015-7-28 16:05 编辑
mark0668 发表于 2015-7-28 14:53
CLK_CKDIVR = 0;    //1分频    这里要为0不然出错,不知为何.
    CLK_ICKCR |= 4;
    while(!(CLK_IC ...

不行,不过我找到了,但是功耗太大了,而且串口定时器什么的都不工作了这是代码:

  CLK->CKDIVR = 0x00;//系统时钟不分频
           
  CLK->ICKCR = 0x04;//启动LSI
  
  while(((CLK->ICKCR)&0x04) != 0x04);//等待LSI稳定
  
  CLK->SWR = 0x02;//切换LSI为时钟源
  
  //CLK_SYSCLKSourceSwitchCmd(ENABLE);//允许时钟切换
  
  CLK->SWCR = 0x02;//允许时钟切换
  
  while(((CLK->SCSR)& 0x02) == 0x02);//等待LSI切换为系统时钟源
  
  CLK->SWCR = 0x00;//关闭时钟切换
  
  CLK->ICKCR &= (uint8_t)(~0x01);//关闭HSI时钟

上述代码能执行,但是功耗太大,并且把这句“CLK->SWCR = 0x02;”改成(CLK->SWCR |= 0x02;)程序就不能执行了!,这是怎么回事
mark0668 发表于 2015-7-28 16:41 | 显示全部楼层
while(((CLK->ICKCR)&0x04) != 0x04);//等待LSI稳定

这里什么意思你知道吗?看手册
donsbin 发表于 2015-7-28 17:51 | 显示全部楼层

  1. void HSI_LSI(void)
  2. {
  3.   CLK_LSICmd(ENABLE);                          //目标CLK 先开启
  4.   while (((CLK->ICKCR)& 0x08)!=0x08);           //等待目标CLK稳定
  5.   CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);         
  6.   CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSI);
  7.   CLK_SYSCLKSourceSwitchCmd(ENABLE);            //CLK 切换
  8.   CLK->SWCR |=0X01;                             //使能切换中断
  9.   while (((CLK->SWCR)& 0x01)==0x01);            //等待切换后的CLK稳定
  10.   CLK->SWCR &=0X00;
  11.   CLK_LSEConfig(CLK_HSI_OFF);                  //关闭原先的 CLK source
  12. }
 楼主| dipingzhu 发表于 2015-7-28 18:11 | 显示全部楼层
mark0668 发表于 2015-7-28 16:41
while(((CLK->ICKCR)&0x04) != 0x04);//等待LSI稳定

这里什么意思你知道吗?看手册

作为时钟源的话,这个位不能够被清零,所以有这个判断
 楼主| dipingzhu 发表于 2015-7-28 18:12 | 显示全部楼层

这个代码也不行,复制过去后串口定时器什么的直接就不运行
我是土匪 发表于 2015-7-28 18:14 | 显示全部楼层
你的问题不在于HSI且环保LSI是否成功,而在于LSI主频31K跑不动。
LSI是RTC的时钟源,你作为系统主时钟,问题会很多很多。

放弃吧。
 楼主| dipingzhu 发表于 2015-7-28 18:38 | 显示全部楼层
我是土匪 发表于 2015-7-28 18:14
你的问题不在于HSI且环保LSI是否成功,而在于LSI主频31K跑不动。
LSI是RTC的时钟源,你作为系统主时钟,问 ...

可以执行的,就是4楼我说的问题
donsbin 发表于 2015-7-28 18:45 | 显示全部楼层
dipingzhu 发表于 2015-7-28 18:12
这个代码也不行,复制过去后串口定时器什么的直接就不运行

很好奇,你HSI下定时器串口工作是否正常。
时钟切换到LSI主频不一样了,你定时器、串口有没有重新配置过呢
 楼主| dipingzhu 发表于 2015-7-28 19:01 | 显示全部楼层
donsbin 发表于 2015-7-28 18:45
很好奇,你HSI下定时器串口工作是否正常。
时钟切换到LSI主频不一样了,你定时器、串口有没有重新配置过 ...

也就是定时周期改变了,其他的配置没什么影响吧,先把LSI调好了,其他就简单了
huangqi412 发表于 2015-7-28 19:13 | 显示全部楼层
时钟变了,你串口波特率得重新配置。   AD模块不知道能不能用低频时钟源,得看看手册。
 楼主| dipingzhu 发表于 2015-7-28 19:22 | 显示全部楼层
huangqi412 发表于 2015-7-28 19:13
时钟变了,你串口波特率得重新配置。   AD模块不知道能不能用低频时钟源,得看看手册。
...

直接调用的库函数,应该不需要配置吧
我是土匪 发表于 2015-7-28 19:44 | 显示全部楼层
LSI下设备没法工作。
 楼主| dipingzhu 发表于 2015-7-28 20:06 | 显示全部楼层
我是土匪 发表于 2015-7-28 19:44
LSI下设备没法工作。

那为什么这段代码可以执行:

CLK->CKDIVR = 0x00;//系统时钟不分频
         
CLK->ICKCR = 0x04;//启动LSI

while(((CLK->ICKCR)&0x04) != 0x04);//等待LSI稳定

CLK->SWR = 0x02;//切换LSI为时钟源

//CLK_SYSCLKSourceSwitchCmd(ENABLE);//允许时钟切换

CLK->SWCR = 0x02;//允许时钟切换

while(((CLK->SCSR)& 0x02) == 0x02);//等待LSI切换为系统时钟源

CLK->SWCR = 0x00;//关闭时钟切换

CLK->ICKCR &= (uint8_t)(~0x01);//关闭HSI时钟
donsbin 发表于 2015-7-28 20:26 | 显示全部楼层
dipingzhu 发表于 2015-7-28 19:01
也就是定时周期改变了,其他的配置没什么影响吧,先把LSI调好了,其他就简单了 ...

LZ何不尝试外部接个32.768K低速晶振,时钟切换到LSE
 楼主| dipingzhu 发表于 2015-7-28 20:34 | 显示全部楼层
donsbin 发表于 2015-7-28 20:26
LZ何不尝试外部接个32.768K低速晶振,时钟切换到LSE

正因为没接外部时钟,所以需要内部LSI时钟,以实现低功耗配置
598330983 发表于 2015-7-28 22:42 | 显示全部楼层
在于LSI主频31K跑不动
 楼主| dipingzhu 发表于 2015-7-29 08:46 | 显示全部楼层
598330983 发表于 2015-7-28 22:42
在于LSI主频31K跑不动

LSI主频38K跑动了,看16楼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

45

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部