HC32F005如何配置用外部24MHZ晶体
我目前只能用内部SysctrlRchFreq22_12MHz。然后串口9600可以正常通讯。115200就会异常。我想用外部24MHZ,并且用115200,没有搞明白如何改。哪位朋友帮忙指点一下。谢谢! SysClkIni 负责系统时钟的初始化,大致的步骤如下CLK_XtalConfig(); 配置外部振荡
CLK_XtalCmd(Enable); 使能外部振荡
CLK_SetPllSource(ClkPllSrcXTAL); 选外部振荡做PLL的输入
CLK_MpllConfig(); 配置PLL
CLK_MpllCmd(Enable); 使能PLL
CLK_SetSysClkSource(CLKSysSrcMPLL); 选择PLL输出作系统时钟 上面我说的是HC32F460/4A0的时钟初始化,HC32F005在函数Sysctrl_ClkInit中,函数原型这样的
en_result_t Sysctrl_ClkInit(stc_sysctrl_clk_cfg_t *pstcCfg);
参数也比32F4X0简单不少,结构体定义这样子
typedef struct
{
en_sysctrl_clk_source_tenClkSrc; ///< 时钟源选择
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;
//将时钟从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
页:
[1]