找回密码
 立即注册

只需一步,快速开始

搜索

【FM33LG0开发板】分享一个FM33LG0X的外置晶振PLL倍频64MHz的工程

0
回复
1733
查看
[复制链接]

166

主题

343

帖子

3076

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3076
QQ
2022-1-7 17:17:58 显示全部楼层 |阅读模式
【开发板】分享一个FM33LG0X的外置晶振PLL倍频64MHz的工程

官方提供的FM33LG0X例程,时钟源都是基于内部RC振荡器,默认主频为8Mhz,最多可以设置为32Mhz。
  1. FL_CMU_RCHF_FREQUENCY_8MHZ

  2.         FL_CMU_RCHF_FREQUENCY_16MHZ

  3.         FL_CMU_RCHF_FREQUENCY_24MHZ

  4.         FL_CMU_RCHF_FREQUENCY_32MHZ
复制代码
用户手册描述FM33LG0X的CPU 和总线最高频率 64MHz。我们可以通过PLL将外部的8M晶振倍频到64MHz.
  1. void Set_Clock_64MHZ()

  2. {



  3.     //PC2:XTHIN   PC3:XTHOUT   

  4.     FL_GPIO_InitTypeDef GPIO_InitStruct = {0};

  5.    

  6.     GPIO_InitStruct.pin = FL_GPIO_PIN_2|FL_GPIO_PIN_3;

  7.     GPIO_InitStruct.mode = FL_GPIO_MODE_ANALOG;

  8.     GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_PUSHPULL;

  9.     GPIO_InitStruct.pull = FL_DISABLE;

  10.     GPIO_InitStruct.remapPin = FL_DISABLE;

  11.     FL_GPIO_Init(GPIOC, &GPIO_InitStruct);

  12.       

  13.     //使能XTHF

  14.     FL_CMU_XTHF_Enable();

  15.     FL_CMU_XTHF_WriteDriverStrength(7);   

  16.     FL_DelayMs(2);

  17.     while (!FL_CMU_XTHF_IsEnabled());



  18.     //FLASH 等待周期为1

  19.     FL_FLASH_SetReadWait(FLASH, FL_FLASH_READ_WAIT_2CYCLE);

  20.    

  21.     FL_CMU_SetSystemClockSource(FL_CMU_SYSTEM_CLK_SOURCE_XTHF);

  22.    

  23.    // // 初始化时钟:启用PLL,以64M主频运行

  24.    

  25.     FL_CMU_PLL_SetClockSource(FL_CMU_PLL_CLK_SOURCE_XTHF);

  26.     FL_CMU_PLL_SetPrescaler(FL_CMU_PLL_PSC_DIV8); //8分频为1M

  27.     FL_CMU_PLL_WriteMultiplier(64 - 1);; //倍频64M

  28.     FL_CMU_PLL_Enable();



  29.     while (!FL_CMU_IsActiveFlag_PLLReady());  //等待建立

  30.    

  31.     FL_CMU_SetSystemClockSource(FL_CMU_SYSTEM_CLK_SOURCE_PLL);

  32.     FL_CMU_SetAHBPrescaler(FL_CMU_AHBCLK_PSC_DIV1);

  33.     FL_CMU_SetAPBPrescaler(FL_CMU_APBCLK_PSC_DIV1);



  34. }
复制代码
外部高速晶振XTHF上电后默认关闭。上电复位完成后,软件可以根据需要打开XTHF。由于晶振引脚与GPIO复用,软件使能XTHF前,需要将PC2和PC3引脚配置为模拟功能。

8MHz的的外部时钟,需要经过分频等到1MHZ的时钟,然后输入PLL,PPL在进行64倍的倍频,即可得到64MHz的主频。


需要注意的是,在使能XTHF之后,需要延时几毫秒,以让时钟信号稳定。FL_DelayMs(2)不能缺,否者外部时钟开启会失败(耗费了我一下午找bug,然后系统会自动选择RCHF 8MHZ作为时钟源。
main()函数中打印SystemClock的值
1111.jpg

基于IAR8.2的工程


FM33LG0_PLL_64MHz_IAR8.2.zip (346.65 KB, 下载次数: 176)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

返回顶部