qinyunti 发表于 2022-12-15 11:46

【ST NUCLEO-U575ZI-Q 测评 】时钟配置-超个频

<div class='showpostmsg'><h1><b>前言</b></h1>

<p >默认芯片复位后以4MHz内部时钟运行,为了以高性能运行,我们需要配置系统时钟按照最大时钟频率运行。本篇测试RCC时钟配置,并进行超频测试。</p>

<p >&nbsp;</p>

<h1 ><b>过程</b></h1>

<h2 ><b>RCC模块</b></h2>

<p >参考手册的《11 Reset and clock control (RCC)》</p>

<p >从原理图可知没有焊接HSE晶振,所以只能使用内部的。</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >Figure 33. Clock tree可以看时钟树结构。</p>

<p >我们选择HSI RC16 MHz作为系统时钟。</p>

<p > &nbsp;</p>

<h2 ><b>PLL设置</b></h2>

<p >见《11.4.6 PLL》</p>

<p > &nbsp;</p>

<p >最大输出时钟</p>

<p >系统最大时钟为160MHz</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >PLL的输入4~&nbsp;16 MHz ,我们这里选择16M的HSI</p>

<p >&nbsp;</p>

<p >计算公式</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >PLLM:可设置值1~63</p>

<p >分频值,PLL的输入时钟比如16MHz/PLLM作为VCO的输入,VCO的输入必须是1~16MHz</p>

<p >所以我们这里设置为1</p>

<p >&nbsp;</p>

<p >PLLN:可设置值4~512</p>

<p >倍频值,VCO的输入x PLLN为VCO的输出,</p>

<p >VCO的输出最大值和电压范围对应</p>

<p >范围1 ,2则最大128~544MHz</p>

<p >范围3 则最大128~330MHz</p>

<p >为了最高性能需要使用电压等级1,设置PLLN=20</p>

<p >&nbsp;</p>

<p >PLLP:1~128</p>

<p >PLLQ:1~128</p>

<p >PLLR:1和偶数值</p>

<p >&nbsp;</p>

<h2 ><b>电压等级,FLASH等待周期设置</b></h2>

<p >必须设置电压等级为1,否则高频运行会异常。</p>

<p >LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_PWR);</p>

<p >HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);</p>

<p >&nbsp;</p>

<p >FLASH等待周期也要设置为4以上。</p>

<p >HAL_RCC_ClockConfig(&amp;pRCC_ClkInitStruct, FLASH_LATENCY_4);</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >FLASH等待周期与主频,电压等级的关系,最大160MHz,电压等级1时需要配置最少4WS。</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >总的代码如下</p>

<div class="parsedown-markdown">
<p>#include &quot;stm32u575xx.h&quot;</p>

<p >#include &quot;stm32u5xx_ll_gpio.h&quot;</p>

<p >#include &quot;stm32u5xx_ll_bus.h&quot;</p>

<p >&nbsp;</p>

<p >void SysTick_Handler(void)</p>

<p >{</p>

<p >static volatile uint32_t num = 0;</p>

<p >if(num++ &gt;= 1000)</p>

<p >{</p>

<p >LL_GPIO_TogglePin(GPIOB, 1u&lt;&lt;7);</p>

<p >LL_GPIO_TogglePin(GPIOC, 1u&lt;&lt;7);</p>

<p >num=0;</p>

<p >}</p>

<p >HAL_IncTick();</p>

<p >}</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >void delay(uint32_t t)</p>

<p >{</p>

<p >volatile uint32_t timeout = t;</p>

<p >while(t--);</p>

<p >}</p>

<p >&nbsp;</p>

<p >int main(void)</p>

<p >{</p>

<p >#if 1</p>

<p >LL_AHB3_GRP1_EnableClock(LL_AHB3_GRP1_PERIPH_PWR);</p>

<p >HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);</p>

<p >&nbsp;</p>

<p >RCC_OscInitTypeDef pRCC_OscInitStruct;</p>

<p >pRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;</p>

<p >pRCC_OscInitStruct.HSIState = RCC_HSI_ON;</p>

<p >pRCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;</p>

<p >pRCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;</p>

<p >pRCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;</p>

<p >pRCC_OscInitStruct.PLL.PLLM = 1;</p>

<p >pRCC_OscInitStruct.PLL.PLLMBOOST = RCC_PLLMBOOST_DIV1;</p>

