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

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

3天内不再提示

GD32固件库里时钟配置时的神秘代码?高频切低频时芯片会发生什么

聚沃科技 2024-02-19 09:44 次阅读

在GD固件库的时钟配置函数里看到这样一段神秘代码,研究分析后不得不佩服原厂固件库里的细节处理:

wKgaomXSsi-AVO_DAAA83Hgi63o377.png

查看定义是一段代码,对AHB 2分频后延时了一段时间:

wKgZomXSsjSAbukpAAAIJccqiQA616.png

在这段代码后面可以看到程序将RCU_CFG0和RCU_CFG1两个时钟寄存器做了复位:

wKgaomXSsjmATD1PAAAJ25c3gug851.png

如果是程序复位启动后第一次执行这段代码,应该是没有什么意义的,但产品设计时一般都会有一个BootLoader和APP两段程序,当BootLoader跳转到APP时,MCU的时钟已经处于一个高频状态,直接执行RCU的复位意味着时钟会立刻切到内部8M运行。

而通过查看DATASHEET,可以看到MCU在最大主频下和默认复位主频下的电流差距是很大的:

wKgZomXSsj6AfnAwAAA7LoorJ9c450.png

wKgaomXSskOAEYDBAAA7u6RsHQM877.png

这样的内部电流瞬间变化一般会导致内部电源的波动,这种波动情况下执行的指令是不可靠的,如果硬件设计时MCU去耦电容设计不合理,很可能加剧这个波动,此时如果指令错误了那很可能会跑飞进入hardfault。

而GD固件库里这个神秘代码,在高频的情况下可以将系统时钟降低一半并延时等待稳定,最后再复位时钟寄存器降到8M的系统时钟。这样就让电流变化有一个过渡,避免了内部电源波动过大。

wKgaomXSskOAEYDBAAA7u6RsHQM877.png

——>

wKgaomXSsk6AGo8-AAA9-GMILY0893.png

——>

wKgaomXSslSAZEkGAAA2s0lsMKs854.png

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

    关注

    455

    文章

    50791

    浏览量

    423491
  • 单片机
    +关注

    关注

    6036

    文章

    44557

    浏览量

    635115
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17143

    浏览量

    351138
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24346
收藏 人收藏

    评论

    相关推荐

    在调试GD32芯片时遇到了时钟配置错误的问题

    在调试GD32芯片时遇到了时钟配置错误的问题,仔细研究文档和网上资料,认真调试之后做了以下总结,希望能帮到同样有类似困惑的你。**1.认识时钟
    发表于 07-23 10:06

    STM32移植到GD32,将内部时钟切换为外部时钟后无法运行的问题分析 精选资料分享

    1. 前言作者之前用过GD32芯片,也成功移植过STM32代码GD32芯片,但最近移植一份STM32
    发表于 08-12 08:11

    GD32芯片包添加步骤有哪些

    **GD32芯片包添加步骤**GD32开发环境可以有多个选择,常见的开发编译环境有:Keil4,keil5,IAR。本教程针对keil5如何添加GD32系列mcu
    发表于 11-22 08:30

    分享在STM32代码移植到GD32上时SPI部分出现的问题

    赘述。问题:同样的代码在STM32上运行SPI读数据没有任何问题,但是修改芯片后移植到GD32上就出现SPI读不到数据的问题.解决方法:GD32中SPI输入部分的IO口必须
    发表于 01-26 08:05

    GD32系列总结

    GD32系列总结 - 时钟树总结及CubeMX生成代码写在前面时钟树HSE振荡器时钟(高速外部时钟
    发表于 02-11 07:11

    GD32 MCU原理及固件库开发指南》 + 初读感悟

    库开发能够避免每次操作寄存器时去查芯片的应用手册,这样能很好地提高开发效率。GD32 MCU原理固件库开发指南这本书它详细描述了基本所有外设的底层驱动程序和API接口,可以让我快速地明白各个API函数
    发表于 03-31 22:11

    GD32 MCU原理及固件库开发指南》+读后感

    、调试工具,再到库函数的使用、各个外设的程序实现,不仅有原理的介绍,还有实践的历程。这本书聚焦在GD32 MCU基本原理和固件库上,重点在于对固件库API的介绍,供了大量实例代码,这些
    发表于 06-06 21:52

    gd32和stm32的固件可以通用吗?

    请问gd32和stm32的固件可以通用吗,或者stm32兼容国产哪些单片机
    发表于 09-20 06:01

    GD32GD32读取ADC数据

    GD32的ADC有很多模式,这里教大家使用最简单的软件触发读取ADC,我使用的芯片GD32F350K8U6使用步骤1.初始化IO引脚设置为模拟输入模式2.初始ADC时钟
    发表于 12-02 15:06 28次下载
    【<b class='flag-5'>GD32</b>】<b class='flag-5'>GD32</b>读取ADC数据

    STM32移植到GD32,将内部时钟切换为外部时钟后无法运行的问题分析

    1. 前言作者之前用过GD32芯片,也成功移植过STM32代码GD32芯片,但最近移植一份STM32
    发表于 12-02 15:36 17次下载
    STM32移植到<b class='flag-5'>GD32</b>,将内部<b class='flag-5'>时钟</b>切换为外部<b class='flag-5'>时钟</b>后无法运行的问题分析

    GD32系列总结 - 时钟树总结及CubeMX生成代码

    GD32系列总结 - 时钟树总结及CubeMX生成代码写在前面时钟树HSE振荡器时钟(高速外部时钟
    发表于 12-08 11:06 15次下载
    <b class='flag-5'>GD32</b>系列总结 - <b class='flag-5'>时钟</b>树总结及CubeMX生成<b class='flag-5'>代码</b>

    使用STM32固件库开发GD32 汇总

    文章目录GD32与STM32异同1. 相同点2. 外围硬件区别3. 内部结构差别4. 功耗区别(以128k以下容量的作为参考)5. 内部FLASH 区别使用STM32库开发时钟配置区别1. 晶振起振
    发表于 12-27 18:38 23次下载
    使用STM32<b class='flag-5'>固件</b>库开发<b class='flag-5'>GD32</b> 汇总

    GD32107C芯片RTC时钟代码

    GD32107C芯片-RTC时钟代码
    发表于 10-08 14:57 1次下载

    gd32和stm32程序可以互用吗?

    gd32和stm32程序可以互用吗? GD32和STM32是两种不同的芯片系列,相同点是都属于ARM Cortex-M系列芯片。虽然它们有相似的架构和指令集,但是由于它们来自不同的厂商
    的头像 发表于 08-16 11:32 3838次阅读