[DAY 2] _ 做一块自己的开发板(stm32f030)

第二天我来说一下如何做1块属於自己的开发板,分享我在做STM32的开发板经验,我不会说我的做法是最好,但做起来是有功能的也能正常烧录,原理图我会开源也会说我用了哪些IC。

首先做一块属於自己的开发板要先来规划自己需要哪些零件,最少需要哪些东西才可以正常烧录。

1. 供电,(没有供电一切都别想了)

2. Reset电路,(烧入完後需要复位,预设是上拉3.3V)

3. 时钟电路,(1个固定频率的震荡给MCU,当然不给也可以那就是用MCU内部震荡)

4. BOOT启动模式,(上电後的启动模式,有三种)

5. 烧录电路,(SWDIO、SWCLK)

有了上述这些,基本上就能正常烧录了,下面会针对上面这5点做细部介绍
也会讲解我的开发板原理图,针对STM32F030CC这颗MCU,跟STM32F103的开法板很类似。

在学嵌入式单晶片STM32有个东西一定要会看!(很重要),看不懂就去google翻译,或去google搜寻那单字
1.Datasheet(资料手册) 2.Reference manual(参考手册)
在後面我也会撷取手册上的一部分来说明如何看这些手册,不会全讲只会讲几个比较重要的地方。

1.供电

STM32系列的MCU都是3.3V的工作电压,但有些I/O口可以耐压到5V,有些只能耐压到3.3V这在Datasheet里面有表示,下图是stm32f030的Datasheet里的截图:

https://ithelp.ithome.com.tw/upload/images/20210915/20141979xH5Azyh950.png

可以看到上面有表示缩写的意思,例如FT代表可以耐压5V,TC只能耐压到3.3V
在Datasheet往下滑一页就是引脚定义说明了,如下图:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979iFNt16BRJB.png

可以看到我红色框起来的部分,我目前使用的stm32f030cc是48pin的MCU,所以我要它的引脚定义只需要看这栏对应往右的资讯,可以看到右半部有很多脚位的缩写,还有描述脚位拥有的功能。

再来看看这颗MCU的脚位图,从数据手册里可以电源供应脚有这些
https://ithelp.ithome.com.tw/upload/images/20210915/20141979uwPFnBe3e2.png
红色框框:VDD 蓝色框框:GND

这里可以看到还有额外的VDDA跟VSSA,这两个代表是类比电压跟类比接地,主要用供给内部ADC的参考电压
在意类比电压乾不乾净,可以在3.3V後接个滤波电路後再接入VDDA,我目前是接简单RC的滤波
下图是我的开发板原理图的MCU供电部分:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979wQLfy1iukN.png

我讲解一下我的原理图规划,可以看我红框的部分,我是用较常见micro USB作为5V供电,经过一颗降压IC型号是AMS1117-3.3,降压到3.3V供给MCU,至於应用电路去看Datasheet都有提供电路,AMS1117-3.3这颗LDO在很多电子零件行应该都会有,Arduino降压3.3也是用这颗!


2.Reset电路

https://ithelp.ithome.com.tw/upload/images/20210915/201419790stKh920S7.png

资料手册里有提到,这复位脚RST内部上拉3.3V,这样代表我需要先拉低电位在拉高电位就可以复位整颗MCU
我的原理图如下
https://ithelp.ithome.com.tw/upload/images/20210915/20141979eBCcl60kH7.png
会有个按纽并联电容是为了要消除按键机械上的弹跳。
简单来说是做个小延时来度过前面的抖动状态,想深入了解的话可以去查看基本电学里的RC充放电,电阻R就像水管,C就像水桶,电流就像水,水桶越大就需要更多时间去放满水,所以电容越大延时就越长,电阻越大则代表水管很细也会加长装满水的时间,这比喻不难理解吧。


3.时钟电路

https://ithelp.ithome.com.tw/upload/images/20210915/20141979uoAtwHFlw8.png

