OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8804|回复: 7

STM32F429使用HAL库的Stm32_Clock_Init()函数无法通过

[复制链接]

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-24
在线时间
8 小时
发表于 2017-12-18 18:49:31 | 显示全部楼层 |阅读模式
10金钱
我自行设计并焊接了STM32F429的电路板,使用Jlink烧录程序没问题,但是如果没有注释掉Stm32_Clock_Init(360,25,2,8); 函数的话,程序会一直无法进行。如果注释掉这一个函数,那么程序可以正常进行,FMC驱动TFTLCD正常,按键检测也正常,但是屏幕刷新速度肉眼看上去有一点点的慢,不知道是什么原因。修改了正点原子哥的代码,把单次判断放到了循环判断内,依旧无法通过。现在不知道是什么原因,求解答!

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.(仅限这四个值!)
    RCC_OscInitStructure.PLL.PLLQ=pllq; //USB/SDIO/随机数产生器等的主PLL分频系数(PLL之后的分频),取值范围:2~15
    ret=HAL_RCC_OscConfig(&RCC_OscInitStructure);//初始化
       
    while(ret!=HAL_OK);         //会在这里卡住

    ret=HAL_PWREx_EnableOverDrive(); //开启Over-Driver功能
    while(ret!=HAL_OK);         //debug跳过上一个卡住的地方后这里也会卡

    //选中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
    RCC_ClkInitStructure.APB2CLKDivider=RCC_HCLK_DIV2; //APB2分频系数为2
    ret=HAL_RCC_ClockConfig(&RCC_ClkInitStructure,FLASH_LATENCY_5);//同时设置FLASH延时周期为5WS,也就是6个CPU周期
               
    while(ret!=HAL_OK);    //这里也会卡住
}

最佳答案

查看完整内容[请看2#楼]

昨天晚上去实验室更换了一个晶振,然后立刻就好了。目前知道了原因是劣质晶振,问题已经解决。感谢原子哥帮顶!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-24
在线时间
8 小时
 楼主| 发表于 2017-12-18 18:49:32 | 显示全部楼层
昨天晚上去实验室更换了一个晶振,然后立刻就好了。目前知道了原因是劣质晶振,问题已经解决。感谢原子哥帮顶!
回复

使用道具 举报

3

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2017-8-24
在线时间
8 小时
 楼主| 发表于 2017-12-18 19:27:30 | 显示全部楼层
/* Wait till HSE is ready */  
        while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
        {
          if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
          {
            return HAL_TIMEOUT;
          }
        }

再次debug之后程序卡在这里,我现在要重新修补一下25MHz的晶振,然后看结果
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2017-12-18 23:59:02 | 显示全部楼层
帮顶
回复

使用道具 举报

16

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
金钱
343
注册时间
2015-12-3
在线时间
55 小时
发表于 2018-4-4 16:14:52 | 显示全部楼层
我也出现这个问题
回复

使用道具 举报

12

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2018-7-15
在线时间
32 小时
发表于 2018-8-2 10:27:01 | 显示全部楼层
老哥你用的是什么晶振啊?我也出现这个问题,还没有解决尼
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
58
金钱
58
注册时间
2018-3-28
在线时间
7 小时
发表于 2019-7-10 10:03:08 | 显示全部楼层
MouseSun 发表于 2018-8-2 10:27
老哥你用的是什么晶振啊?我也出现这个问题,还没有解决尼

搞定了吗
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
16
金钱
16
注册时间
2019-4-23
在线时间
4 小时
发表于 2019-7-26 17:44:37 | 显示全部楼层
我的是贴板时把2.2uF点电容贴成2.2nF的了,也会出现这个问题
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-6 21:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表