hc32f072上想使用内部晶振,代码如下:
static void App_SysClkInit(void)
{
///< 切换时钟前(根据外部高速晶振)设置XTH频率范围,配置晶振参数,使能目标时钟,此处为8MHz
//Sysctrl_SetXTHFreq(SysctrlXthFreq6_12MHz);
//Sysctrl_XTHDriverCfg(SysctrlXtalDriver3);
//Sysctrl_SetXTHStableTime(SysctrlXthStableCycle16384);
//Sysctrl_ClkSourceEnable(SysctrlClkXTH, TRUE);
//delay1ms(10);
///< 时钟切换
//Sysctrl_SysClkSwitch(SysctrlClkXTH);
//Sysctrl_SysClkSwitch(SysctrlClkRCH);
/////////////////////////////////////////////////////
//将时钟从XTH8MHz切换至PLL48MHz
stc_sysctrl_pll_cfg_t stcPLLCfg;
//< 当前时钟源HCLK大于24M:此处设置FLASH 读等待周期为1 cycle(前面已经配置,此处无需重复配置)
//Flash_WaitCycle(FlashWaitCycle1);
///< 切换时钟前配置PLL相关参数
stcPLLCfg.enInFreq = SysctrlPllInFreq20_24MHz; //RCH 24MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz; //PLL 输出48MHz
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
stcPLLCfg.enPllMul = SysctrlPllMul2; //24MHz x 2 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
Sysctrl_SetPLLStableTime(SysctrlPllStableCycle16384);
Sysctrl_ClkSourceEnable(SysctrlClkPLL, TRUE);
///< 时钟切换
Sysctrl_SysClkSwitch(SysctrlClkPLL);
///< 根据需要选择是否关闭原时钟(此处关闭XTH)
Sysctrl_ClkSourceEnable(SysctrlClkXTH, FALSE);
}
烧写进去后就出问题了,使用keil烧录始终提示"Contents mismatch at xxxxx",感觉锁死了,swd口检测的到是勤快的很。
于是拉高boot0进isp烧录,使用HDSC ISP V2.07,按照说明进入:
请确认目标芯片与串口模块的连接:
MCU.VCC <---> 串口模块.VCC
MCU.GND <---> 串口模块.GND
MCU.TXD(PA14) <---> 串口模块.RXD
MCU.RXD(PA13) <---> 串口模块.TXD
MCU.BOOT0 <---> MCU.VCC
始终提示
<--2020/12/30 14:07:29-->串口操作超时!
<--2020/12/30 14:07:29-->Query不成功!
于是监控串口
发现ISP只是发送65 01 10 65 F3数据出去,然后使用串口助手模拟一直发65 01 10 65 F3,插电接上单片机没反应。
不插电,直接用MCU.TXD(PA14) <---> 串口模块.RXD,串口收到一串不规则的数据。
现象总结:
设备boot0不拉高能检测到swd口,能烧录但校验错误,电脑提示该usb工作不正常。
设备boot0拉高插电电脑没反应。
设备boot0拉高接isp串口,电脑提示该usb工作不正常,isp提示串口操作超时!Query不成功!
折腾几天用不了~
|