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

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

使用特权

评论回复
| 2019-10-9 17:12 | 显示全部楼层
这段代码下载后,LED闪过了吗?程序是在哪卡住了,因为看你RCH的切换好像也是与手册上的步骤不一样

使用特权

评论回复
| 2019-10-9 22:58 | 显示全部楼层
245965d9df58904272.png

使用特权

评论回复
 楼主 | 2019-10-10 11:16 | 显示全部楼层
本帖最后由 lacha 于 2019-10-10 11:19 编辑

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

mcu.rar

483.12 KB, 下载次数: 1

使用特权

评论回复
 楼主 | 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; //熄灯
                }
        }
}

使用特权

评论回复
| 2019-10-11 11:40 | 显示全部楼层
来找我 给技术支持 409946461

使用特权

评论回复
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

我要发帖 投诉建议 创建版块 申请版主

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式

论坛热帖

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