请教华大技术支持,怎样计算系统时钟频率?
华大技术支持,你们好!对于HC32F030芯片,怎样设置宏定义来确定芯片的系统频率。 对于systick,有以下代码
void SystemInit(void)
{
M0P_SYSCTRL->RCL_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C22ul)));
M0P_SYSCTRL->RCH_CR_f.TRIM = (*((volatile uint16_t*) (0x00100C08ul)));
SystemCoreClockUpdate();
_HidePinInit();
}
///< SysTick配置,定时1s,系统时钟默认RCH 4MHz
SysTick_Config(SystemCoreClock); //
这里 SystemCoreClock由以下函数获得
//add clock source.
void SystemCoreClockUpdate (void) // Update SystemCoreClock variable
{
SystemCoreClock = Sysctrl_GetHClkFreq();
} 容易理解,SysTick_Config(SystemCoreClock); 不管使用多少频率的晶振都产生1秒定时TICK。
那么假设已知外部晶振=16MHz,怎样配置宏定义,使得HC32F030芯片的系统时钟为48MHz呢 本帖最后由 nongfuxu 于 2021-4-8 10:17 编辑
找到设置系统频率代码。
///< 开启需要使用的各个外设的时钟
///< 开启GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 开启FLASH外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);
///< 因将要倍频的PLL作为系统时钟HCLK会达到48MHz:所以此处预先设置FLASH 读等待周期为1 cycle(默认值为0 cycle)
Flash_WaitCycle(FlashWaitCycle1);
///< 时钟初始化前,优先设置要使用的时钟源:此处配置PLL
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz); //PLL使用RCH作为时钟源,因此需要先设置RCH
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; //RCH 4MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz;//PLL 输出48MHz
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
stcPLLCfg.enPllMul = SysctrlPllMul12; //4MHz x 12 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
本帖最后由 nongfuxu 于 2021-4-8 10:19 编辑
///< 开启需要使用的各个外设的时钟
///< 开启GPIO外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
///< 开启FLASH外设时钟
Sysctrl_SetPeripheralGate(SysctrlPeripheralFlash, TRUE);
///< 因将要倍频的PLL作为系统时钟HCLK会达到48MHz:所以此处预先设置FLASH 读等待周期为1 cycle(默认值为0 cycle)
Flash_WaitCycle(FlashWaitCycle1);
///< 时钟初始化前,优先设置要使用的时钟源:此处配置PLL
Sysctrl_SetRCHTrim(SysctrlRchFreq4MHz); //PLL使用RCH作为时钟源,因此需要先设置RCH
stcPLLCfg.enInFreq = SysctrlPllInFreq4_6MHz; //RCH 4MHz
stcPLLCfg.enOutFreq = SysctrlPllOutFreq36_48MHz;//PLL 输出48MHz
stcPLLCfg.enPllClkSrc = SysctrlPllRch; //输入时钟源选择RCH
stcPLLCfg.enPllMul = SysctrlPllMul12; //4MHz x 12 = 48MHz
Sysctrl_SetPLLFreq(&stcPLLCfg);
///< 选择PLL作为HCLK时钟源;
stcCfg.enClkSrc= SysctrlClkPLL;
///< HCLK SYSCLK/2
stcCfg.enHClkDiv = SysctrlHclkDiv1;
///< PCLK 为HCLK/8
stcCfg.enPClkDiv = SysctrlPclkDiv1;
///< 系统时钟初始化
Sysctrl_ClkInit(&stcCfg);
nongfuxu 发表于 2021-4-8 10:17
你这段是从RCH 4M倍频到PLL48M的代码,
如果是用外部的16M,首先需要修改XTH的宏定义值,在common文件夹的某个头文件里
然后按照手册步骤或者sysctrl的例子切换 martinhu 发表于 2021-4-8 14:08
你这段是从RCH 4M倍频到PLL48M的代码,
如果是用外部的16M,首先需要修改XTH的宏定义值,在common文件夹 ...
具体改那个宏定义? 不同DDL库的名字可能不一样,你找到sysctrl的库里面看看,有可能是SYSTEM_XTH这个名字 加一下技术QQ 1593449604 配系统时钟最重要 了 你要看懂代码和PLL倍频关系 配置系统时钟
页:
[1]