【marlin学习】STM32 Flash 被锁,如何在PlatformIO中更改外部晶振频率值?

问题描述: 程序在开发板上可以正常运行,在新作的板子上无法正常运行。
新板子只要烧录该程序,就会频繁报错“Error: timed out while waiting for target halted”,之后再也无法擦除和修改程序。只能通过修改bootloader模式重新擦除和修改程序。
经查找发现,程序配置的外部晶振值与开发板一致,但是与新作的板子不一致,从而导致新作的板子时钟超频Flash被锁。

解决方法: 需要修改工程内的时钟配置信息。

问题描述: platformIO 不像 STM32Cube 可以图形化配置时钟,也没有明显的配置头文件可以直接修改HSE_VALUE,如何修改stm32+Arduino工程的时钟配置 ?

探索解决方法:

  • 1.stm32 arduino 是在哪里配置时钟的?又是在哪里定义HSE_VALUE 的?
    每块板子的时钟配置都会有差异,查找发现,该时钟配置是在对应板子下的“variant.cpp”文件内。
    在这里插入图片描述
    查找发现,该工程调用了一个共用的库“framework-arduinostm32“,这个是platformIO在建立工程的时候自动下载的库文件。
    具体文件如图所示:
    在这里插入图片描述

  • 2.是否直接修改 hal_conf_default.h 文件的宏定义值就可以解决问题呢?
    实际测试可以解决该问题(注意,如果只更改HSE_VALUE,没有变更PLLM: Division factor for PLL VCO input clock,那么系统的时钟也是不正确的,所以要注意这两个值同时改)。
    很显然,被修改的这个是一个共用的文件,共享给多个不同的工程使用;如果我随意更改他,那么我的其他工程也会受到影响,牵一发而动全身,显然这种做法并不可行。

  • 3.那该如何修改这个宏定义,才能够在不需要改动 hal_conf_default.h 文件的情况下,又可以让该工程正常运行?
    正确做法是重新定义,而不是直接修改。
    PlatformIO建立工程的时候,会根据选择的board而调用对应的variant文件。因此,针对与这块新板子而言,应该直接将宏定义放在对应板子的variant.h文件中。
    在这里插入图片描述
    4.有没有更好的方法来解决这个时钟配置的问题?
    同一块板子,不同的工程,有可能会应用不同的时钟频率要求,是否可以Overload “SystemClock_Config”函数来重新配置时钟呢?

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值