STM32F429IGT6频率设定超150Mhz死机

2019-07-20 06:05发布

现象如题,自己画的板子,现运行以下最简单程序,超过150Mhz,就一直进Hard_fault,有大神遇到过这类问题吗?Stm32_Clock_Init用的是原子的程序。也不是第一次用stm32f429了,以前都这么用,都没问题,难道是硬件问题?晶振用的是25M晶振
#include "sys.h"

unsigned int i = 0, j = 0;

void Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq)
{
    HAL_StatusTypeDef ret = HAL_OK;
    RCC_OscInitTypeDef RCC_OscInitStructure;
    RCC_ClkInitTypeDef RCC_ClkInitStructure;

    __HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟

    //下面这个设置用来设置调压器输出电压级别,以便在器件未以最大频率工作
    //时使性能与功耗实现平衡,此功能只有STM32F42xx和STM32F43xx器件有,
    __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);//设置调压器输出电压级别1

    RCC_OscInitStructure.OscillatorType = RCC_OSCILLATORTYPE_HSE;    //时钟源为HSE
    RCC_OscInitStructure.HSEState = RCC_HSE_ON;                      //打开HSE
    RCC_OscInitStructure.PLL.PLLState = RCC_PLL_ON;//打开PLL
    RCC_OscInitStructure.PLL.PLLSource = RCC_PLLSOURCE_HSE;//PLL时钟源选择HSE
    RCC_OscInitStructure.PLL.PLLM = pllm; //主PLL和音频PLL分频系数(PLL之前的分频),取值范围:2~63.
    RCC_OscInitStructure.PLL.PLLN = plln; //主PLL倍频系数(PLL倍频),取值范围:64~432.  
    RCC_OscInitStructure.PLL.PLLP = pllp; //系统时钟的主PLL分频系数(PLL之后的分频),取值范围:2,4,6,8.(仅限这4个值!)
    RCC_OscInitStructure.PLL.PLLQ = pllq; //USB/SDIO/随机数产生器等的主PLL分频系数(PLL之后的分频),取值范围:2~15.
    ret = HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化
    if(ret!=HAL_OK) while(1);

    ret=HAL_PWREx_EnableOverDrive(); //开启Over-Driver功能
    if(ret!=HAL_OK) while(1);

    //选中PLL作为系统时钟源并且配置HCLK,PCLK1和PCLK2
    RCC_ClkInitStructure.ClockType = (RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStructure.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;//设置系统时钟时钟源为PLL
    RCC_ClkInitStructure.AHBCLKDivider = RCC_SYSCLK_DIV1;//AHB分频系数为1
    RCC_ClkInitStructure.APB1CLKDivider = RCC_HCLK_DIV4; //APB1分频系数为4(即PCLK1)
    RCC_ClkInitStructure.APB2CLKDivider = RCC_HCLK_DIV2; //APB2分频系数为2(即PCLK2)
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_5);//同时设置FLASH延时周期为5WS,也就是6个CPU周期。
               
    if(ret!=HAL_OK) while(1);
}


void SysTick_Handler(void)
{
                HAL_IncTick();
}

int main(void)
{
        HAL_Init();
        Stm32_Clock_Init(310,25,2,8); //155Mhz
        while(1){
                i++;
                if(i == 1000000){
                        i = 0;
                        j++;
                }
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
y309976659
1楼-- · 2019-07-20 06:19
 精彩回答 2  元偷偷看……
wlq390934605
2楼-- · 2019-07-20 08:54
 精彩回答 2  元偷偷看……
正点原子
3楼-- · 2019-07-20 12:11
板子变了?
y309976659
4楼-- · 2019-07-20 16:10
 精彩回答 2  元偷偷看……
y309976659
5楼-- · 2019-07-20 19:56
正点原子 发表于 2018-9-17 02:17
板子变了?

板子照着开发板画的
gotofly21
6楼-- · 2019-07-20 21:05
基本上是cap2的问题

一周热门 更多>