发作品签到
专业版

基于STC32G12K128的核心开发板

工程标签

5.8k
0
0
12

简介

基于STC32G12K128-35I-LQFP64的核心开发板,一款通用性很强的核心板,板载RGB/LED/BLE5.0、IIC传感器模块,标准SPI接口和IIC接口拓展,P0口完全引出。可玩性强!

简介:基于STC32G12K128-35I-LQFP64的核心开发板,一款通用性很强的核心板,板载RGB/LED/BLE5.0、IIC传感器模块,标准SPI接口和IIC接口拓展,P0口完全引出。可玩性强!
STC单片机创意设计大赛

开源协议

GPL 3.0

创建时间:2024-06-17 10:22:18更新时间:2024-07-26 02:44:55

描述

本次训练营,笔者基于STC32G12K128设计了一款通用性兼可玩性的核心板/开发板。板载LED/KEY/RGB/BLE 5.0 /SPI常用脚序插座(可满足大部分SPI模块,特别是OLED的拓展)/IIC常用脚序插座(可满足大部分IIC模块接入拓展)/TF卡模块/XGZP68系列绝压传感器模块/无源蜂鸣器等。另外设置了外部VREF可选开关(2.4999V和3.3V),以及离线使用电池供电和低功耗时快速放电的可选开关。

其中相关模块的设计,可见下图:

微信截图_20240722001328.png

由于核心板设计紧凑,空间有限,仅把最常用的P0口尽数引出,P0口相关的外设和部分引脚功能也在上图中标注出来。

一、实物展示

微信图片_20240722011543.jpg
微信图片_20240722011548.jpg

二、外形设计

作为开发板,应具备有启蒙和快速应用的功能,这是核心的功能需求。
设计要点1:因此需要引出一组到多组的GPIO口。定位简单入门,小巧型,核心板,因此这里选1组~2组;
设计要点2:板载程序下载模块,一个核心板同时具备下载和编程两种功能,就可以更方便用户使用,而不需要过多的"文具"——这里必须要补充说明一下,这里是自嘲,不是针对在座的各位。因为我是差生,而且我文具贼多;
设计要点3:Type-C口,跟上潮流!
设计要点4:最大限度地聚合核心板要素,能够最大限度挖掘STC32G12K128的性能;
设计要点5:拥有LED和KEY这类交互要素;
设计要点6:能够开发一般类器件和模块拓展(如OLED模块,传感器模块等)(常用的外设SPI/IIC/USART/PWM等);
设计要点7:帅;
设计要点8:核心板应拥有layout指南的规范,按照通用规范做系统电路,增设ESD等电路措施,以便二次开发工程师进行直接cv;

但我希望它普通,但又不平凡。这可能很矛盾,但思量后发现并不冲突。因此多了下方一个设计要点>>>

设计要点9:该板本身可以直接做一个项目,而不需要连接任何模块或线缆。
笔者预期想做一个跟水有关的项目:
【3m~5m深度的水下压力检测】笔者不是专门给钓鱼佬的开发的哈,悉知。
这个项目需要几个东西:(1)数据采集(2)数据保存(3)离线电源

增加清单
需求对策
压力数据采集绝压传感器(XGZP68系列)
数据保存BLE 5.0 或 TF卡离线存储
离线电源电池供电接口

基于上述设计要点,笔者对器件等进行简易布局和估算后,可以得到如下的外形图
(也许各位客官看着感觉很马六,但是实际上初稿仅仅是只有30x75的边框和四个d=2mm的定位孔而已,都是调了一版又一版本调出来......再说下初稿其实不是这个,初稿寄了,最后彩蛋给大家放一下。)
image.png

三、原理图设计

(1)芯片核心与外围设计【使芯片正常工作必备的电路部分】
image.png
2024年6月18日,在1000块钱的诱惑下,读了2天STC数据手册,总结出来一个事儿:STC芯片正常工作,只需要(以STC32G12K128-35I-LQFP64为例)

STC芯片工作必备要素表(最低要求)
序号说明
电源脚PIN19接1.9V~5.5V电压,电源脚PIN21接GND
VREF+脚PIN20要么接VCC和PIN19共脚,要么接参考电源,有这个脚的芯片不可悬空该脚
UCAP脚PIN17接一个100nF的退耦电容到GND

就是这么极致的简单!!!

(2)实现USB硬件直接下载的电路【一个芯片同时可以下载和运行程序】
也是那1000块钱,笔者在研究了手册之后,发现STC芯片硬件USB直接下载程序,过程极其简便:
在P3.2口低电平的时候,给MCU供电,直接进入USB下载模式,等待程序烧录。
①设计一个拉低P3.2口的按键电路:
image.png
②选用一枚有EN引脚的LDO芯片,同样用按键控制MCU电源使能:
image.png
【下载程序步骤:按住P3.2_KEY,按下POWER_SW_KEY,松开POWER_SW_KEY,进入USB下载模式】

