根据手册的时钟顺序,应该是先配置时钟源,是选择内部RC还是选择外部晶振,或者都配置上。
另外就是PLL,使能了PLL的同时要选择PLL从谁那获取PLL的时钟源。
上面对应的就是使能相关的时钟源。
然后就是这个,注意到有个HCLK,CPUCLK,PCLK,这三个都是从同一个地方分出来,其实是同一个时钟到了三个不同的目的地。
其实他们是同一个时钟信号。所以库函数中定义获取这三个时钟的是同一个操作
uint32_t CLK_GetHCLKFreq(void)
{
SystemCoreClockUpdate();
return SystemCoreClock;
}
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] Get PCLK frequency
* @param None
* [url=home.php?mod=space&uid=266161]@return[/url] PCLK frequency
* [url=home.php?mod=space&uid=1543424]@Details[/url] This function get PCLK frequency. The frequency unit is Hz.
*/
uint32_t CLK_GetPCLKFreq(void)
{
SystemCoreClockUpdate();
return SystemCoreClock;
}
/**
* @brief Get CPU frequency
* @param None
* @return CPU frequency
* @details This function get CPU frequency. The frequency unit is Hz.
*/
uint32_t CLK_GetCPUFreq(void)
{
SystemCoreClockUpdate();
return SystemCoreClock;
}
明白了这个就知道如何配置HCLK了,其实就是选择HCLK的时钟源与分频
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC,CLK_CLKDIV_HCLK(1));
最后就是各个模块的时钟使能与配置了。
比如串口0,串口0有三个可选的时钟源,HIRC,HXT,PLL
CLK_EnableModuleClock(UART0_MODULE);
CLK_SetModuleClock(UART0_MODULE,CLK_CLKSEL1_UART_S_HXT,CLK_CLKDIV_UART(1));
|