这颗MCU可以接两个外部时钟可以挂载,一个低速时钟另一个则是高速时钟,都不挂也可以,就是吃MCU内部的震荡器,MCU要有震荡才会工作,就跟人类心脏需要发送血液给各个器官才能正常工作,(这解释不知道恰不恰当,哈哈)
低速石因:最常见的功能是作为实时时钟来算精准的计时1秒钟,经过计算最准的频率是32.768kHz。
高速石英:预设是接8MHz。
这两个外部接石因震荡都有设一定范围,不是想接多少就可以随便接,这部分相关资料在Datasheet手册里的时钟树有提到:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979rnAr1Roswd.png
可以看到上图红框部分,是这MCU的高速和低速的外部时钟接口,外接高速能配置到4到32MHz这范围外都会造成MCU工作不正常或不能烧入,但预设都是8M,假如接16M就需要在软件上做除频来修改。
在看篮框部分,内部也有高速跟低速时钟所以不接时因也是可以的,但内部的低速是40kHz,假如要精准地跑1秒的延时32.768k是最精准的,原因是可以看到内部时钟树里低速震荡电路主要是用在2个功能,1.watchdog(看门狗)2.Real-time clock(实时时钟),至於这两个的作用是属於比较进阶的部分,简单说明1.看门口主要功能是检测程序运行时有没有异常的执行时间,有的话可以让MCU自动重制。2.实时时钟则是计数时间32.768kHz为计数1秒最精准的频率。


4.BOOT启动模式

https://ithelp.ithome.com.tw/upload/images/20210915/201419797yecgHkpMI.png
可以到STM32F030这颗的BOOT脚在Pin44

模式的话在Reference manual(参考手册),有表示以下这三种:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979keBdFt9WmV.png
这边的话只需要看BOOT0就好了,这边选择拉低用Flash memory来做上电後读取的所烧录程序的记忆体
原理图接法:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979wHmCt4Nf1D.png


5.烧录电路,(SWDIO、SWCLK)

最後烧录脚,主要烧录脚两只SWCLK(Pin37)跟SWDIO(Pin34),有这两只还有烧录器的GND要跟MCU共地就可烧录了:
https://ithelp.ithome.com.tw/upload/images/20210915/20141979EScREH1cvK.png
看到上图,我把烧录脚、GND、3.3V引出来用就可用烧入器来做烧入了,至於烧录器一般电子零件行都有卖
可以去零件行找ST-Link烧录器,通常1百多块而已


最後贴上我完整的原理图、PCB图、实体图
https://ithelp.ithome.com.tw/upload/images/20210915/20141979268i65hyna.png
https://ithelp.ithome.com.tw/upload/images/20210915/201419794iPy2xWFxw.png
https://ithelp.ithome.com.tw/upload/images/20210925/20141979pvsl3bq72x.jpg

相信有看完上面的内容就知道为什麽我前面说想学嵌入式一定要会看Datasheet(资料手册)和Reference manual(参考手册)了,只要你懂怎麽看,不管换哪颗MCU你都会很快上手,移植也不会困难,像韧体撰写,或暂存器的位置查找,和各个暂存器的功能配置在Datasheet里面都写的清清楚楚~。

明天预计讲这块PCB Layout的规划顺便讲解一下如何用安装Keil5环境来撰写韧体,我使用的是标准库,其实ST官方有出STM32CubeIDE,只要点一点配制一些所需要开启的功能,就会产生HAL库程序,这样就能快速开发相关程序,但我觉的这样有好有坏,好处是可以很快开发验证出你想要的功能,但你会不好了解他到底帮你配置了那些暂存器功能,除非你你很有好学心,1个1个打开函式去看。
简单说一下标准库跟HAL库的差别,HAL库有点像是标准库的加强版本,比标准库更精简,但以效率来讲标准库会好一些,功能函式较多。
由於我一开始学的就是标准库,也用习惯了,我就只说明标准库的东西。

以上就是我刚接触嵌入所学的知识分享,假如漏甚麽或少东西或想了解甚麽相关知识,可以在下面提出来我懂的话会尽力回答。
/images/emoticon/emoticon37.gif


<<:  安装kubeadmin

>>:  Day3 简易调色盘小实作

Day 23 dio函数库

昨天提到Flutter最常用的网路函数库有HttpClient和http函数库,但其实还有一种叫做d...

[Day3]资料库连线及新增使用者

资料库系统从设计、建立、操作、到管理阶段,都会有不同角色参与,以下区分为四种类型: 资料库设计者 (...

[Day 28] banana in a box!关於双向系结功能的语法糖

Okay!最後几天要看的内容是关於 Angular 的双向系结。 如果你跟我一样是从 Angular...

Day24 <AuthorizeRouteView>运用

前天有在Blog.razor加入通过验证及未通过的显示内容,但如果系统要呈现的未通过验证内容都一样,...

[FGL+GAS] 如何做出『登入後才可执行』的helloworld (3.X以後版本提供)

前篇『[GAS] GBC上运作的Hello world! 』讨论到可以透过自订 xcf档案,手工挂载...