(3)TYPE-C输入电路设计和ESD相关设计:
①这里注意到需要用TYPE-C进行USB通信,因此需要至少16PIN以上的TYPE-C接口,USB线路的ESD选用通用的2路ESD(USBLC6-2SC6),为了适配TYPE-C取电,需要将CC1和CC2分别通过5.1k电阻接地;
为了适配可能不焊接ESD芯片节约成本,这里放置两个22R电阻位,R10和R11用来替代ESD芯片(2选1)
image.png

②对输入电源做tvs浪涌抑制和简单滤波
image.png

(4)做交互LED、KEY、BEEP
①电源指示灯,这里参考了STC8051U大学计划实验箱V1.0版本的原理图,使用NPN+P-MOS的方案来控制MCU电源使能,顺便点个电源灯,告诉用户,系统接入了+5V电:
image.png

②LEDs,这个不是随便选的,这里P6.0和P6.1除了具备GPIO功能外,还能映射PWM外设。后期可以用PWM进行点灯。点灯工程师福音。
image.png

③PWM点灯都来了,上一个RGB放在板中间,这是超人的光之信仰:
image.png

④由于板子的篇幅,同宽度只能再放一个KEY了,选择P5.4口,P5.4口可以映射到RST功能【这里的R16和C17选焊,一般不需要,因为STC已经将外部复位做到片内了,极致简约的外围!】:
image.png

⑤增加一个蜂鸣器,无源蜂鸣器,使用PWM驱动:
image.png

(5)VREF和BAT接口设计
image.png
这个VREF电路时借鉴大佬的,暂不知设计者是谁,但是大家可以来这个贴子欣赏一下大佬的分析:
一个很精妙的高精度电压基准电路 by micespring

为了省流,大家也可以直接看如下公式:
V_U2_PIN1 = 2.495/220K*(220K+120K) = 3.86V
I_431 = (VCC-2.495)/2M + (3.86-2.495)/680
(忽略2M时)I_431 = (3.86-2.495)/680 = 0.002A = 2mA = 431的手册数据最佳电流值

假设VCC每变化1V,431的工作电流变化1/R7 = 0.0000005A=0.5uA。连1微安都不到。431永远工作在2mA的恒定电流中,任VCC如何变化,都不会发生改变。保证其能一直输出稳定的参考电压。

电池电路接口就不过多介绍,简单说就是用0603的封装,到时候用来焊接电池的正、负极。
为了避免电池和LDO电源冲突,这里使用肖特基二极管,同时配合上面的肖特基二极管,用来选择MCU电源。

(6)外部晶振,简单做一个外部低速晶振,在恶略环境下使用外部时钟源提高RTC的精度
image.png

(7)绝压传感器模块,IIC通信
image.png

(8)BLE 5.0蓝牙,主用透传功能(RF-BM-4044B4,必要时直接开发芯片CC2460,保留二次开发接口)
image.png

(9)TF卡模块,使用SPI协议(注意保留各端口上拉电阻,实际上STC芯片内部可以单独设置上/下拉)
image.png

(10)最后,做一个排针拓展,常用SPI排序和IIC排序,为了对称,把PWM拉2各,在拉1组串口:
image.png

看一眼完整的图
SCH_Schematic2_1-P1_2024-07-22.png

四、PCB设计

接下来就是layout作业,此处省略100字。
(1)前期已经设计好基本的外形、对主要元器件进行了合适布局layout工作主要是.....此处省略100字;
(2)设计丝印——重要。对重要的功能进行丝印覆盖,特别是接口部分,拓展接口进行文字功能描述,方便用户进行对照使用和拓展其他模块接入!
image.png

五、焊接和组装

反正我焊完了,那么就可以大声说:有手就行!
image.png
备注:如果你没有焊完,那就按照先焊接贴片,然后焊接按键...这种传统手艺进行就行。不是很难就不过多进行说明。

六、部分电路模块电压节点测试

(1)焊接完电源部分,测试VCC和GND是否短路,再接入TYPE-C测试LDO输出是否≈3.3V;
image.png
(2)焊接完VREF部分,测试VCC和GND是否短路,再接入TYPE-C测试LDO输出是否≈2.495V;
image.png
(3)焊接完全部,测试VCC和GND是否短路,再接入TYPE-C测试其他例程!

七、核心板例程/程序设计

(1)GPIO_点灯

