国产单片机GD32系列开坑,带你零死角玩转GD32 第五章

198 阅读23分钟

【开坑国产单片机GD32系列,带你零死角玩转GD32】


第五章 GD32F103C8T6串口开发板设计指南(一)

(1)前言

磨刀不误砍柴工;

(2)Letter Shell介绍

      在第四章中,已经说过会筛选彦祖们的提议,更新相关的内容,先前有几位不愿透露姓名的彦祖在后台私信我,给了我以下几个更新建议:

1.开源项目Letter Shell在GD32平台上的移植;

2.基于GD32的录音笔软硬件设计;

3.基于GD32的USB键鼠软硬件设计;

4.基于GD32的智能家居软硬件设计;

5.基于GD32的智能手环软硬件设计;

      首先感谢以上几位彦祖(为什么没有热巴呢?)的支持,以下公布这5位彦祖的照片,以表示我的谢意! 在这里插入图片描述

      综合考虑过这五个项目的情况后,我决定先更新第一个的内容,毕竟最容易,即开源项目Letter Shell在GD32平台上的移植,这里先介绍一下Letter Shell。       应该有不少彦祖使用过诸如Ubuntu,Centos等Linux操作系统,就我个人而言,让我印象最为深刻的,自然是Linux不同于Windows的命令行式操作界面,初觉大为不便,因为创建文件都需要输入相应的命令(不过现在可以在图形界面下创建了),但随着使用的深入,特别是由于公司业务需要,将MCU程序开发环境移植到Ubuntu上之后,在使用ARM-GCC编译器,对MCU程序进行编译链接的过程中,发现原来在Windows下使用的Keil/IAR,对我隐瞒了太多细节,原以为编译链接只是几个按钮的事情,没想到到了Linux中,却需要自己编写makefile脚本,但这也让我第一次对MCU程序的编译链接过程有了较为深入的了解,对于Linux下的终端界面和Linux Shell工具,也有了不一样的看法。       而此次需要移植的项目Letter Shell,就是一款类似于Linux Shell的嵌入式开源项目,它可以很容易地嵌入到单片机程序中,只要自己编写好串口的收发函数,以及定时器函数,就可以像Linux Shell一样,和MCU内核交互,调用MCU程序中的函数。       这里可能有些彦祖看迷糊了,什么叫做和MCU内核交互? 在这里插入图片描述

      假设我们在程序中实现了LED的驱动函数,屏幕文本显示的驱动函数,那么只需要在Letter Shell的函数中把LED的驱动函数,屏幕文本显示的驱动函数注册一下(其实就是把Letter Shell的函数指针指向这两个函数),然后在PC端的串口助手中,输入和Letter Shell事先约定好的串口命令,那么就可以调用这两个函数,就像Linux Shell一样调用内核中的函数一样,此外Letter Shell还支持命令自动补全,快捷键功能定义,命令权限管理,用户管理,变量支持等功能。

      好!说了这么多,那我们是不是要开始移植了? 在这里插入图片描述       然后并没有,正如我们这期标题所说的,这期帖子的主要内容,是GD32F103C8T6串口开发板的硬件设计指南,而Letter Shell的移植,会被放到第六章,相信各位彦祖现在最想说的是:你是不是在扯淡?

      由于Letter Shell只需要使用串口功能,用主流的那些单片机开发板来测试,实在是杀鸡用牛刀了,所以为了这期帖子,我专门画了嫖了嘉立创三块板子的打板费,陆续设计了三块基于GD32的串口开发板,有需要的彦祖可以找我要Gerber文件,先展示一下这三块板子: 在这里插入图片描述      最终使用的3号板子,包含一个CMSIS-DAP下载器,以及GD32F103C8T6串口开发板,下载器的源码和制造文件如果有彦祖感兴趣,也可以私信我,接下来就以3号板子为对象,介绍这款串口开发板的设计方案,内容会比较多,感兴趣的彦祖可以耐心看完,工欲善其事必先利其器嘛!

