上面的寄存器配置方式是例子中的,例子未能使用库函数配置。我查找库函数找到了一条说明与上面寄存器配置说明一样的函数,不知道是否是一样的。
另外看,库函数包含了寄存器的这四条操作内容,但是多了一些其他的考虑,是否说,库函数做的更加保险?
- void CLK_SetHCLK(uint32_t u32ClkSrc, uint32_t u32ClkDiv)
- {
- uint32_t u32HIRCSTB;
- /* Read HIRC clock source stable flag */
- u32HIRCSTB = CLK->CLKSTATUS & CLK_CLKSTATUS_OSC22M_STB_Msk;
- /* Switch to HIRC for Safe. Avoid HCLK too high when applying new divider. */
- CLK->PWRCON |= CLK_PWRCON_OSC22M_EN_Msk;
- CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);
- CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | CLK_CLKSEL0_HCLK_S_HIRC;
- /* Apply new Divider */
- CLK->CLKDIV = (CLK->CLKDIV & (~CLK_CLKDIV_HCLK_N_Msk)) | u32ClkDiv;
- /* Switch HCLK to new HCLK source */
- CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLK_S_Msk)) | u32ClkSrc;
- /* Update System Core Clock */
- SystemCoreClockUpdate();
- /* Disable HIRC if HIRC is disabled before switching HCLK source */
- if(u32HIRCSTB == 0)
- CLK->PWRCON &= ~CLK_PWRCON_OSC22M_EN_Msk;
- }
复制代码
|
|