最终 PCB EDA 工程:


一、确定芯片型号
根据项目需求,梳理需要用到的功能,
-
电量检测:ADC
-
按键:IO input+外部中断
-
LED:IO output
-
温度检测:ADC
-
电机控制:IO output
-
打印通讯:SPI
-
打印时序:IO input&output
-
蓝牙:UART连接透传模组
-
日志:UART
最终得出需要的外设和功能:UART、SPI、ADC、IO、中断、定时器、RTOS
外设部分 一共需要27个IO,其中特殊外设包括两个ADC,一个SPI,两个UART,一个用于蓝牙通讯,一个用于日志打印。

最终选择 STM32F103C8T6
- 描述:CPU内核:ARM Cortex-M3 CPU最大主频:72MHz 工作电压范围:2V~3.6V 程序存储容量:128KB 程序存储器类型:FLASH RAM总容量:20KB GPIO端口数量:37 ST 32位 ARM内核 MCU芯片

二、确定外设接到哪个IO
1、查看芯片Datasheet确定
手册与设计资料: www.st.com
打开芯片手册,然后找到pin definitions页面,这里主要查看一些特殊功能的引脚,例如adc、uart、spi用的是哪些io,确定下来后,把其它的通用IO也逐一确定即可,这些通用的IO后续绘制原理图时,还可以调整。
手册与设计资料: www.st.com
打开芯片手册,然后找到pin definitions页面,这里主要查看一些特殊功能的引脚,例如adc、uart、spi用的是哪些io,确定下来后,把其它的通用IO也逐一确定即可,这些通用的IO后续绘制原理图时,还可以调整。

2、使用STM32Cubemx工具确定

2-1、安装STM32Cubemx
https://www.st.com/zh/development-tools/stm32cubemx.html
2-2、打开软件,创建工程
File->New Project->stm32f103cb

2-3、设置系统时钟为外部时钟
因为我们高速时钟想使用外部8MHz的晶振,当然了,也可以使用内部时钟,对精度要求不高的话,低速时钟就不需要的,因为我们用不到RTC功能。

设置时钟为72MHz,外部晶振8MHz

2-4、设置Debug方式支持Serial Wire
后续可以使用Jlink SWD进行烧录仿真
2-5、确定对应IO
到这里,你就可以选择对应功能的引脚了,例如ADC SPI UART分别是芯片的哪个引脚,记录下来

然后剩余的常规IO,就可以比较随意,大部分引脚都是可以复用的,直接在右边的芯片上点击选择即可,对应IO设置为输出输入,这一步可以打开示例工程参考哦!!

三、绘制原理图和PCB Layout

1、外设部分原理图的绘制

2、STM32的最小系统绘制
绘制完外设后,我们看下STM32的最小系统如何绘制
-
电源
-
外部时钟
-
运行模式
-
烧录仿真接口
外设:



3、BLE透传模组
由于STM32是没有蓝牙功能的,而我们需要和手机进行通讯,这里我们使用了蓝牙透传模组,通过串口与STM32进行数据透传。
蓝牙部分我们使用串口2进行数据交互,所以需要重写串口2的处理函数
我们使用的蓝牙模组是RF Crazy/智汉的模组,主要是立创上购买方便,大家也可以根据自己需要选择其它模组。
模组的连接非常简单,只需要提供电源和地,然后串口连接STM32的串口即可通讯。

4、把芯片IO和外设连接起来
有了芯片和外设,那芯片如何控制外设或者读取外设状态呢?这里就需要把芯片IO和外设连接起来了。只需要用标签连接起来即可。
5、接下来就是PCB Layout

四、生产、焊接、快速调试
1、生产
2、焊接
-
准备好PCB、元器件、电烙铁、焊锡、镊子、万用表。
-
打开BOM表或者PCB工程,然后从电源模块开始,找到要焊接的元器件型号,逐个模块焊接,切记不要一下子焊完所有模块,否则很难定位排查问题。
-
每个模块焊接完成后,对照原理图、PCB工程,用万用表先检查下有没有焊接错误、短路、虚焊等情况,一个焊点一个焊点确认,确认没问题后在焊接下一个模块。
一般的焊接流程是:
-
充电管理模块
-
开关
-
电源指示灯
-
稳压3.3V (先焊接模块11,才能使用开关打开电源到稳压3.3V)
-
CH340
-
打印头相关
-
STM32芯片
-
升压模块
3、焊接完排查说明
焊接完成后,切记不要马上上电,先目测、用万用表检测下,有没有焊接错的地方,特别是要检查各路电源有没有短路,确保没有短路后,上电第一时间也要观察下有没有异常,有异常迅速拔掉电源。
目测没有异常后,先检测下所有的电源电压是否正常,在确定所有电源电压正常后,就可以接到电脑,烧录程序啦。