本帖最后由 wangjj19950516 于 2021-7-2 17:29 编辑
之前分享过7801的时钟配置,今天调试了一下781x的,分享给大家
一、首先看一下手册说明
781X的系统主频最高可以到100M,有外部高速时钟HSE(4M~30M),内部高速时钟HSI(8M),内部低速时钟LSI(32K)
这里可以清楚看到从输出频率到输出系统时钟的流程以及计算方式
需要特别注意VCO 频率除以 POSDIV 不能高于 400MHz, VCO 的频率范围是 0.5~1.5GHz;
二、外部时钟配置
外接8M晶振,配置系统时钟为96M,APB时钟为48M
配置参数如下:
FBKDIV = 96, PREDIV = 1, 则VCO = 8M*96/1 = 768M(VCO在0.5~1.5GHZ)之间
POSDIV = 4, pll_clk_div =1, sysclk_div =1,则系统时钟频率 = 768M/4/2/1/1 = 96M
APB为系统时钟2分频
void SYS_CLOCK_HSE(void)
{
SPM_EnableXOSC(1); //使能外部XOSC,并等待起振成功
CKGEN_SetPLLReference(PLL_REF_EXTERNAL_OSC);//选择PLL时钟源外部时钟
CKGEN_SetPllPrevDiv(PLL_PREDIV_1); //PREDIV
CKGEN_SetPllPostDiv(PLL_POSDIV_4);//POSDIV
CKGEN_SetPllFeedbackDiv(96); //FBKDIV
CKGEN_SetPllDiv(0);//pll_clk_div
SPM_EnablePLL(1);//使能PLL,并等待PLL时钟准备就绪
CKGEN_SetSysclkDiv(SYSCLK_DIVIDER_1);//sysclk_div
CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//选择系统时钟源为PLL输出时钟
CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//设置APB为系统时钟2分频
}
三、内部时钟配置
采用内部8M晶振,配置系统时钟为90M,APB为45M
FBKDIV = 90, PREDIV = 1, 则VCO = 8M*90/1 = 720M(VCO在0.5~1.5GHZ)之间
POSDIV = 4, pll_clk_div =1, sysclk_div =1,则系统时钟频率 = 720M/4/2/1/1 = 90M
APB为系统时钟2分频void SYS_CLOCK_HSI(void)
{
CKGEN_SetPLLReference(PLL_REF_INTERAL_OSC);//选择PLL时钟源内部时钟
CKGEN_SetPllPrevDiv(PLL_PREDIV_1);//PREDIV
CKGEN_SetPllPostDiv(PLL_POSDIV_4);//POSDIV
CKGEN_SetPllFeedbackDiv(90); //FBKDIV
CKGEN_SetPllDiv(0);//pll_clk_div
SPM_EnablePLL(1);//使能PLL,并等待PLL时钟准备就绪
CKGEN_SetSysclkDiv(SYSCLK_DIVIDER_1);//sysclk_div
CKGEN_SetSysclkSrc(SYSCLK_SRC_PLL_OUTPUT);//选择系统时钟源为PLL输出时钟
CKGEN_SetAPBClockDivider(APBCLK_DIVIDER_2);//设置APB为系统时钟2分频
}
为了验证时钟是否与配置相匹配,开了一个定时器,定时1MS,在中断中翻转IO口,测试时钟正确。
781x_clock.rar
(1.29 MB)
|