(3)串口开发板硬件设计指南

(3.1)串口开发板功能介绍

      由于主要是针对Letter Shell的移植以及操作系统的移植,所以板上资源不多,主要如下图所示: 在这里插入图片描述

      串口开发板的构成,目前就是上图所示的各个框图,以及背后一颗小尺寸纽扣电池,后期会把CMSIS-DAP下载器也集成到该串口开发板上,由于是手工焊接,所以有些地方不怎么美观,嘉立创的SMT太贵了,舍不得舍不得!接下来我们就从功能分析,器件选型,原理图设计,PCB设计等方面,讨论以上框图中的功能。

(3.1.1)电源接口

      由于是串口开发板,而我们平时使用串口对单片机进行调试的时候,一般就是将USB转TTL模块(某宝上一搜一堆的那个)与MCU的TX,RX,GND相连,(这里连接GND的目的是为了统一USB转TTL模块与MCU之间的电平,如果不接GND的话,串口通讯就会出现异常),然后将USB转TTL模块连接到电脑的USB口,就好像下面这张图: 在这里插入图片描述      这种调试方式,MCU和USB转TTL模块是分别供电的,中间通过导线连接,如果周围的线比较少,那倒没啥,如果周围一堆供电或者通信用的导线,或者线缆,那指定是一件让人抓狂的事情,另一种调试方式,就是将USB转TTL电路集成到产品上,然后通过一条MicroUSB,或者Type-C数据线连接,还有一种性价比更高的,就是利用MCU自带的USB模拟出一个虚拟串口(其实CH340G就是这么干的),直接通过MicroUSB或者Type-C连接到电脑,利用USB虚拟出一个虚拟串口的内容,我们会在==基于GD32的USB键鼠软硬件设计==这个项目中讨论,这里不细说。       而GD32串口开发板把线都取消了,直接插在电脑的USB口上,没有中间商赚差价,当然啦!前提是开发板本身可以设计得比较小巧,不然得把USB插口干断了。       这个时候就会有彦祖问了,这个USB插头怎么选型?毕竟在网上一搜,型号一大堆,想选但又怕翻车,所以这里大致介绍一下USB接口,这个我们既熟悉又陌生的小东西。

      USB接口主要分为三类:标准USB接口,Mini USB接口,Micro USB接口,具体信息如下:

==【标准USB接口】==

      这个可以说我们生活中最常见的USB接口了,又分为Type-A和Type-B两种,它俩长这样: 在这里插入图片描述       其中Type-A和Type-B,根据支持的USB标准不一样,又可以分为USB 2.0和USB 3.0标准USB接口。所以根据接口的颜色,我们很容易区分该接口是支持USB 2.0还是支持USB 3.0的。Type-A型接口主要应用于鼠标、键盘、U盘等设备上,彦祖们可以看看鼠标的USB接口,大部分都是Type-A(2.0),而Type-B在打印机上应用较多,比如下面这张图,就是典型的Type-B接口: 在这里插入图片描述

==【Mini USB接口】==

      不同于标准USB接口的大大咧咧,Mini USB接口,是一种小型的USB接口,其指标与标准USB相同,但是加入了ID针脚(用于区分设备是主机还是外设),以支持OTG(On The Go,该功能允许在没有主机的情况下,实现设备间的数据传送)功能,毕竟不是什么时候都有台电脑在身边的,而Mini USB接口主要分为Mini-A和Mini-B两种,长下面这样:

在这里插入图片描述在这里插入图片描述

      Mini USB接口由于相对较小的体型,常见于一些小型设备上,比如MP3、MP4、收音机等,早期的老人机也有相当一部分采用了这个接口,高中时期,教室后面的插座上,一堆充电的手机用的都是这个接口,别问我是怎么知道的。

