0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分享一种STM32F407的锁相环PLL重新配置方法

冬至子 来源:技术老农的工作台 作者:技术老农 2023-10-30 17:30 次阅读

老农最近搞基于STM32F407的IAP升级固件升级功能,遇到了这样一个问题:IAP引导程序和APP程序都是基于STM32CUBEMX的程序模板生成,单独调试运行APP功能也都正常,但是只要采用IAP方式将APP程序的bin文件烧写到程序存储区,再跳转到APP的地址运行就死掉了。

这个问题困扰了老农挺长时间,后来才发现问题所在:那就是STM32系列的单片机一旦完成PLL时钟设置后,是不能再次配置的。

本例中IAP引导程序首先对PLL进行了成功配置,当跳转到APP程序运行后,APP程序初始化部分又对PLL进行了一次配置,结果配置失败,因为程序是基于STM32CUBEMX的模板,配置失败后调用模板的Error_Handler()函数,该函数原型如下:

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

可以看到,函数内部会先禁止中断,然后就进入死循环。这就是为什么程序每次跳转到APP后死掉的原因。

搞清楚了问题所在,就有针对性的解决方法:一是偷懒的方法,将Error_Handler()函数的内部功能全部屏蔽,这样即使PLL配置出错,也能跳过去,但是必须要保证IAP引导程序和APP程序的时钟配置完全一致,否则还是会出问题。二是想办法重新配置PLL,这样即使IAP引导程序和APP程序的时钟配置不一致,程序也能顺利运行。

要想重新配置STM32的PLL,通过查阅相关资料,发现STM32的PLL一旦使能后配置参数便不能更改,除非在下次重新启动时再次配置相关参数。这样就成死循环了,似乎只能采用前面说的第一种方法了。

老农不死心,继续研究参考手册,发现有这么一段话:

The three PLLs are disabled by hardware when entering Stop and Standby modes, or when
an HSE failure occurs when HSE or PLL (clocked by HSE) are used as system clock.

重点在第一句,在进入停止或待机模式时PLL可以由硬件禁止。这样的话我们就可以在APP程序的时钟初始化之前首先设置STM32进入停止或待机模式,然后再唤醒,并重新对PLL时钟进行配置。

通过研究STM32的停止模式和待机模式,可以知道其进入和退出方式有一定差异,如下所示:

图片

图片

另外如果进入待机模式,退出后除备份区域和待机电路中的寄存器外,其他SRAM和寄存器内容全部丢失,程序将按照复位后的方式重新执行,这个并不是我们的初衷。如果每次唤醒都相当于重启,那我们的程序就进入死循环了。

老农结合自己的实际硬件,正好在某个管脚上有一个外部I2C设备输入方波可以用来做为唤醒源,选用停止模式。具体代码如下:

HAL_Init();
  IIC_Init();          //外部设备初始化
  SetCLKOandSQW(0,F1Hz,S_1Hz);   //使能外部器件方波输出
  HAL_NVIC_EnableIRQ(EXTI9_5_IRQn);  //使能方波输入管脚中断 
  HAL_PWR_EnterSTOPMode(PWR_MAINREGULATOR_ON, PWR_STOPENTRY_WFI);  //进入停止模式
  Stm32_Clock_Init(168,6,2,7);  //重新配置PLL并使能
  HAL_NVIC_DisableIRQ(EXTI9_5_IRQn);  //关闭方波输入管脚中断

为了验证效果,将Error_Handler函数中的死循环重新打开,再次烧写新的APP程序,这次APP能够正常运行,这说明通过采用进入停止模式再重新配置PLL时钟是可行的。

采用这种方法确实可以解决PLL的重配置,但是需要结合自己的硬件考虑是否具备唤醒停止模式或待机模式的能力。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 锁相环
    +关注

    关注

    35

    文章

    577

    浏览量

    87626
  • 寄存器
    +关注

    关注

    31

    文章

    5268

    浏览量

    119640
  • STM32F407
    +关注

    关注

    15

    文章

    187

    浏览量

    29288
  • PLL电路
    +关注

    关注

    0

    文章

    92

    浏览量

    6379
  • stm32cubemx
    +关注

    关注

    5

    文章

    280

    浏览量

    14682
