打印
[STM32G0]

STM32G070KBT6最小系统板绘制和晶振配置、BOOT模式配置

[复制链接]
2010|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zljiu|  楼主 | 2024-7-3 10:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
芯片:选用STM32G070KBT6,具有128 KB Flash存储器、36 KB RAM,基于M0+内核,最大主频64MHz;

在stm32G0系列参考手册中我们可以发现高速外部时钟信号(HSE)可由两种可能的时钟源产生:一种是外部时钟信号(HSE),另一种是内部时钟信号(HSE)。时钟源:
- HSE 外部晶体/陶瓷谐振器(无源晶振英文为crystal或者resonator,即晶体或谐振器)
- HSE 用户外部时钟(可以是有源晶振或者其他单片机输出的时钟信号,有源晶振英文为oscillator,即振荡器)
谐振器和负载电容必须尽可能靠近振荡器引脚,以减少输出失真和启动稳定时间。负载电容的
必须根据所选振荡器调整负载电容值。

使用外部时钟时,OSC_OUT可以配置为普通IO口或者OSC_EN引脚,该引脚和有源晶振使能引脚连接,为外部有源晶振提供使能信号。它允许在器件进入低功耗模式时停止外部时钟源。


参考手册如下:说明HSE crystal模式下可以输入4-48MHZ oscillator(按理来说这个是有源晶振,为什么划分到晶体这来?)和HSE bypass模式下最大48MHZ时钟;


然后笔者又去看了stm32G070KB这个具体型号的产品手册,其中关于System clock source有如下一段话:

三种不同的时钟源可提供 SYSCLK 系统时钟:
- 4-48 MHz 高速振荡器,带外部晶体或陶瓷谐振器 (HSE)。它 可为系统 PLL 提供时钟。HSE 也可配置为旁路模式,用于外部时钟。
- 16 MHz 高速内部 RC 振荡器 (HSI16),可通过软件微调。它可以 为系统 PLL 提供时钟。
- 系统 PLL 最大输出频率为 64 MHz。它可由 HSE 或 HSI16 时钟。


如果说oscillator也表示无源晶振的话,笔者在使用stm32cubemx配置g070KBT6的时钟树时遇到了以下问题:

可以看到无法配置HSE的crystal模式,只有BYPASS外部时钟模式,这个问题也有其他人遇到过,

参考链接:STM32G050的外部晶振的一些坑_stm32单片机的晶振引脚接有源晶振-CSDN博客





既然如此,我们姑且认为oscillator表示无源晶振,而在G070KBT6这个型号上也只能用BYPASS模式,虽然参考手册说可以用无源晶振但我们以cubeMX实际配置为准,即使用BYPASS模式并使用有源晶振作为外部时钟;

晶振:使用8MHZ有源晶振(YXC,杨兴晶振),该晶振参考书册中的电路如下:



顺便记录一下单片机PLL锁相环(Phase Locked Loop)倍频原理,为什么输入8MHZ振荡信号,最后能8倍频从而驱动64MHZ的单片机;

首先PLL的结构如下:鉴相器的作用是检测输入信号和输出信号的相位差,并将检测出的相位差信号转换成uD(t)电压信号输出。当输出信号的频率与输入信号的频率相等时,输出电压与输入电压保持固定的相位差值,即输出电压与输入电压的相位被锁住;鉴相器的输出,可能会带点毛刺,过一下低通滤波;最后VCO它有这么个特性,一丢丢输入电压的变化,会导致输出频率出现很大的变化,个人认为实现频率增加的功能就是由VCO提供;



那么如何实现特定的2/4/8倍频呢?我们只需要在反馈回路上加一个相应的2/4/8分频器即可;



下载电路:使用SWD下载,这里SWD引脚和BOOT0引脚是冲突的;(G0系列只有boot0引脚而没有boot1引脚,具体启动模式选择后面会讲)



我们知道stm32的boot有三种模式:



   我们先说明一下,boot只是决定了单片机上电后从哪个区域启动,由于每个区域对应一个固定的开始地址,那我们也可以理解为boot只决定了单片机从哪个地址开始运行;而我们下载程序的方法有很多,串口、SWD、Jtag等,这些方法都可以决定把程序下载到Flash或者SRAM中的任意地址中去,和什么boot模式无关;

    如果想用串口下载那就得先1、选择系统存储器模式(系统存储器中有官方的串口下载bootloader,该程序被固化不可更改),2、按下复位键从系统存储器启动,将程序下载到flash;3、选择主闪存存储器模式;4、再按下复位键系统从主闪存存储器(即flash)启动,运行刚刚下载的程序;

    上述步骤缺一不可,只有按下复位键之后才能以刚刚更改的模式运行,想要使用官方的bootloader下载程序就要进入系统存储器模式,该模式也只能下载程序不能运行程序;如果想要运行程序就要运行主闪存存储器存储器模式;

    再来聊一下内置SRAM模式,即从SRAM中启动来运行下载到SRAM中的程序,首先我们知道如果下载程序到SRAM中再运行的话是不可行的,因为下载完程序后需要复位才能运行程序,而复位之后SRAM中的内容将会被清零;那么内置SRAM模式的作用是什么呢?作者网上查阅了相关资料发现有调试的作用,具体实现原理还没有弄清楚,如果有看到这里的大佬能解答一下我不胜感激。

    那么还有一种方法可以下载程序在SRAM中并且在SRAM中运行程序,那就是选择主闪存存储器模式启动,然后再闪存flash开头我们自己编写一个bootloader,这个bootloader包含官方bootloader的串口下载功能(当然也可以添加一些其他功能),当App程序运行时检测到要下载程序就跳转到自己编写的bootloader中去,然后通过串口用代码指定程序下载到SRAM中(也可以指定下载到flash中),下载完再跳转到SRAM(或者跳转到flash)中,就可以运行刚刚下载的app程序;(关于bootloader和APP的内容请自行查阅)



