搜索
bottom↓
回复: 11

STM8S外部时钟的切换问题!

[复制链接]

出0入0汤圆

发表于 2009-4-14 13:24:18 | 显示全部楼层 |阅读模式
我现在要用外部时钟来工作,但是执行切换工作。去测晶振没有时钟信号。大家帮我看看那里有问题。代码如下:
void InitializeCLK(void)
{                                                         ///这段代码也是在这里看到的移用
        ErrorStatus status = 0;

        CLK_DeInit();         
        //高速内部时钟/CPU分频系数设置
        CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
        CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
        //时钟源选择设置
        status = CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, \
                                            CLK_SOURCE_HSE, DISABLE, DISABLE);
        CLK_ClockSwitchCmd(ENABLE);
               
        while (status == 0);                                 
               
        CLK_ClockSwitchCmd(DISABLE);
}
/**
  * @brief Example firmware main entry point.
  * @par Parameters:
  * None
  * @retval void None
  * @par Required preconditions:
  * None
  */
void main(void)
{
        u16 i;
         
        for(i=0;i<1000;i++)
        {
                nop();
           }



        InitializeCLK();                   ///主要就是调用这个进行切换





  /* TIM1 Peripheral Configuration */
  TIM1_DeInit();

  /* Time Base configuration */
  TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, 1000, 0);//4095

  /* Channel 1, 2 and 3 Configuration in TIMING mode */  
  
        /* TIM1_Pulse = 2047 */
        TIM1_OC1Init(TIM1_OCMODE_TIMING, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 2047, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);  

  /* TIM1_Pulse = 1023 */
  TIM1_OC2Init(TIM1_OCMODE_TIMING, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 1023, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);

  /* TIM1_Pulse = 511 */
  TIM1_OC3Init(TIM1_OCMODE_TIMING, TIM1_OUTPUTSTATE_ENABLE, TIM1_OUTPUTNSTATE_ENABLE, 511, TIM1_OCPOLARITY_HIGH, TIM1_OCNPOLARITY_HIGH, TIM1_OCIDLESTATE_SET, TIM1_OCNIDLESTATE_SET);

  /* Automatic Output enable, Break, dead time and lock configuration*/
  
        TIM1_BDTRConfig( TIM1_OSSISTATE_ENABLE,  TIM1_LOCKLEVEL_OFF, 1,  TIM1_BREAK_DISABLE,  TIM1_BREAKPOLARITY_LOW,  TIM1_AUTOMATICOUTPUT_ENABLE);

  TIM1_CCPreloadControl(ENABLE);

  TIM1_ITConfig(TIM1_IT_COM, ENABLE);
  
  
  /* TIM1 counter enable */
  TIM1_Cmd(ENABLE);
  
  /* TIM4 Peripheral Configuration */
  /* Time Base configuration */
        TIM4_TimeBaseInit(TIM4_PRESCALER_128, 0xFF);
  
  /*TIM4 counter enable */
  TIM4_Cmd(ENABLE);
  
  TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
  
  /* Main Output Enable */
  TIM1_CtrlPWMOutputs(ENABLE);
  enableInterrupts();
  
  while (1);   
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入0汤圆

发表于 2009-4-14 18:28:24 | 显示全部楼层
这是我写的切换到外部晶振的代码,供参考
void CLK_Init(void)
{
   
    CLK_DeInit();

    /* Configure the Fcpu to DIV1*/
    CLK_SYSCLKConfig(CLK_PRESCALER_CPUDIV1);
               
    /* Configure the HSI prescaler to the optimal value */
    CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
   
    /* Initilize the CLock controller according to CLK_InitStructure */
    CLK_ClockSwitchConfig(CLK_SWITCHMODE_AUTO, CLK_SOURCE_HSE, DISABLE, DISABLE);
   
    CLK_HSECmd(ENABLE);
}

出0入0汤圆

 楼主| 发表于 2009-4-15 09:15:37 | 显示全部楼层
我按你的写到代码去也还是不成,测晶振脚都是1.5V这样。
是不是哪里还要配置,或是调用的地方不对???还有就关那配置字设置有关系不?

出0入0汤圆

发表于 2009-4-15 10:17:37 | 显示全部楼层
电源电压3.3V,那么测晶振电压1.5V左右一般来说就表明晶振起振了。

出0入0汤圆

 楼主| 发表于 2009-4-15 10:35:15 | 显示全部楼层
我是3.3V供电的,但是用示波器测试是没有信号呀!!!

出0入0汤圆

 楼主| 发表于 2009-4-15 10:38:48 | 显示全部楼层
而且用一个IO输出波形,频率一直没改变。就是觉得一直是在用HSI。

出0入0汤圆

发表于 2009-4-15 10:46:52 | 显示全部楼层
示波器的输入调成10X试试???

出0入0汤圆

 楼主| 发表于 2009-4-15 11:27:25 | 显示全部楼层
现在通过换外部晶振测试,换不同的晶振,测输出方波脚是频率是有变化的了,可以说明外部晶振是有作用了。但是测晶振脚就是册不到信号,按楼上的也测不到,测其他板子(MCU不同)是可以测到的。不知道为什么?

出0入8汤圆

发表于 2009-4-15 23:51:49 | 显示全部楼层
上面的板应该还是用HSL在运行。

1、STM8一上电就以内部时钟在运行;
2、上电成功后,你可以选择切换到外部时钟,可以自动方式(CLK_SWITCHMODE_AUTO),也可以手动方式;
3、选择了切换方式,时钟自动切换,通过读取切换成功标志位来判断是否成功。

正常情况下,当你要去判断这个标志需要读取状态寄存器,同时硬件清除这个标志位也是通过读状态寄存器来实现。也就是说,如果你选择了切换,立马就去判断切换标志,会导致标志位被清空,反馈信息是切换不成功,但也无法得到切换错误标志。这个时候你可以适当的延长一下执行切换命令到判断切换是否成功的代码的时间。时钟切换的具体延时,印象中STM8的数据手册中有说明。

这是以前遇到的一个问题,不知道现在的固件库是否有修正这个问题。

出0入0汤圆

发表于 2010-10-18 11:53:18 | 显示全部楼层
搞不好是你晶振有问题.

出0入0汤圆

发表于 2011-3-3 18:57:28 | 显示全部楼层
我切换直接放到晶振里面的

出0入0汤圆

发表于 2011-3-4 20:55:14 | 显示全部楼层
学习了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 18:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表