点灯大师上线,由于是第一个工程,笔者会特别特别特别详细,和大家汇报一下如何使用环境和编程,如果只需要例程或知道如何编译下载程序的,可以跳过本节。【本节是啰嗦模式】
①先看硬件,硬件中三颗LED的功能:PWR_LED插入TYPE-C就点亮,起到电源指示灯的作用;
LED2和LED3分布在核心板下方,使用低电平驱动(大白话就是低电平的时候,该LED点亮,同理,非低电平则熄灭)
【忘了图的滑滑滑滚轮去上边 第三章 第(4)节查阅】

②建立以STC32G12K128为核心的KEIL 5 MDK工程:
选择核心
image.png
魔术棒设置芯片Memory Model 为XSmall(官方推荐模式)
image.png
勾选生产HEX文件,并设置下HEX的具体格式(HEX-386)
image.png
建立.C文本作为main.c(程序会写在这里)(注意下引用头文件)
image.png
将P6.0和P6.1设置为推挽输出模式(学会看手册)
image.png
image.png
再写逻辑(LED2和LED3交替闪烁,闪烁间隔500ms)
image.png
进行编译
image.png
下载前准备工作
image.png
image.png
image.png
image.png

③观察实验现象
2024-07-22-17-46-31.gif

(2)INT0_KEY

中断,顾名思义就是如果给出一个中断信号,(若中断信号优先级高于当前工作)则必须暂停当前行为,去执行对应的中断服务。
在STC32G12K128中,以INT0为例:
image.png

INT0相关寄存器操作
寄存器说明
IE0外中断0标志位
EX0INT0使能位
IT0触发沿(1:下降沿)(0:上升/下降沿)
EA总中断使能位

按寄存器描述初始化相关参量
image.png
编写中断服务函数
image.png
编写事件触发
image.png

观察实验现象
2024-07-22-20-46-55.gif

(3)PWM_BEEP

了解无源蜂鸣器驱动方法:
从数据手册中,可以看到当蜂鸣器驱动频率达到共振频率@4kHz时,声压达到最大值,约为83dB(具体共振频率和最大声压分贝要在所选用的器件数据手册查询得)
image.png
image.png
常用的驱动方式见笔者原理图,或者下图:
image.png
那么该例程的核心工作就是编程一个4KHz的、占空比为50%的、PWM波形即可让蜂鸣器BB

打开数据手册,查询PWM频率计算方法:
image.png
设工作主频为24MHz,不分频,则理论算得:
PWMx_ARR = (24MHz / 4kHz) - 1 = 5999
image.png
设置占空比
image.png
初始化PWM相关
image.png
可以编写逻辑【预设使用按键INT0,切换蜂鸣器的状态:蜂鸣器响时,两个LED亮起;蜂鸣器静默时,两个LED熄灭】
image.png

备注:初始化LED和INT0的内容前期例程描述详细,这里略去讲解(实际已经写在例程中)避免过多冗余。
观察实验现象
image.png
TEK00000.PNG

(4)TIM0_

定时器中断定时触发事件,是单片机应用的基础课,常用于各种自动程序中,拥有广泛的应用场景。
image.png
以TIM0为例,建立工程,完成定时1秒触发事件任务:
image.png
这次先建立逻辑(定时1ms中断1次,则1000次中断触发事件任务:任务是翻转LED2和LED3的电平,实现交替亮灭)
image.png
补充定时器0初始化和定时器0中断服务函数(直接参考官方库函数即可)
image.png
在1ms中断函数中,将1ms的标志位置为高,返回到主函数中进行处理
image.png

观察实验现象
2024-07-22-23-28-36.gif

(5)USB_HID_DEBUG

笔者设计图纸中,TYPE-C直接联通了STC32G12K128内部的USB,因此可以利用STC提供的API进行USB-HID协议打印,用作程序类串口调试。
需要使用STC官方提供的一套"stc_usb_hid_32g.LIB"库文件,就可以简便的使用USB接口进行数据通信:
image.png

将该库添加到工程中:
image.png

按照STC-USB-HID规范,调用STC的API:
添加必要程序:
image.png
主循环里添加USB接收判断、应答指令并简单写一个P32按键触发:
image.png
在STCAI-ISP工具中,按下图进行操作设置:
image.png
按下P32/INT0按钮,触发打印:
image.png

(6)BIT_WS2812B

笔者大意失算了,这款MCU没有DMA直传到PWM,但问题不大,咱们用传统异能!
先了解WS2812B的解码协议:24bit(RGB 888)数据传输,菊花链式的每颗WS2812B都截获24bit,后将数据以不高于800KHz的速度传递给下一颗:
image.png
0,1码根据输入码型图,可知道在一个周期中,T0L占比高为0码,反之为1码:
image.png
码元周期最小值为0.89us,码型时间的典型值如下表所示:
image.png