这里我们选择使用SWD下载程序(SWD下载基于专用的SWD硬件接口,如果单片机芯片有SWD硬件接口就可以使用SWD下载),如果我们将程序下载到flash中那就从flash启动,即选择主闪存存储器模式;

    由于SWD_CLK和boot0都在PA14引脚上,我们根据G0系列参考手册中如下所说的:

在 STM32G0x0 中,可以通过 BOOT0 引脚和用户选项字节中的启动配置位 nBOOT1、BOOT_SEL 和 nBOOT0 选择三种不同的启动模式,如下表所示。在芯片重启后,在第4个系统时钟的上升沿来检查BOOT引脚的电平及相关寄存器配置位来选择在复位后的启动模式(检测之后BOOT脚什么电平也就无所谓了)



由于G0系列只有boot0引脚,所以就用单片机寄存器中nBOOT1 bit位代替boot1引脚的功能;上表中nBOOT_SEL则设置boot0位是参照boot0物理引脚还是和boot1一样参照寄存器中的nBOOT0 bit位;具体如何应用可以参考下面这张图:(从别的作者那里扒来的【毕设】USB功率测试仪 - 嘉立创EDA开源硬件平台 (oshwhub.com))



结合上面两张图翻译一下就是:

    当nBOOT_SEL被勾选,即为1时,启动模式为纯软件启动,这个时候你得先把该程序下载到芯片中才能更改启动模式,因此官方的bootloader就用不了了(官方bootloader得先改启动模式才能下载,顺序不对);当nBOOT_SEL取消勾选时,启动模式由BOOT0引脚电平和nBOOT1决定,当BOOT0为0时从flash启动,BOOT0为1时看nBOOT1是否勾选,勾选则从系统存储区启动,这时可以使用官方的bootloader进行串口下载。没勾选则从内置SRAM区启动;总之SWD下载和官方bootloader一键串口下载不可兼得;

     由于前面说了BOOT0引脚和SW_CLK冲突了,我们有两种解决方式;

1、在BOOT0引脚接一个下拉电阻(官方推荐阻值10K),由于我们是使用SWD下载所以只用主闪存存储器模式即可;

2、放弃BOOT0引脚,使用纯软件更改启动模式;(这里我们使用第一种解决方式,具体实现可以通过HAL库相关代码或者在stm32cubeprogrammer中实现,后续会验证能否用ST-Link的SWD更改启动模式)

复位电路:NRST低电平复位,于是接一个上拉电阻,再接一个按钮到地,按下按钮时NRST接地系统复位;还可以在NRST和GND之间接一个电容用来硬件消抖;

电源:使用了一个AMS1117的5V-3.3VLDO降压电路;

最终电路图如下:



关于晶振电路的布线也是有要求的:

1.晶振要尽可能靠近单片机晶振引脚,以此减小寄生电容和减小干扰;晶振的电容要尽可能靠近晶振;

2.晶振电路PCB区域(从顶层到底层)不走任何于晶振电路无关的走线,大功率强**件和高速信号线原理晶振电路;

3.晶振电路和MCU同层布线,且包地处理(通过在电路周围铺一圈地线来减小其他信号对电路的干扰,不与同层其他地相连,然后需要在晶振或晶体的周围打地过孔,使表层与中间层的地平面相连),同时晶振电路PCB区域的其他层也最好进行GND铺铜处理;

下图是有源晶振PCB布线:



如果是无源晶振的话还需要注意差分走线和外部匹配电容的计算,因为无源晶振有两根线,为了减小干扰以及方便负载电容的计算,需要保证两根线等长、等宽、紧密靠近、且在同一层面;


————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_48211392/article/details/135705593

使用特权

评论回复
沙发
tpgf| | 2024-7-18 09:20 | 只看该作者
晶振的配置和选用谁家的晶振以及晶振本身的特性有关系吧

使用特权

评论回复
板凳
观海| | 2024-7-18 10:04 | 只看该作者
晶振可以布置在单片机的背面吗

使用特权

评论回复
地板
guanjiaer| | 2024-7-18 11:00 | 只看该作者
晶振电容的大小是按照手册的大小给 还是按照晶振的手册的大小给呢

使用特权

评论回复
5
keaibukelian| | 2024-7-18 22:45 | 只看该作者
我们常用的就是boot0和boot1都接低电平是吧

使用特权

评论回复
6
heimaojingzhang| | 2024-7-18 23:17 | 只看该作者
如何粗略的计算pcb电路板上的走线电容啊

使用特权

评论回复
7
八层楼| | 2024-7-18 23:49 | 只看该作者
现在对于主流的单片机来说 多大的flash算是比较大的呢

使用特权

评论回复
8
4c1l| | 2024-7-27 11:21 | 只看该作者
外部晶体/陶瓷谐振器(HSE晶体)和用户外部时钟信号

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

3323

帖子

3

粉丝