[技术问答] 搞了好久,切换外部震荡还是失败

[复制链接]
 楼主| lacha 发表于 2019-10-9 16:32 | 显示全部楼层 |阅读模式
切换失败.png
搞了好久,切换外部震荡还是失败, 驱动能力修改了:M0P_CLOCK->XTH_CR_f.DRIVER = 0xa;  检测STABLE标志后增加10ms延时也加了,  晶振电容值也换过好几种了

martinhu 发表于 2019-10-9 17:12 | 显示全部楼层
这段代码下载后,LED闪过了吗?程序是在哪卡住了,因为看你RCH的切换好像也是与手册上的步骤不一样
smartpower 发表于 2019-10-9 22:58 | 显示全部楼层
 楼主| lacha 发表于 2019-10-10 11:16 | 显示全部楼层
本帖最后由 lacha 于 2019-10-10 11:19 编辑

上电只在内部震荡时闪了一下,就卡死在Clk_SwitchTo(ClkXTH)里. 使用内部震荡时是完全根据手册和例程的,完全没问题.

mcu.rar

483.12 KB, 下载次数: 2

 楼主| lacha 发表于 2019-10-10 11:21 | 显示全部楼层
#include <stdio.h>
#include <string.h>  
#include "stdlib.h"

#include "ddl.h"
#include "gpio.h"

//---------------------------------------------------------------------
#define LED_init()                Gpio_InitIO(3, 3, GpioDirOut) //初始化IO
#define LED_enable                Gpio_SetIO(3, 3, 0)        //IO输出值设定(3,3=ip模块板)
#define LED_disable                Gpio_SetIO(3, 3, 1)        //IO输出值设定
//---KEY1---//初始化IO: 端口,引脚,方向,上拉,下拉,开漏,增强驱动
#define KEY1_init() Gpio_InitIOExt(2, 6, GpioDirIn, TRUE, FALSE, FALSE, FALSE)
#define CHK_key1()        Gpio_GetIO(2, 6) //模块板

//---------------------------------------------------------------------
//---------------------------------------------------------------------
int32_t main(void)
{        uint8_t a, led_flag;
    stc_clk_config_t stcClkCfg;
//---------------------------------------------------------------------   
    stcClkCfg.enClkSrc  = ClkRCH; //内部高速(需再设频率值)        时钟源切换
        Clk_SetRCHFreq(ClkFreq22_12Mhz); //ClkFreq22_12Mhz
    stcClkCfg.enHClkDiv = ClkDiv1; //不分频
    stcClkCfg.enPClkDiv = ClkDiv1;
    Clk_Init(&stcClkCfg); //时钟初始化函数(内含Clk_SwitchTo)
//---------------------------------
        KEY1_init();
        LED_init();
//---       
        LED_enable; //点灯
        delay_1ms(200);
        LED_disable; //熄灯
//---       
        delay_1ms(1000);
        Clk_SwitchTo(ClkXTH);
//---       
        LED_enable; //点灯
        delay_1ms(200);
        LED_disable; //熄灯
        delay_1ms(200);
        LED_enable; //点灯
        delay_1ms(200);
        LED_disable; //熄灯

        while(1)                              
        {         if (!CHK_key1())
                {        delay_1ms(20);
                        a = 0;
                        led_flag = 1;
                        LED_enable; //点灯
                        while (!CHK_key1()) //
                        {        delay_1ms(1);
                                a++;
                                if (!(a % 100))
                                {        led_flag++;
                                        if (led_flag % 2)
                                        {        LED_enable; //点灯
                                        }
                                        else
                                        {        LED_disable; //熄灯
                                        }
                                }
                        }
                        LED_disable; //熄灯
                }
        }
}
sgrtf661 发表于 2019-10-11 11:40 | 显示全部楼层
来找我 给技术支持 409946461
star262933 发表于 2020-11-3 20:39 | 显示全部楼层
Clk_SwitchTo(ClkXTH) 卡在这里可能是 晶振引脚接错了,有高频引脚和低频引脚 是分开的。你搞定了吗
我也遇到问题了。
查询无结果 发表于 2020-11-10 13:03 | 显示全部楼层
我昨天也调试了很久,按照给的流程切换到外部8M的晶振,一直不能稳定,不知道是什么情况
martinhu 发表于 2020-11-10 14:22 | 显示全部楼层
查询无结果 发表于 2020-11-10 13:03
我昨天也调试了很久,按照给的流程切换到外部8M的晶振,一直不能稳定,不知道是什么情况 ...

你这是哪一颗芯片,8M的时候,一般建议选最弱的设置,如果还不行,外部要加限流电阻了……
334685faa31b60b529.png
查询无结果 发表于 2020-11-10 15:25 | 显示全部楼层
martinhu 发表于 2020-11-10 14:22
你这是哪一颗芯片,8M的时候,一般建议选最弱的设置,如果还不行,外部要加限流电阻了……

...

感谢解答,晚上我回去试试最弱驱动能能力
查询无结果 发表于 2020-11-10 19:05 | 显示全部楼层
martinhu 发表于 2020-11-10 14:22
你这是哪一颗芯片,8M的时候,一般建议选最弱的设置,如果还不行,外部要加限流电阻了……

...

果然还是不行,你那边试过可以吗?可以给个历程吗?
smartpower 发表于 2020-11-10 21:00 | 显示全部楼层
谈晶振请贴原理图,PCB图,晶振手册
rickluo 发表于 2020-11-12 10:10 | 显示全部楼层
原理图.png

原理图,晶振位置,如上,请高手帮忙指点!


您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

29

帖子

1

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