那么对一个IO口来说,首先设置为准双向口或者推挽输出(建议),0码则需要先置为高+少量延时+置为低+大量延时,满足0码型时间;同理,1码需要先置为高+大量延时+置为低+少量延时,满足1码型时间。

那么us级别的延时,使用_nop_()指令:NOP指令执行时间 = 1/systemCLK * 1T
假设主频是24MHz,那么一个NOP指令的时间约为0.0416us,我们建立一个表格方便构写满足时许:

WS2812B码型表 us
高电平低电平 /
1码0.595us0.295us
0码0.295us0.595us
WS2812B码型表 NOP MIN
高电平低电平
1码0.55/0.0416 = 13.220.2/0.0416 = 4.80
0码0.2/0.0416 = 4.800.55/0.0416 = 13.22
WS2812B码型表 NOP typical
高电平低电平
1码0.595/0.0416 = 14.30.295/0.0416 = 7.09
0码0.295/0.0416 = 7.090.595/0.0416 = 14.3
WS2812B码型表 NOP MAX
高电平低电平
1码1.2/0.0416 = 28.840.35/0.0416 = 8.41
0码0.35/0.0416 = 8.411.2/0.0416 = 28.84

写进函数备用:
image.png

写两个应用程序:
单色呼吸灯:
image.png
幻彩呼吸灯:
image.png

观察实验现象(只放幻彩)
2024-07-23-02-26-36.gif

(7)IIC_XGZP68

STC32G硬件IIC需要切换到对应的引脚,笔者使用P3.2和P3.3组:
image.png
image.png
还需要主机模式时,注意将对应IIC引脚设置为准双向口,特别时SCL,此时为输出模式。由于外部笔者焊接上拉电阻,因此设置为开漏输出:
image.png
IIC通信,需要知道模块IIC地址,从数据手册中进行查询:
image.png
注意地址需要左对齐,符合标准的8bit IIC通信协议:
image.png

所用的型号XGZP6828D,寄存器列表:
image.png
在这个列表中,可知读取0x06、0x07、0x08,获取大气压力测量数据;读取0x09和0x0A获取温度测量数据
image.png
数据按照MSB CSB LSB进行对齐并转换运算,运算公式参考数据手册:
image.png
同理温度数据也如此进行转换。

用上前面章节的USB_HID进行数据打印调试:在程序中,先读取数据,再点灯提示,再输出打印数据
image.png
观察实验现象
2024-07-23-05-27-07.gif

(8)BLE_USART

主要使用透传功能,在原理图中,笔者BLE模块连接到P1.0和P1.1口:
需要将S2_S设置为0,映射引脚
image.png

BLE需要将EN引脚置为0,使能模块,让其蓝牙模块可以被手机端连接
image.png

还需要将BRTS置为0,当且仅当有数据需要发送时
image.png

在程序中,对USART2进行设置:115200波特率,中断使能,接收使能:
image.png
image.png

写一个简单的透传验证程序,定时发送”ABCD”:
image.png
观察实验现象
(这个较大,参考附录文件)

(9)单板成项,项目构建思路:

https://www.bilibili.com/video/BV17B8qeqECN/

八、附录

【附录1】STC IDE MDK环境安装说明
注:需要安装KEIL MDK 5,安装C251编译环境。并使用STCAI-ISP V6.94H工具将STC系列芯片的头文件导入到KEIL MDK 5中,才可以进行相关的例程使用。
下载地址:
STCAI-ISP V6.94H 完整版
STCAI-ISP V6.94H 精简版
【附录2】相关数据手册
相关数据手册包含在例程中,pdf格式,
【附录3】例程/程序设计参考引用说明
注:本开源工程中大部分例程参考官方例程进行改写,下载地址:STC官方库函数(STC32G12K128)
【附录4】初稿彩蛋
初稿仿UNO-R4-WIFI版的查理灯阵和MEGA2560的布局也挺帅阿啊啊,但超了点长度,寄了。
3D_PCB1_2024-07-05_10.1x33.png
初稿是STC32G12K128+STC8H2K08U做全功能引出。本文开源的PCB阉割了至少2组IO口。
image.png

------------------本文到此-------------------------------------------------------END--LINE-----
相关文件可以在附件中获取哦,路过给个赞呗~!

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
ble透传demo.gif
39
2
1_GPIO_LED.zip
24
3
2_INT0_KEY.zip
20
4
3_PWM_BEEP.zip
17
5
4_TIM0_.zip
18
6
5_USB_HID_DEBUG.zip
22
7
6_BIT_WS2812B.zip
20
8
7_IIC_XGZP68.zip
21
9
8_BLE_USART.zip
41
10
9_get pas in water.zip
18
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1)
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航