[技术问答]

HC32F005如何配置用外部24MHZ晶体

[复制链接]
843|3
手机看帖
扫描二维码
随时随地手机跟帖
ysdx|  楼主 | 2021-4-27 14:42 | 显示全部楼层 |阅读模式
我目前只能用内部SysctrlRchFreq22_12MHz。然后串口9600可以正常通讯。115200就会异常。我想用外部24MHZ,并且用115200,没有搞明白如何改。哪位朋友帮忙指点一下。谢谢!

使用特权

评论回复
McuPlayer| | 2021-4-27 16:04 | 显示全部楼层
SysClkIni 负责系统时钟的初始化,大致的步骤如下

CLK_XtalConfig();   配置外部振荡
CLK_XtalCmd(Enable);   使能外部振荡
CLK_SetPllSource(ClkPllSrcXTAL);    选外部振荡做PLL的输入
CLK_MpllConfig();   配置PLL
CLK_MpllCmd(Enable);    使能PLL
CLK_SetSysClkSource(CLKSysSrcMPLL);   选择PLL输出作系统时钟

使用特权

评论回复
McuPlayer| | 2021-4-27 16:16 | 显示全部楼层
上面我说的是HC32F460/4A0的时钟初始化,HC32F005在函数Sysctrl_ClkInit中,函数原型这样的
en_result_t Sysctrl_ClkInit(stc_sysctrl_clk_cfg_t *pstcCfg);

参数也比32F4X0简单不少,结构体定义这样子

typedef struct
{
    en_sysctrl_clk_source_t  enClkSrc;       ///< 时钟源选择
    en_sysctrl_hclk_div_t    enHClkDiv;      ///< HCLK分频系数
    en_sysctrl_pclk_div_t    enPClkDiv;      ///< PCLK分频系数
}stc_sysctrl_clk_cfg_t;

typedef enum en_sysctrl_clk_source
{
    SysctrlClkRCH  = 0u,               ///< 内部高速时钟
    SysctrlClkXTH  = 1u,               ///< 外部高速时钟
    SysctrlClkRCL  = 2u,               ///< 内部低速时钟
    SysctrlClkXTL  = 3u,               ///< 外部低速时钟
}en_sysctrl_clk_source_t;

使用特权

评论回复
HTCL| | 2021-4-27 17:03 | 显示全部楼层
//将时钟从RCH4MHz切换至XTH24MHz
void App_Rch4MHzToXth24MHz (void)
{
///<======================== 将时钟从RCH24MHz切换至XTH32MHz ==============================
    ///< 因要使用的时钟源HCLK将大于24M:此处设置FLASH 读等待周期为1 cycle(默认值也为1 cycle)
    Flash_WaitCycle(FlashWaitCycle1);

    ///< 切换时钟前(根据外部高速晶振)设置XTH频率范围,配置晶振参数,使能目标时钟,此处为32MHz
    Sysctrl_SetXTHFreq(SysctrlXthFreq20_32MHz);
    Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);
    Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);
    Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);

    ///< 时钟切换
    Sysctrl_SysClkSwitch(SysctrlClkXTH);
    ///< 根据需要选择是否关闭原时钟(此处不关闭)
    //Sysctrl_ClkSourceEnable(SysctrlClkRCH, FALSE);

    ///< 使能HCLK从PA01输出
//   Gpio_SfHClkOutputCfg(GpioSfHclkOutEnable, GpioSfHclkOutDiv1);

    delay1ms(3000);
  //  _UserKeyWait(); //USER KEY 按下后继续执行

    ///< 禁止HCLK从PA01输出
   // Gpio_SfHClkOutputCfg(GpioSfHclkOutDisable, GpioSfHclkOutDiv1);
}

画个重点:
记得把外部时钟改为24M,不然惊喜在后面等着你。///< XTH
#define SYSTEM_XTH          (24*1000*1000u)     ///< 32MHz

使用特权

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

本版积分规则

337

主题

1051

帖子

21

粉丝