01 前言
不知不觉,缺芯已经持续很长一段时间了,芯片价格飞涨,各种M4、M7系列开发板的价格也是水涨船高。作为一个DIYer,不知大家手里还有多少存货,反正我囤的“小芯库”是见底了。一个应用方案或开发板上用一颗甚至好几颗MCU的奢侈年代已经一去不复返,但也因此萌生了做能够复用的“核心模块板”的想法。
刚好拿到前不久申请的几颗极海APM32F407ZGT6样品,就准备用来试试水。仿照Raspberry PI Compute Module做一个基于APM32F407的Compute Module板。
02 整体设计
MCS Compute Module 1(以下简称CM1)是一个使用ARM Cortex-M4 32位微控制器作为核心,拥有板载WIFI & BLE 5.0、Ethernet接口的计算模块。同时用B2B接口保留407大多数外设核心功能,以满足不同开发底板的需求。
业余时间断断续续捣鼓了半个多月,第一版终于出来了。下面简单介绍模块板参数和开发过程。
核心配置
- 极海 APM32F407ZGT6 168MHz 32-bit ARM Cortex-M4 CPU
- 内部192KB + 外部2MB SRAM
- 1MB Flash存储
- 支持 IEEE 802.3的百兆以太网PHY
- 支持 2.4 GHz Wi-Fi和Bluetooth 5.0(LE)
- 支持USB 2.0
- 支持SWD接口下载APM32F407程序
- 支持USB-JTAG下载ESP32 C3程序
B2B接口
B2B接口做成统一的,保证后续设计的CM2、3、4等,能够在不同扩展板上兼容使用。
高速 | 低速 |
---|---|
LCD 8080接口 x 1 | GPIO x 10 |
DCMI-14bit接口 x 1 | UART x 2 |
Ethernet接口 x 1 | I2S x 1 |
OTG_HS接口 x 1 | CAN x 2 |
OTG_FS接口 x 1 | I2C x 1 |
SPI x 1 | |
TIMER通道 x 10 | |
TIMER互补通道组 x 1 | |
SDIO-8bit接口 x 1 | |
DAC通道 x 2 | |
ADC通道 x 6 |
03 硬件设计
原理图
模块各部分原理连接图。
PCB
绘制PCB图,用BGA封装的估计好布线些,建议官方出些不同封装的芯片,满足不同应用场景的需求。
贴片
以下是人工智能贴片(狗头),画这块板时还赶上立创免费打样规则变更,又不见几十大洋。
04 点个灯
发现RT-Thread 4.1版本已经支持APM32F407系列开发,那话不多说,直接用RT-Thread Studio上操作系统点灯。
安装SDK
因为是自己设计的开发板,这里使用芯片支持包开发。
安装JLINK支持
JLINK v7.8以上版本已经支持APM32各系列,不想下载仿真时再多选几个选项的同学可以装个最新版。
创建项目
CM1用到的是APM32F407ZGT6,那么这里的芯片型号也是选APM32F407ZGT6,而RT-Thread选择4.1.0版本。
编写代码
应用程序
在main.c文件中加入LED闪烁和打印“Hello RT-Thread!”的代码。
配置晶振
要留意system_apm32f4xx.c默认使用外部晶振,且配置为8MHz的。因为CM1使用的是25MHz外部晶振,所以需要修改对应值。
下载和调试
下载程序。
启动RT-Thread Studio的串行终端。
可以看到串口打印的字符串。
完成点灯。
05 上个云
设备要上云,肯定需要联网媒介,这里使用板载的ESP32 C3 WROOM模块,并写入ESP官方AT固件。
配置ESP32 C3
ESP官方AT固件可以从gitee获取:
https://gitee.com/EspressifSystems/esp-at
AT固件默认使用ESP32 C3 UART1进行AT指令通信。而CM1是采用APM32F407 USART3与ESP32 C3 WROOM UART0通信的方式。所以需要修改官方固件配置。
修改默认UART口为UART0。
配置不从UART0输出log信息。
加载工程,并编译。
下载固件到ESP32 C3 WROOM。
从ESP32 C3 WROOM预留的调试串口发个"AT"字符,有回应就表示OK了。
具体支持的AT指令可以查看官方手册。
AT Device软件包
接下来就是使用APM32F407控制ESP32 C3 WROOM联网,这里就不重复造轮子了,直接在RT-Thread Studio上使用AT Device软件包(感谢RT-Thread团队)。
添加软件包
打开RT-Thread Settings,添加AT Device软件包。
配置软件包
配置at device软件包和UART设备驱动组件,并保存配置文件,WIFI和串口信息要根据自己设备的情况配置哦。
修改官方代码
官方代码还不很完善,自己添加用于透传的UART3配置。
编译下载
编译后重新下载,可以看到At device通信成功。
OneNet平台创建MQTT产品和设备
OneNet平台的操作有很多文章介绍了,大家可以参考官方文档。
https://open.iot.10086.cn/doc/multiprotocol/book/get-start/product&device/product-create.html
这里要注意的是,使用旧版“多协议接入”创建MQTT产品。不要问为什么不使用新版,问就是催更RT-Thread团队。创建完成后记录设备ID、鉴权信息、设备API Key、产品ID和产品API Key等信息。
OneNet软件包
该软件包只支持oneNET平台的旧版多协议接入(再次催更)。
添加软件包
配置onenet软件包并填入创建产品和设备时记录的相关信息。
配置完成后,会同时引用cJSON后WebClient软件包。
这时可以用onenet_sample代码进行测试。
编写OneNet应用API
官方的Demo不完善,可以自己仿照重写一个。
新增bsp文件
工程目录结构如下。
bsp_onenet文件msh命令定义如下。
原onenet软件包的http文件默认接收字符串数据类型的datastream。这些做简单转换,可以接收float等数据类型。
编译下载
在ESP32 C3连接上wifi后,在终端按tab键会打印出msh命令行。
初始化MQTT Server
发布数据
获取数据
OneNet平台
可以看到onenet平台上Template值变为24,也可以上传、读取bin文件做OTA、读取图片做图传显示等操作。
06 加个小程序buff
还没时间搞,先占坑。
07 画个饼
接下来准备做个基于CM1的IOT扩展板、电机扩展板、触屏小终端、各种应用例程等等可以充分发挥APM32F407芯片性能的DIY,感兴趣的小伙伴可以插个眼,蹲个后续。