OpenEdv-开源电子网

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

求助:STM32F4外部低速晶振LSE不起振问题

[复制链接]

11

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-5-15
在线时间
34 小时
发表于 2022-11-29 10:34:05 | 显示全部楼层 |阅读模式
  求助: STM32F4外部低速晶振LSE不起振,通过测试,卡死在 while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET), 最终会return HAL_TIMEOUT;求助这是什么原因导致呢?
  还有求教32.768KHZ外部低速晶振,是上电就会震荡嘛,晶振震荡和软件有没有配置没关系吧?
卡死程序如下:
/* Set the new LSE configuration -----------------------------------------*/
    __HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
    /* Check the LSE State */
    if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
    {
      /* Get Start Tick*/
      tickstart = HAL_GetTick();

      /* Wait till LSE is ready */
      while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
      {
        if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
        {
          return HAL_TIMEOUT;
        }
      }
    }

由下面函数调用:
void SystemClock_HSI_LSE_Init(u32 pllm,u32 plln,u32 pllp,u32 pllq)
{
  HAL_StatusTypeDef ret = HAL_OK;
  RCC_OscInitTypeDef RCC_OscInitStructure;
  RCC_ClkInitTypeDef RCC_ClkInitStructure;
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};//add 20220629

  __HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟
  //下面这个设置用来设置调压器输出电压级别,以便在器件未以最大频率工作
  //时使性能与功耗实现平衡。
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);//设置调压器输出电压级别1
  //RCC_OscInitStructure.OscillatorType=RCC_OSCILLATORTYPE_HSE;    //时钟源为HSE
  RCC_OscInitStructure.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSE;//add 20220629 增加LSI,用于RTC时钟;替换前一句
  RCC_OscInitStructure.LSEState = RCC_LSE_ON;//add 20220629 开启LSE
  RCC_OscInitStructure.LSIState = RCC_LSI_OFF;//add 20220629 关闭LSI
  RCC_OscInitStructure.HSEState = RCC_HSE_OFF;     //关闭HSE 20221028
  RCC_OscInitStructure.HSIState = RCC_HSI_ON;    //打开HSI 20221028
  RCC_OscInitStructure.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; // 20221028
  RCC_OscInitStructure.PLL.PLLState = RCC_PLL_ON;//打开PLL
  RCC_OscInitStructure.PLL.PLLSource = RCC_PLLSOURCE_HSI;//PLL时钟源选择HSI
  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);
程序开始在,  if(ret!=HAL_OK) while(1);


附录硬件图:



1.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-5-15
在线时间
34 小时
 楼主| 发表于 2022-11-30 09:41:25 | 显示全部楼层
问题已找到,贴片厂匹配电容贴错!!
回复 支持 反对

使用道具 举报

5

主题

179

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
8195
金钱
8195
注册时间
2016-9-7
在线时间
1113 小时
发表于 2022-12-1 09:09:40 | 显示全部楼层
这个自问自答好,给类似问题的人以提示
回复 支持 反对

使用道具 举报

17

主题

161

帖子

0

精华

高级会员

Rank: 4

积分
955
金钱
955
注册时间
2022-7-21
在线时间
446 小时
发表于 2022-12-1 09:44:32 | 显示全部楼层
lrzxc 发表于 2022-12-1 09:09
这个自问自答好,给类似问题的人以提示

好像真的是哦
回复 支持 反对

使用道具 举报

16

主题

146

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7130
金钱
7130
注册时间
2015-1-23
在线时间
105 小时
发表于 2023-4-19 17:31:49 | 显示全部楼层
我遇到的现象是, 在完全断电的情况下,  重上电,  程序在while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)一直延迟几秒,  然后进入主程序,  在此状态下, 手动复位, 程序不延时, 正常运行.  找了三天, 确定是LSE起振有问题,  换了匹配电容12.5 时间只是缩短了, 还是不正常.  改用LSI了, 40khz.  程序正常运行
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-19 14:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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