打印
[STM8]

STM8 外部晶振,如何使用

[复制链接]
4931|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
guanshan237|  楼主 | 2013-10-10 16:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用的是STM8207,晶振用24M
初始化:
      CLK_ECKR |=0X1;   //开启外部时钟

        while(!(CLK_ECKR&0X2)); //等待外部时钟rdy

        CLK_CKDIVR &= 0XF8;      //CPU无分频

        CLK_SWR = 0XB4;   //选择外部时钟

        while(!(CLK_SWCR&0X8)); //这里要等


         CLK_SWCR |=0X2;   //使能外部时钟

        CLK_HSICmd(DISABLE);

在线运行时提示错误:Thu Oct 10 16:51:58 2013: Failed to read memory at 0x3D: SWIM error [30004]: Comm timeout


沙发
feilusia| | 2013-10-10 17:01 | 只看该作者
网上搜了个库函数的给你
/*******************************************************************************
*                           ==启用外部晶振函数==
* CLK_DeInit();                                      --> 时钟各变量初始化
* CLK_HSECmd(ENABLE);                                --> 外部高速晶振使能
* while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY)); --> 测试外部高速晶振位是不是使能
* CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);           --> 外部时钟预分频器,1分频
* CLK_ClockSwitchCmd(ENABLE);                        --> 使能时钟切换功能
* CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO,CLK_SOURCE_HSE,DISABLE,CLK_CURRENTCLOCKSTATE_ENABLE);
                                                      --> 时钟切换 ( 自动切换模式 , 切换到外部高速晶振 , 禁止切换中断 , 当前钟状态为使能 )
*******************************************************************************/
void HSE_CLK_INIT(void)
{
CLK_DeInit();
CLK_HSECmd(ENABLE);                                 
while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY));
CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
CLK_ClockSwitchCmd(ENABLE);
CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO , CLK_SOURCE_HSE , DISABLE , CLK_CURRENTCLOCKSTATE_ENABLE);
}

使用特权

评论回复
板凳
guanshan237|  楼主 | 2013-10-11 08:37 | 只看该作者
feilusia 发表于 2013-10-10 17:01
网上搜了个库函数的给你
/**************************************************************************** ...

在线运行,还是出错,comm timeout

使用特权

评论回复
地板
feilusia| | 2013-10-11 08:41 | 只看该作者
guanshan237 发表于 2013-10-11 08:37
在线运行,还是出错,comm timeout

你先用内部晶振试试能不能DEBUG,有问题就是硬件问题。没问题了再试外部晶振。

使用特权

评论回复
5
iCreate| | 2013-10-11 18:48 | 只看该作者
STM8S使用外部晶振,有低于16M的,也有高于16M的设置之分,详情可参考风驰的例程

使用特权

评论回复
6
hkcj| | 2013-10-11 20:31 | 只看该作者
还是买一款板子   自己好好玩玩   应该就有答案了  楼主  

使用特权

评论回复
7
hkcj| | 2013-10-11 20:31 | 只看该作者
高手都是自己一步一步的玩出来的  楼主   相信自己  应该可以搞定的

使用特权

评论回复
8
拿起书本| | 2013-10-11 21:34 | 只看该作者
有没有可能本身电路就有些缺陷呢?楼主仔细检查一下吧

使用特权

评论回复
9
guanshan237|  楼主 | 2013-10-12 16:33 | 只看该作者
拿起书本 发表于 2013-10-11 21:34
有没有可能本身电路就有些缺陷呢?楼主仔细检查一下吧

就是一个晶振,两个电容22PF,仅此而已

使用特权

评论回复
10
pofu007| | 2013-10-12 17:00 | 只看该作者
我是这么用的,启动默认是内部振荡器需要切换到外部晶振。  
    CLK_DeInit();
   
    // 使用外部晶振,4M
    CLK_HSECmd(ENABLE);
   
    // 等待外部晶振被启用
    while(SET != CLK_GetFlagStatus(CLK_FLAG_HSERDY));
   
    // 切换到HSE
    while (!CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE,\
            CLK_CURRENTCLOCKSTATE_DISABLE));

使用特权

评论回复
11
guanshan237|  楼主 | 2013-10-16 09:46 | 只看该作者
pofu007 发表于 2013-10-12 17:00
我是这么用的,启动默认是内部振荡器需要切换到外部晶振。  
    CLK_DeInit();
   

试试看了

使用特权

评论回复
12
_Hanking| | 2014-1-8 14:18 | 只看该作者
你的问题解决了么,我也遇到这样的问题,编译没有错误,在Debug模式下,在时钟切换过程中,运行到CLK->SWR = CLK_SYSCLKSource_LSE;时就会出错。

使用特权

评论回复
13
grant_jx| | 2014-1-8 20:40 | 只看该作者
先用STLink将MCU的optinbyte的Flash 等待周期改为1个时钟等待周期,然后再调试试试。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

38

帖子

1

粉丝