搜索
bottom↓
回复: 11

STM8S外部时钟的切换问题!

[复制链接]
(403178176)

出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);   
}
(403159930)

出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);
}
(403106697)

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

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

出0入8汤圆

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

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

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

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

出0入0汤圆

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

出0入0汤圆

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

出0入0汤圆

发表于 2011-3-4 20:55:14 | 显示全部楼层
学习了!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子论坛 ( 公安交互式论坛备案:44190002001997 粤ICP备09047143号 )

GMT+8, 2022-1-22 23:20

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

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