[活动专区]

【AT-START-AT32F437测评】+极限超频测试

[复制链接]
391|7
手机看帖
扫描二维码
随时随地手机跟帖
夜声|  楼主 | 2023-1-8 17:21 | 显示全部楼层 |阅读模式
本帖最后由 夜声 于 2023-1-8 17:23 编辑

#申请原创#@21小跑堂
一、前言
在上一篇讲到AT32使用Lua语言开发,使用Lua完成点灯测试,本次计划完成AT32F437ZMT7的极限超频测试。
二、准备
在进行超频前需要准备一个基本工程,使用GPIO点灯工程。
9f831535f77913e06e7a1a2217dc43cf
添加串口Printf打印功能,用于输出芯片内部的系统时钟频率。
bf562f30310f30d9da144b912765c2f8
三、超频方案
方案一:倍频系数调整
使用软件内部倍频功能,这种方式相对比较简单,当需要看官方的库支不支持,查看官方的系统时钟设置函数。
2fd4ea54439315f8811e754af83430c3
可以得到PLL倍频由crm_pll_config函数设置得到。接下来在应用手册中查找PLL时钟输出的计算公式。
e077d9f80e2c6e1acd69d0988f30dd1a
可以看到PLL倍频的时钟频率由晶振,预分频系数分频后的配置值以及PLL倍频系数决定,根据官方的PLL倍频输出,将其他值进行固定,通过调整PLL的倍频系数就可以调整PLL输出的时钟频率。
8d4af8dddf8cd07fe94d18948faeb816
查看PLL倍频系数的值是否可以调整,跳转到crm_pll_config,查看第二个输入值得范围,从下图可以得到倍频系数可以从31调整到500,可以完成极限超频测试。
01c0840c25a238f6e7b8b891087ef05b
方案二:更换晶振
更换外部晶振,在图中可以看到,开发板板载的晶振为8M,封装是5032贴片晶振,更换起来相对比较麻烦,在可以进行芯片内部倍频的方式是不选择更换外部晶振,更换晶振作为备用方案。
bbe3132dab52e34478aae76291220e49
综上所述,选择方案一。
四、极限超频测试
通过上面的描述,超频方法已经确定,现在还需要将超频后的时钟频率的值使用串口输出。
在rm_clocks_freq_get函数中,可以看到超频后的值通过ocks_struct->sclk_freq = (uint32_t)(((uint64_t)pllrcsfreq * pll_ns) / (pll_ms * pll_fr));赋值给了ocks_struct->sclk_freq。
void crm_clocks_freq_get(crm_clocks_freq_type *clocks_struct)
{
  uint32_t pll_ns = 0, pll_ms = 0, pll_fr = 0, pll_clock_source = 0, pllrcsfreq = 0;
  uint32_t temp = 0, div_value = 0;
  crm_sclk_type sclk_source;
  static const uint8_t sclk_ahb_div_table[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
  static const uint8_t ahb_apb1_div_table[8] = {0, 0, 0, 0, 1, 2, 3, 4};
  static const uint8_t ahb_apb2_div_table[8] = {0, 0, 0, 0, 1, 2, 3, 4};
  static const uint8_t pll_fr_table[6] = {1, 2, 4, 8, 16, 32};
  /* get sclk source */
  sclk_source = crm_sysclk_switch_status_get();
  switch(sclk_source)
  {
    case CRM_SCLK_HICK:
      if(((CRM->misc1_bit.hick_to_sclk) != RESET) && ((CRM->misc1_bit.hickdiv) != RESET))
        clocks_struct->sclk_freq = HICK_VALUE * 6;
      else
        clocks_struct->sclk_freq = HICK_VALUE;
      break;
    case CRM_SCLK_HEXT:
      clocks_struct->sclk_freq = HEXT_VALUE;
      break;
    case CRM_SCLK_PLL:
      /* get pll clock source */
      pll_clock_source = CRM->pllcfg_bit.pllrcs;
      /* get multiplication factor */
      pll_ns = CRM->pllcfg_bit.pllns;
      pll_ms = CRM->pllcfg_bit.pllms;
      pll_fr = pll_fr_table[CRM->pllcfg_bit.pllfr];
      if (pll_clock_source == CRM_PLL_SOURCE_HICK)
      {
        /* hick selected as pll clock entry */
        pllrcsfreq = HICK_VALUE;
      }
      else
      {
        /* hext selected as pll clock entry */
        pllrcsfreq = HEXT_VALUE;
      }
      clocks_struct->sclk_freq = (uint32_t)(((uint64_t)pllrcsfreq * pll_ns) / (pll_ms * pll_fr));
  system_clock=clocks_struct->sclk_freq;
      break;
    default:
      clocks_struct->sclk_freq = HICK_VALUE;
      break;
  }
  /* compute sclk, ahbclk, abp1clk and apb2clk frequencies */
  /* get ahb division */
  temp = CRM->cfg_bit.ahbdiv;
  div_value = sclk_ahb_div_table[temp];
  /* ahbclk frequency */
  clocks_struct->ahb_freq = clocks_struct->sclk_freq >> div_value;
  /* get apb1 division */
  temp = CRM->cfg_bit.apb1div;
  div_value = ahb_apb1_div_table[temp];
  /* apb1clk frequency */
  clocks_struct->apb1_freq = clocks_struct->ahb_freq >> div_value;
  /* get apb2 division */
  temp = CRM->cfg_bit.apb2div;
  div_value = ahb_apb2_div_table[temp];
  /* apb2clk frequency */
  clocks_struct->apb2_freq = clocks_struct->ahb_freq >> div_value;
}
定义一个变量将值转出来,uint32_t system_clock;
1460e9744ffe5e2802958f50d1056971
主函数,添加系统时钟频率输出。
f5951a93458885ca5931df92bf329514
查看没调整前的系统时钟频率,默认为288MHZ
c67d42c12bdaacf8fea2ea464b329c60
接下来开始超频测试,取350MHZ,进行测试,心跳灯闪烁继续超频,若心跳灯不闪则证明芯片已经不能工作。
7e42fb9a2dd4c500df7d2412b80554d1
芯片还能工作,继续提高倍频系数,超频到380MHZ
36c8d2c4383dfb69caa2d910158f842e
灯还在工作,串口还在输出,接下来将系统时钟调到400MHZ
48cf07dccb446b5946ed9c2062dfe593
芯片工作正常,继续调整,调整都410MHZ
797448930cb27d71869538f276b8eb29
芯片还在运行,将系统时钟频率调整到420MHZ
0f6a3dbb26b8e071e5154133529b7333
将系统时钟频率调整到420MHZ时,串口没有输出,LED灯熄灭,不在闪烁。证明AT32F437ZMT7的极限频率在410MHZ~420MHZ之间,测试414MHZ,芯片还是死机。
继续测试412MHZ,程序下载到芯片中,发现LED闪烁,串口继续输出,即AT32F437ZMT7的极限频率为412MHZ。
e9ad76922af3366d3a79dc24a689ed79
五、总结
本次测试完成AT32F437ZMT7的极限超频测试,采用的是修改PLL倍频系数的方法,得到AT32F437ZMT7的极限频率为412MHZ。

使用特权

评论回复
belindagraham| | 2023-1-9 10:52 | 显示全部楼层
这个正常的频率是多少?              

使用特权

评论回复
评论
夜声 2023-1-9 23:19 回复TA
288MHZ 
claretttt| | 2023-1-9 11:02 | 显示全部楼层
AT32F437的性能真是强大呢。

使用特权

评论回复
lihuami| | 2023-1-9 12:13 | 显示全部楼层
这个最大的主频是多少?              

使用特权

评论回复
评论
夜声 2023-1-9 23:20 回复TA
官方说的是288MHZ,我超到了412MHZ 
mikewalpole| | 2023-1-10 19:29 | 显示全部楼层
超频以后稳定吗?              

使用特权

评论回复
Bowclad| | 2023-2-7 19:00 | 显示全部楼层
超频估计不稳

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则