<p >pRCC_OscInitStruct.PLL.PLLN = 20;</p>

<p >pRCC_OscInitStruct.PLL.PLLP = 1;</p>

<p >pRCC_OscInitStruct.PLL.PLLQ = 1;</p>

<p >pRCC_OscInitStruct.PLL.PLLR = 2;</p>

<p >pRCC_OscInitStruct.PLL.PLLRGE = RCC_PLLVCIRANGE_0;</p>

<p >pRCC_OscInitStruct.PLL.PLLFRACN = 0; &nbsp;/* */</p>

<p >HAL_RCC_OscConfig(&amp;pRCC_OscInitStruct);</p>

<p >&nbsp;</p>

<p >RCC_ClkInitTypeDef pRCC_ClkInitStruct;</p>

<p >pRCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK;</p>

<p >pRCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;</p>

<p >pRCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;</p>

<p >pRCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;</p>

<p >pRCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;</p>

<p >pRCC_ClkInitStruct.APB3CLKDivider = RCC_HCLK_DIV2;</p>

<p >HAL_RCC_ClockConfig(&amp;pRCC_ClkInitStruct, FLASH_LATENCY_4);</p>

<p >#endif</p>

<p >LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOB); LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOC);</p>

<p >&nbsp;</p>

<p >LL_GPIO_InitTypeDef GPIO_InitStruct;</p>

<p >//LL_GPIO_StructInit(&amp;GPIO_InitStruct);</p>

<p >GPIO_InitStruct.Pin = LL_GPIO_PIN_7;</p>

<p >GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;</p>

<p >GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;</p>

<p >GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;</p>

<p >GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;</p>

<p >GPIO_InitStruct.Alternate = LL_GPIO_AF_0;</p>

<p >LL_GPIO_Init(GPIOB, &amp;GPIO_InitStruct);</p>

<p >&nbsp;</p>

<p >GPIO_InitStruct.Pin = LL_GPIO_PIN_7;</p>

<p >GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;</p>

<p >GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;</p>

<p >GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;</p>

<p >GPIO_InitStruct.Pull = LL_GPIO_PULL_UP;</p>

<p >GPIO_InitStruct.Alternate = LL_GPIO_AF_0;</p>

<p >LL_GPIO_Init(GPIOC, &amp;GPIO_InitStruct);</p>

<p >&nbsp;</p>

<p >HAL_Init();</p>

<p >while(1)</p>

<p >{</p>

<p >///delay(1000000ul);</p>

<p >///LL_GPIO_TogglePin(GPIOB, 1u&lt;&lt;7);</p>

<p >}</p>

<p >}</p>
</div>

<p >&nbsp;</p>

<p >&nbsp;</p>

<h1 ><b>超频测试</b></h1>

<p >160MHz</p>

<p >PLLN设置为20</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >PLLN设置为33, 8*33=264MHz ,FLASH等待时间设置为FLASH_LATENCY_4</p>

<p >此时还能点灯OK,再减小FLASH等待时间或者增加PLLN都会导致运行异常,所以这应该就是极限了。</p>

<p > &nbsp;</p>

<p >可以看出可超频范围还是挺大的,并且在超频后还能保持FLASH等待周期为FLASH_LATENCY_4,说明内部FLASH的读性能也是裕量很大的。</p>

<h1 ><b>总结</b></h1>

<p >以上进行了RCC时钟配置的演示,并且进行了超频测试。不愧是大厂,由160M超频到264M还能工作,且能保持较小的FLASH等待周期。</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

秦天qintian0303 发表于 2022-12-15 12:01

<p>超频稳定性如何?能超多少,有介绍吗</p>

qinyunti 发表于 2022-12-15 13:46

秦天qintian0303 发表于 2022-12-15 12:01
超频稳定性如何?能超多少,有介绍吗

<p>文中测试可以超频到264MHz,FLASH等待周期4,点灯还OK,没有测试其他外设。</p>

<p>没有测试ICACHE,DCACHE使能测试。</p>

okhxyyo 发表于 2023-1-12 09:42

<p>测评汇总:免费申请|ST NUCLEO-U575ZI-Q https://bbs.eeworld.com.cn/thread-1228653-1-1.html</p>
页: [1]
查看完整版本: 【ST NUCLEO-U575ZI-Q 测评 】时钟配置-超个频