==【Micro USB接口】==

      Micro USB接口,属于Mini USB的升级版本,插拔寿命提高到了10000次,相比Mini USB接口,在宽度几乎不变的情况下,高度减半,更为小巧。Micro USB接口也可分为Micro-A和Micro-B两种,长的就下面这样: 在这里插入图片描述       这个彦祖们应该是不陌生的吧?相信大家都认识,只是不知道它的专业名称,在智能手机发展的前期,绝大多数的智能手机(苹果除外嗷),都采用了Micro-B型接口作为充电和数据接口。

==【Type-C接口】==

在这里插入图片描述      Type-C接口,是近几年USB-IF组织推出的新型USB接口,该接口最明显的特点,就是可以正反插拔了,并且在充电功率,通讯协议上,都有了很大的提升,长的就是下面这样了: 在这里插入图片描述       这里只是做一个大致的介绍,让彦祖们能够分清谁是谁,如果需要更详细的资料的话,CSDN和知乎上有更详细的介绍,我们这里选用的是USB Type-A接口,主要有两个原因,第一,是因为目前大部分电脑都携带有USB Type-A的接口,使用起来比较方面,可以直接插在上面,第二是因为后面的USB转串口电路所使用的协议转换IC支持的就是USB2.0,这里提一嘴,USB协议是可以向下兼容的,哪怕电脑的USB接口是USB3.0协议,我们也可以把一个USB2.0协议的设备插在上面,比如鼠标啥的,都是可以正常使用的。

(3.1.2)电源部分

      电源可以说是整个系统的核心了,电源的性能关乎系统的整体性能,所以在选型和设计上,要格外花力气。       电源设计的第一步,就是要确定系统的工作电压以及功耗要求,单片机系统一般是采用5V/3.3V/1.8V作为系统工作电压,但是诸如手机充电器,5V-1A直流电源适配器在这里插入图片描述在这里插入图片描述 都只提供一种电压,如果单片机需要1.8V电压,传感器需要3.3V电压,屏幕需要5V电压,电机需要12V电压,这种情况如何处理呢? 在这里插入图片描述

      这种情况下,就需要升降压电路,对外部电源进行处理,而根据外部电源的不同,所采用的升降压方案也是有很大区别的,接下来我们根据电源电压范围,系统功耗和升降压电路的关系,讨论一下电源设计方案(纯属个人意见,欢迎纠错和指导)。 在这里插入图片描述       单片机系统及其外围电路常见的输入电源电压如上图所示,电源方案设计的第一步就是先确定输入电压的范围,我们按照上图顺序,依次讨论在各个电压范围下电源方案的设计思路。

==(a)+12V,电源适配器/开关电源==       一般+12V的电源,都是采用下图所示的电源适配器: 在这里插入图片描述 在这里插入图片描述

      底部铭牌上有一个重要信息,就是输出的电压和电流的额定值,为12V/1A,也就意味着这个适配器的最大允许输出电压是12V,最大允许输出电流是1A,如果用它给需要12V/2A的设备供电,那这个电源适配器和设备就只能 在这里插入图片描述       好!现在已经知道该电源适配器最大可以输出12V/1A,那如果我们要获得需要的5V/3.3V/1.8V电压,接下来该怎么做?对的!就是电源芯片选型了,那相关芯片的选型信息怎么获得呢?有以下几个去处彦祖们可以去逛逛 在这里插入图片描述

立创商城: 点击前往

在这里插入图片描述

华秋商城: 点击前往

      我们的升降压方案是:先将12V降压至5V,再将+5V降至+3.3V,最后再将+3.3V将至+1.8V,总共三个阶段,每一个阶段所使用芯片的类型和工作原理都有差异。       第一次降压,由+12V将至+5V,这个就要求降压芯片能够承受至少+12V的电压,以及最大1A的电流输入,有一些常见的电源模块上使用的芯片就无法满足要求,比如下图这个: 在这里插入图片描述 (实物拍摄)

      该模块使用的是AMS1117-3.3降压芯片,在立创上下载其数据手册,在电气参数这一栏会发现如下信息: 在这里插入图片描述