收藏 人收藏

    评论

    相关推荐

    STM32F407可以实现数字锁相环功能吗?

    咨询STM32F407可以实现数字锁相环功能吗,在实现中怎么设置PLL倍频
    发表于 07-04 07:32

    一种宽频率范围的CMOS锁相环(PLL)电路应用设计

    本文设计了一种宽频率范围的CMOS锁相环(PLL)电路,通过提高电荷泵电路的电流镜镜像精度和增加开关噪声抵消电路,有效地改善了传统电路中由于电流失配、电荷共享、时钟馈通等导致的相位偏差问题。设计了
    发表于 07-08 07:37

    LabVIEW锁相环PLL

    LabVIEW锁相环PLL锁相环一种反馈电路,其作用是使得电路上的时钟和某外部时钟的相位同步。
    发表于 05-31 19:58

    锁相环原理

    锁相环原理 锁相环路是一种反馈电路,锁相环的英文全称是Phase-Locked Loop,简称PLL。其作用是使得电路上的时钟和某
    发表于 08-21 14:46 5135次阅读

    锁相环(PLL),锁相环(PLL)是什么意思

    锁相环(PLL),锁相环(PLL)是什么意思 PLL的概念 我们所说的PLL。其
    发表于 03-23 10:47 6109次阅读

    锁相环(PLL)电路设计与应用

    本书是图解电子工程师实用技术丛书之,本书主要介绍锁相环(PLL)电路的设计与应用,内容包括PLL工作原理与电路构成、PLL电路的传输特性、
    发表于 09-14 17:55 0次下载
    <b class='flag-5'>锁相环</b>(<b class='flag-5'>PLL</b>)电路设计与应用

    锁相环

    锁相环英文为PLL,即PLL锁相环。可以分为模拟锁相环和数字锁相环。两
    发表于 10-26 12:40
    <b class='flag-5'>锁相环</b>

    锁相环PLL的设计方法和调试说明

    设计并调试锁相环PLL)电路可能会很复杂,除非工程师深入了解PLL理论以及逻辑开发过程。本文介绍PLL设计的简易方法,并提供有效、符合逻辑
    发表于 10-13 10:43 12次下载
    <b class='flag-5'>锁相环</b><b class='flag-5'>PLL</b>的设计<b class='flag-5'>方法</b>和调试说明

    STM32F407的串口UART 基础配置STM32CubeMX

    STM32F407的串口UART 基础配置STM32CubeMX
    发表于 11-29 16:06 54次下载
    <b class='flag-5'>STM32F407</b>的串口UART 基础<b class='flag-5'>配置</b><b class='flag-5'>STM32</b>CubeMX

    锁相环(PLL)的工作原理及应用

    锁相环路是一种反馈控制电路,简称锁相环PLL,Phase-Locked Loop)。锁相环的特点是:利用外部输入的参考信号控制环路内部振荡
    的头像 发表于 03-29 09:54 1.3w次阅读

    pll锁相环倍频

    PLL锁相环倍频是一种用于改变输入信号频率的技术,它可以将输入信号的频率放大或缩小,以达到某种特定的目的。
    发表于 02-14 15:56 2750次阅读

    pll是什么意思_pll锁相环参数

     PLL是指锁相环,是一种用于控制频率和相位的电路,它可以将个输入信号的频率和相位转换成另个输出信号的频率和相位,从而实现频率和相位的控
    发表于 02-14 17:19 1w次阅读

    pll锁相环倍频的原理

    pll锁相环倍频的原理  PLL锁相环倍频是一种重要的时钟信号处理技术,广泛应用于数字系统、通信系统、计算机等领域,具有高可靠性、高精度、快
    的头像 发表于 09-02 14:59 2511次阅读

    pll锁相环的作用 pll锁相环的三配置模式

    pll锁相环的作用 pll锁相环的三配置模式  PLL
    的头像 发表于 10-13 17:39 3002次阅读

    锁相环(PLL)基本原理 当锁相环无法锁定时该怎么处理的呢?

    锁相环(PLL)基本原理 当锁相环无法锁定时该怎么处理的呢? 锁相环(Phase Locked Loop, PLL)是
    的头像 发表于 10-23 10:10 2694次阅读