嵌入式记录1:STM32G031G8U6芯片踩坑(晶振设计、SWD接口、while循环、us级延时等问题) 最近在给我们组流完的片子设计一个PCB找一个MCU作为控制器与我们的芯片相连对芯片进行控制、数据输入和输出。PCB的面积有要求大概在两个大拇指指甲盖的大小多一点。为了面积需求在立创商场开始挑选起MCU。正好看到了STM32G031G8U6UFQFPN28封装这个芯片面积、flash、引脚和价格都挺合适的遂使用该芯片来设计PCB。在采购物料时遇到了一点小小的阻碍在立创商场提交订单时被要求联系客服处理。原因是有些物料ST、TI、YAGEO和muRata不能开学校的发票不仅是芯片还包括电阻电容学校被狠狠制裁了。下面记录了一些大家在设计和使用该芯片时可能遇到的问题。1、 晶振的设计首先在STM32G031x4/x6/x8数据手册的第5章节电气特性中给出了如下一张图使用了一个无源晶振加上两个电容连接到芯片的两个引脚上。如果你采用如下设计来引入一个高速外部时钟那么大概率会出现问题。因为从数据手册的引脚描述来看PC14和PC15这两个引脚只能够支持低速外部时钟这样设计OSC32_IN和OSC32_OUT分别接入32.768kHz的无源晶振两端即可而不支持这样设计高速时钟OSC_IN只能使用单端的有源晶振输入OSC_EN只是控制有源晶振是否使能。其实大家在用STM32CubeMX的时候配置RCC时也可以发现这一点。1.1 LSE设计有关低速外部时钟的设计使用无源晶振即可完成设计使用有源晶振也可以无源晶振两端连接两个15pF的电容接地同时两端再接入stm32芯片即可。原理图摘自STM32G031G8U6_stm32g031g8u6原理图-CSDN博客。在STM32CubeMX的配置如下图所示不勾选旁路时钟来源在低速时钟部分选择晶振即可。在时钟配置页面的红色框中可以看出无源晶振是双端与芯片相连的。1.2 HSE设计有关高速外部时钟的设计对于stm32g031g8u6只能使用有源晶振或者其他设备产生的时钟设计我在设计中使用的扬兴晶振的8M的有源晶振OT7EL89CJI-111YLC-8M原理图如下图所示。PC14引脚作为8M的时钟输入PC15引脚作为晶振的使能。在STM32CubeMX的配置如下图所示勾选旁路时钟来源勾选OSC enable。在时钟配置页面的红色框中可以看出有源晶振的时钟是单端进入芯片的。2、 SWD接口无法被检测SWD接口是stm32芯片提供的用来下载和调试程序的接口芯片独立供电的情况下只需要SWCLK、SWDIO和GND三根线即可。由于PCB面积的限制我只留了SWD接口进行下载程序并没有预留其他下载程序的方式。当我收到PCB并完成焊接后Keil无法检测到我的SWD接口于是开启漫长的找问题过程。过程中看到了许多大佬的文章也是不断加深了我的理解。我手上有两个调试器分别是ST-Link和CMSIS-DAP都无法检测SWD接口。一开始我认为是芯片虚焊确实是虚焊但就是没有发现重新焊了一片之后用ST-Link检测依旧无法检测。从此我误入歧途不仅仔细阅读了芯片数据手册还看了许多博客和论坛。最终我得出了一个错误的结论该芯片出厂的时候SWD接口是关闭的实际上出厂即可使用SWD接口。于是我重新画了一块PCB将STM32G031G8U6的所有引脚都引了出来也保留了串口下载程序的方式。完成焊接后上电用串口下载程序没有问题用ST-Link还是检测不到折腾了一上午发现我的ST-Link坏掉了CMSIS-DAP可以检测SWD接口悔不当初我怎么不早点用CMSIS-DAP。2.1 SWD检测指南STM32G031系列的全新芯片可以直接通过SWD口进行程序下载但还是建议大家在设计PCB的时候保留多种下载程序的方式。在使用一块新的芯片时如果遇到SWD口无法检测可以从以下几个方面进行尝试1确认自己的调试器ST-Link、CMSIS-DAP等是否正常可以对手头上好的开发板进行程序下载确保调试器本身没有问题。如果调试器出现问题一般SWCLK或SWDIO的端口电压也有问题可以使用万用表测量进行确认。2下载或更新调试器的驱动程序确保设备管理器中没有未知带叹号的设备输入。3确认STM32芯片上电推荐单独供电不用调试器进行供电确认SWCLK、SWDIO和GND的连接没有问题确保连接线没有问题。4确保芯片供电稳定BOOT模式配置正确。5检测芯片的焊接情况尤其是QFN类型封装重新焊接一块新的芯片就行尝试。如果是已经使用过的芯片先从上面4个方面进行尝试不行的话在考虑下面的方法1PA13和PA14引脚是否被复用成普通的IO口进行使用即引脚被锁住了。可以通过STM32CubeMX重新配置成SWD接口并用串口重新编程芯片。在没有预留串口下载程序的情况下。如果调试器带有复位引脚且PCB板引出了复位引脚可以把复位引脚也插上去然后如下图一样配置就可以正常下载程序。原理是芯片复位后PA13和PA14默认功能为SWD接口。如果PCB板没有引出复位引脚也可以手动按键复位但是成功率不是特别高。遇到Flash读写保护的情况可以参考下面这篇博客。STM32的Flash读写保护SWD引脚锁的各种解决办法汇总2021-10-21 - STM32F407 - 硬汉嵌入式论坛 - Powered by Discuz!H7-TOOL脱机烧录解除读写保护和各种遇到情况解决办法汇总含SWD接口锁低功耗和看门狗2023-08-01 - H7-TOOL开发工具 - 硬汉嵌入式论坛 - Powered by Discuz!2对于STM32G031G8U6这款芯片其VDD和VDDA是一个引脚同时供电。对于其他类型的32芯片VDDA和VBAT引脚供电不正常也会导致SWD接口无法检测。参考STM32的SWD烧录模式No Target Connected 错误的一种情况-CSDN博客。2.2 STM32G031G8U6的BOOT模式不同于STM32F系列的芯片它们的BOOT模式依靠外部的BOOT1和BOOT0引脚的电平来决定。然而STM32G031G8U6的BOOT模式是通过选项字节芯片内部的寄存器进行配置如下图所示。Main Flash memory主闪存用来存储用户代码。一般而言SWD就是在这里下载程序。System memory系统存储区芯片出厂自带的程序。串口等下载方式就是从这里启动。Embbeded SRAM内存存储用户的数据代码。当nBOOT_SEL bit为0时芯片启动由nBOOT1 bit内部寄存器和BOOT0 pin外部引脚共同决定当nBOOT_SEL bit为1时芯片启动由nBOOT1 bit内部寄存器和nBOOT0 bit内部寄存器共同决定。芯片出厂后默认nBOOT_SEL 1 , nBOOT0 bit 1即从主闪存启动。但是芯片启动会检查闪存地址0x080000000用户程序起始地址的数据如果数据为0xFFFFFFFF则表示用户程序为空此时会从System memory启动。芯片出厂没有下载程序都会从System memory启动。参考STM32G0系列的启动配置与程序下载_stm32g0包-CSDN博客当拿到一块新的STM32G031G8U6芯片时既可以通过SWD接口下载程序也是可以通过串口等方式下载程序可以下载程序的方式如下图所示。如果直接用SWD接口下载完程序后再想通过串口下载程序就比较麻烦需要在程序中配置nBOOT_SEL 1让进入System memory由外部的PA14-BOOT0来决定。参考大佬的博客STM32G0系列的启动配置与程序下载_stm32g0包-CSDN博客如果想要方便地保留两种下载程序的方式推荐使用STM32CubeProgrammer一开始使用串口进行连接然后根据红框的指引直接取消勾选nBOOT_SEL点击应用Apply后即可。在配置nBOOT_SEL为0后想要进入system memory用串口下载程序的方式如下1将PA14-BOOT0引脚用跳帽或杜邦线接高电平3.3V。2按下复位按键后松手。3使用STM32CubeProgrammer进行串口连接此时会读取到主闪存里面的代码数据。4打开新的代码文件.hex下载程序。5拔掉跳帽或杜邦线再次按下复位按键程序运行。相比于串口下载程序使用SWD接口下载程序简单得多。在设计电路时一般将PA14-BOOT0引脚下拉到地然后将SWCLK、SWDIO和GND连接正确即可下载程序。3、 原理图和PCB设计为了面积足够小使用的电阻电容都是0201的封装焊接的难度还是不小的。相比于电阻电容不推荐大家用0201的发光二极管因为看背面的正负极把人眼睛都看花了。如果不是面积需求大家还是尽量用0402和0603的封装吧。下面以后来设计的STM32G031G8U6开发板进行介绍将所有的引脚引了出来。原理图非常简单只有CH340X和stm32g031g8u6两个芯片如下图所示。芯片的PA2、PA3引脚连接到CH340芯片用于提供串口下载程序的方式。芯片的时钟输入使用外部的8M有源晶振将PA14-BOOT0接口用10k电阻下拉至地。下面是PCB的效果展示。R1和R2电阻没有0603的封装了就用0201的焊上去了大家可以看看和R4的大小对比。上下两排由于设计时选错了封装间距选成2mm了现在连排针都焊不上去大家画PCB切莫粗心啊。右上角的排针是用于SWD接口调试的建议将3V3放在SWCLK旁边这样只需要一个跳帽即可拉高PA14-BOOT0从而进入system memory使用串口下载模式。4、 代码相关4.1 while(1)循环要加延时while(1){}循环中需要添加延时没有延时程序将无法正确执行。如下图使用串口接受中断进行触发。串口从PC端收到一个字节数据中断触发后将数据重新发送给PC端并反转LED电平。如果没有红色框中的延时中断可以正常触发但是不能正确运行程序。有大佬知道产生这个现象的原因吗是否是处理器底层的设计问题欢迎在评论区讨论。4.2 用定时器设计us级延时HAL库只给我们提供了ms级的延时但在很多情况下us级延时使用的很多。下面提供一种基于定时器设计us级别延时的简单方法如下图所示。选择时钟来源一般可以选择内部时钟这边选择的是APB总线上的64M时钟。因此需要对64M时钟进行预分频分频至1M即可即计数1次的时间为1us。由于定时器的计数位宽是16bit所以函数的最大延时是65535us。延时函数的设计思路简单首先将定时器的计数器置零开启定时器并获取计数器数值进行比较计数器数值达到延时需求时暂停计数器最后退出延时函数。void Delay_us(uint16_t Delay) { uint16_t cnt 0; __HAL_TIM_SET_COUNTER(htim1,0);//inital count 0 HAL_TIM_Base_Start(htim1); while(cnt Delay) { cnt __HAL_TIM_GET_COUNTER(htim1); } HAL_TIM_Base_Stop(htim1); }以上就是对STM32G031G8U6的使用总结希望对大家有帮助。笔者水平有限文章中可能会出现问题欢迎大家在评论区进行纠正。

相关新闻

最新新闻

09-Flutter鸿蒙网络请求入门:HTTP数据请求和JSON模型封装

09-Flutter鸿蒙网络请求入门:HTTP数据请求和JSON模型封装

09. Flutter鸿蒙网络请求入门:HTTP数据请求和JSON模型封装网络请求是业务项目最常见的能力之一。Flutter 鸿蒙项目中,普通 HTTP 请求仍然可以在 Flutter 层完成:添加依赖、封装模型、写请求服务、处理加载状态和错误状态即可。添加依赖 depen…

2026/7/13 15:25:41
集合体系结构

集合体系结构

Collection<E>List<E>set<E>ArrayList<E>Linkedlist<E>HashSet<E>TreeSet<E>LinkedHashSet<E>list集合&#xff1a;添加的元素有序&#xff0c;可重复&#xff0c;有索引。ArrayList&#xff0c;LinkedList: 有序&#xff0c;…

2026/7/13 15:25:41
SMOTE“闭着眼”插值?给老方法装上“注意力”和“大脑”:DA-SMOTE让异常检测TPR从73%飙到89%

SMOTE“闭着眼”插值?给老方法装上“注意力”和“大脑”:DA-SMOTE让异常检测TPR从73%飙到89%

SMOTE用了20年&#xff0c;几乎成了不平衡学习的“标配”工具。但用过的朋友都知道&#xff0c;它在类间重叠严重的数据上经常“帮倒忙”——插值出来的合成样本直接掉进正常样本的地盘&#xff0c;模型被这些“假异常”带偏。这篇论文给了我一个很务实的启发&#xff1a;与其抛…

2026/7/13 15:25:41
注意力权重卡在1以下?给SENET装上“指数放大器”:DEEN让微弱故障识别率从16%飙到68%

注意力权重卡在1以下?给SENET装上“指数放大器”:DEEN让微弱故障识别率从16%飙到68%

读这篇论文之前&#xff0c;我一直觉得SENET的注意力机制已经够用了——能“看到”重要特征不就行了吗&#xff1f;但仔细一想&#xff0c;对于微弱故障诊断&#xff0c;“看到”远远不够。微弱信号乘以一个接近1的权重&#xff0c;还是微弱信号。就像你用肉眼看一颗暗星&#…

2026/7/13 15:25:41
AnyFlow-FAR-Wan2.1-1.3B-Diffusers常见问题解答:解决安装、运行、生成中的20个典型问题

AnyFlow-FAR-Wan2.1-1.3B-Diffusers常见问题解答:解决安装、运行、生成中的20个典型问题

AnyFlow-FAR-Wan2.1-1.3B-Diffusers常见问题解答&#xff1a;解决安装、运行、生成中的20个典型问题 【免费下载链接】AnyFlow-FAR-Wan2.1-1.3B-Diffusers 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/AnyFlow-FAR-Wan2.1-1.3B-Diffusers AnyFlow-FAR-Wan2.1-…

2026/7/13 15:25:41
Loop for Mac:免费开源的macOS窗口管理终极解决方案

Loop for Mac:免费开源的macOS窗口管理终极解决方案

Loop for Mac&#xff1a;免费开源的macOS窗口管理终极解决方案 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否经常在macOS上为杂乱的窗口布局而烦恼&#xff1f;每天面对十几个窗口&#xff0c…

2026/7/13 15:20:39

月新闻