在这里插入图片描述

      从这两张图可以得知,该芯片最大的输入电压是18V,最大输出电流是800mA,也许有些彦祖会说,这不是差不多嘛,凑活凑活也能用呀!我刚开始也是这么想的,直到我看到板子被烧穿了,才知道,这些数据都是极限值呀!一般来说AMS1117-3.3这款芯片输出电流到达200mA的时候,你就可以用它暖手了,到达500mA的时候,你拿着的,就不是一个电源了,而是一个爆竹了,彦祖,你也不想板子上有一个爆竹吧? 在这里插入图片描述

      接下来我们介绍一下常用的电源芯片分类,电源芯片可以分为LDO芯片,比如AMS1117-3.3,以及DC-DC芯片,这里的LDO是低压降的意思,低压降线性稳压器(LDO)的成本低,噪音小,静态电流(也就是输出端啥都没有接的状态)比较小,它需要的外接元件也很少,通常只需要一两个旁路电容用来滤除外部输入的噪声和纹波,一些性能优秀的LDO线性稳压器可以达到静态电流6μA,电压降最小也只有100mV,电压降指的是输入电压减去输出电压的值,假如输入是5V,输出是3.3V,那么电压降就是1.7V,一旦输入电压减去输出电压小于==最小电压降==,那么便无法工作,AMS1117-3.3的最小电压降是1.25V。 在这里插入图片描述

      而DC-DC的意思是(Direct Current)直流到直流,也就是把一个直流电压转换到另一个直流电压,可不只是降压了,还可以升压,讲道理只要符合这个说法的,都可以叫DC-DC转换器,当然也包括LDO。但是更精确的定义时:通过开关方式,把一个直流电压转换到另一个直流电压的器件叫DC-DC,这里的开关方式其实就是通过电感来实现的,像我们经常在一些设备的PCB板上发现这样的电感: 在这里插入图片描述在这里插入图片描述 在这里插入图片描述       这些都是DC-DC芯片配备的电感,DC-DC芯片相较于LDO,一般支持更宽的输入电压范围,更大的电压降,更大的输出电流,以及灵活的升降压方式,但是DC-DC芯片的输出脉动和开关噪音较大,散热也是个问题,并且价格也不低 在这里插入图片描述 在这里插入图片描述

      所以如果输入电压和输出电压很接近,比如要求输入5V,输出3.3V,那最好是选用LDO稳压器,由于LDO独特的工作效率,在输入电压和输出电压很接近的场合,工作效率很高,输出信号干净,成本也低,所以在一些轻量级设备,mp3,mp4等应用场景使用得很多,但是,如果输入电压和输出电压不是很接近,比如要求输入12V,输出5V这种场景,就要考虑采用开关型的DC-DC了。       到了这一步,彦祖们是不是以为就可以正式去进行DC-DC芯片的选型了?其实还有一个很关键的信息我们还没考虑,==焊接难度!==,毕竟都让贴片厂帮我们焊的话,钱包不支持,所以大部分时候,能自己焊就自己焊,有些彦祖可能会觉得,像这样的PCB板看起来很帅!满满科技风,拿手上都得用双手,一天摸个几十遍。 在这里插入图片描述

      但是,真要自己去焊,那就可以领略到什么叫做:有一种脑干缺失的美了 在这里插入图片描述

      就好比以下这种封装的芯片,不知道彦祖们能不能焊上,反正我是抱着赌的心态去操作的。 在这里插入图片描述 在这里插入图片描述

在这里插入图片描述       所以如果自己焊的话,最好多选择一些诸如LQFP,SOP,TSSOP,SOIC这种引脚明显,方便焊接的芯片,诸如QFN,BGA,UQFN等封装,虽说外表简洁,但是焊接起来,烙铁,热风枪轮番上阵的话,难保芯片不会过热损坏,而且调试起来也不方便,所以如果没有特殊要求的话,还是选择前者更方便一些。       说了这么多,现在我们已经获得了12V转5V电路的芯片选型指标了,即:

(I)采用DC-DC降压芯片。 (II)DC-DC芯片的允许输入电压范围至少要大于12V。 (III)DC-DC芯片的允许输出电流范围至少要大于1A。 (IV)采用易于焊接的封装。 (IV)控制成本,且要保证供货稳定(之前项目MCU断供,加班加点换MCU,人麻了)。

      依据这些指标,我们可以在立创商城的DC-DC电源芯片一栏,进行参数的选择。 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

      我们在==功能选择==中选择降压型,==输入电压==其实可以不用管他,虽然我们花了不少篇幅去讨论它,相当一部分的DC-DC芯片都支持12V输入,==输出电压==也不用专门设置,因为DC-DC芯片的输出电压是可以通过改变电阻阻值调节,接下来就是==输出通道==选择,一般是一个通道,最后就是==参考封装==,选中的SOT-23-5,SOP8/SOIC8都是易于焊接的封装,那些不易于焊接的封装后期会出一个教程,给大家参考参考。       选完之后,就会有一些适合的型号。 在这里插入图片描述在这里插入图片描述      大家可以再根据对成本的要求,或者焊接难度的要求,选一个合适的,这里我使用最多的,就是TPS54202DDCR,封装小巧,价格合适,参数也符合要求,记得下载相应的数据手册,里面有原理图模板,如果初次使用的话,照着参数画就行了。 在这里插入图片描述在这里插入图片描述       好的,我们已经通过前面的DC-DC电路,将12V电源降至+5V,那剩下的+3.3V和+1.8V该如何获得?前面说过,当输入电压(VIN)和输出电压(VOUT)差值较小的时候,可以直接使用LDO芯片,对+5V进行降压操作,但是在在这之前,要再回头看一看DC-DC电路,我们之前说过DC-DC芯片的输出脉动和开关噪音较大,如果不经过处理直接输送给一些诸如屏幕,传感器之类的电路,可能会因为噪声或者电压波动而导致电路工作异常,引起欠压或者关机,所以我们通常会在DC-DC电源芯片的输出脚上并联几个几十uF的电容,上图的TPS54202DDCR参考电路也是在输出端并联了两个22uF的电容,这里需要了解到的是,此处的电容负责吸收输出脉动和噪声,让他们扑通一下掉进电容这个大水桶,然后由于水桶比较大,这些水花不会影响到水桶向外流出水流的状态,水桶,也就是电容,就可以稳定地向外输出一个几乎固定的电压。 在这里插入图片描述       好!我们现在回过头来看LDO芯片的原理图设计,这里其实我们前面已经讨论过了,这里通常采用AMS1117-3.3,HT7533等5V转3.3V芯片,如果需要获得1.8V的话,AMS1117-1.8也是符合要求的,到了这一步,其实选型就简单许多了,最终的参考原理图如下: 在这里插入图片描述

      当然,你要是希望效果比较明显,易于观察的话,也可以在各个电压输出端安放一些LED,用来表明输出电压正常,然后也可以放置一些电压测试点,省得用万用表的表笔在芯片的jio jio上戳来戳去。 在这里插入图片描述 ==(b)+4.755.25V,USB接口/电源适配器==       其实4.755.25V这个奇怪的电压范围就是USB接口的电压范围,之前见过有人直接把USB接口的电源接到STC单片机上,结果STC单片机就好像抽风一样,原因就是USB电压的波动范围超过了STC单片机允许的电压波动范围,让单片机出现了重复开关机的现象。       这一部分的降压电路可以直接照搬上一个内容的+5V转3.3/1.8V电路,莫得问题。 在这里插入图片描述在这里插入图片描述 ==(c)+3.23.7V,锂电池==       看电压范围我们可以发现,锂电池最高是3.7V,仅仅比3.3V高出了0.4V,就算是以低压差为优势的LDO,在0.4V的压差面前,大部分的LDO都无法使用,况且还要提供5V和12V电压,所以可以采用以下方案 在这里插入图片描述      市面上常见的锂电池主要有18650锂电池,聚合物锂电池: 在这里插入图片描述在这里插入图片描述      彦祖们应该发现在这两个电池上面都标注了诸如“3.7V”和“650mAh”这样的参数,这两个参数表示的是锂电池在充满电的情况下,输出电压是3.7V左右(实测会有100mV左右的误差),并且可以保持650mA的输出电流一小时,或者保持100mA的输出电流6.5小时,当电池电压下降到3.2V左右时,电池电量接近枯竭,这个时候就该充电了。       所以要根据设备的电流使用情况和续航要求,选择适当的锂电池,这里我们没有特殊要求。       那要如何选择将3.2V3.7V升到+5V的DC-DC芯片呢?其实套数和之前选择12V降至5V的DC-DC芯片一样,在立创的待选框中选择,这里就不多说了,给大家推荐一些我常用的DC-DC升压芯片: 在这里插入图片描述在这里插入图片描述      TPS63020DSJR这款芯片唯一的缺点就是焊接起来不太方便,但是价格和性能没得说,另外说一句,立创上的芯片卖的普遍偏贵,这款芯片在某宝上3元/片。 在这里插入图片描述在这里插入图片描述

      SDB628,这款芯片的输入电压范围很广,输出电压范围最高也达到了28V,所以我们将5V升到12V的DC-DC芯片选择的也是他,并且他易于焊接,价格更美丽,某宝上甚至不到一元就能买到一片,可以适用普通应用场景了。       还有一个很重要的点,DC-DC芯片的输出电压是依靠FB引脚上的参考电压而确立的,通常采用电阻分压的方式获得这个参考电压,所以用于分压的电阻精度至少要达到1%,就别用5%精度的电阻了,因为这样会让输出电压的范围有较大的波动,我们这里可以简单计算一下,一般DC-DC芯片的数据手册会提供一个输出电压计算公式,我们这里以SDB628为例,公式为: 在这里插入图片描述在这里插入图片描述

    如果要获得+12V的输出,通过计算可以得出R1/R2 = 19,假设R1 = 190KΩ,R2 = 10KΩ,如果R1和R2的精度为5%,也就是说最坏的情况是R1 = 190105% = 199.5KΩ,R2 = 1095% = 9.5KΩ,将这两个值代入公式,得到输出电压是13.2V,别看就差了1.2V,有些设备对电压要求很严格,多0.5V就得现场螺旋升天,所以多花点钱,买高精度电阻,彦祖,你也不想设备螺旋升天吧? 在这里插入图片描述       获得12V之后,接下来的3.3V和1.8V就可以利用LDO对5V进行降压,到这里,便获得了12V,5V,3.3V和1.8V,原理图上面也都是有的,彦祖们自己随便拿,我请客,如果还有其他问题,欢迎私信我,一起讨论。

==(d)+3.0V,纽扣电池==       这里就不建议搞什么12V,5V之类的电压,因为纽扣电池的容量实在太感人,但凡是有升压的想法,就是太看得起它了,况且升压降压都是有转换效率的,也就是说,能量会有损耗,大部分时候是发热导致的,所以就纽扣电池那点电量,估计都不够发热的。 在这里插入图片描述       所以最好是采用LDO降压至1.8V左右,给低功耗MCU供电还是可以的,本身纽扣电池的应用场景就是低功耗场景,所以除此之外,就别难为他了。 在这里插入图片描述

(4)中场总结

      到这里GD32F103C8T6串口板的必要硬件电路已经介绍完了,需要相关资料的彦祖直接私信我,剩下的USB转串口,主控,SWD,BOOT,以及各类模块的电路,我们在后续使用时在逐一介绍,不然全在这一章写的话,内容太多(我要回家相亲了),年后开工就继续更新!最后祝大家新年快乐! 在这里插入图片描述 在这里插入图片描述