生态系统

功能安全 云连接 信息安全 电机控制

 STM32Cube嵌入式软件新成员——扩展功能插件


欢迎大家继续观看《STM32 生态系统》 介绍,第五期:STM32Cube嵌入式软件新成员 – 扩展功能插件。之前有平台反映,这个STM32生态系统的范畴好大,前面刚对STM32Cube工具有了一个总体认识,后面又切换到了两集STM32WB,然后又跳到cloud云连接来讲。这里我觉得有必要给大家一个整体的课程认识。确实,STM32生态系统的范畴非常大,但是在我这套视频规划里,它会从三个不同的角度来入手,分别是:芯片本身,即表格里的silicon;垂直应用,即Vertical这一列;还有就是横向的transveral,无论使用哪个STM32系列芯片,做哪方面的应用开发,都会用的STM32Cube 软、硬件工具。我会在这三个方面穿插来讲。


【芯片角度】STM32系列很多,这里主要针对ST当前主推的产品,比如STM32WB,它有哪些软硬件设计资源,工具;它和以往系列不同的地方,比如芯片的有线和无线升级这个话题,要做WB的有线近距离升级和远距离无线升级,需要用到的软件工具、协议栈、固件包等。在芯片这个维度,后续计划有STM32H7双核通信和调试,首个支持TrustZone架构的STM32L5。


【垂直应用角度】,Cloud的方案,会展开来讲,包括预测性运维、资产追踪和管理。在连接这个基本功能点,我们会介绍不变应万变的标准paho mqtt客户端,适配不同云平台连接的方式;Security信息安全,是IoT应用最重要也是最敏感的内容,STM32在这方面有大量的软、硬件积累,参考代码,方案,服务。会是后续的一个重点内容。


【Cube工具】今年推出的STM32CubeIDE,很多用户表现出了极大地兴趣,我们也会有针对性的做一些深入介绍

接下来,我们就回归本期的主题,STM32Cube嵌入式软件新成员:扩展功能插件。我把它也放在第三列,transversal,是考虑到它属于STM32Cube固件包的一种新的发布形式,用户在使用的时候,与以往的Cube MCU固件包、Cube功能扩展包有所不同,具有更大的灵活性和扩展性。

STM32Cube



页面左边的四大类工具,是在《生态系统 第一期》讲过cube tool。它们大部分是横向的transversal,即无论使用哪个STM32系列,做什么应用开发,都会用到的软件工具。最后一个CubeMonitor是有特定的应用范围。


页面的右边是STM32上的固件包,运行在STM32上的各种协议栈,功能库,例程等等。其中,右上的CubeMCU固件包,针对每一个STM32系列有独立的固件包。它里面的功能是generic、横向的。右下的Cube功能扩展包针对具体某一个功能。这两种固件包,大家都已经非常熟悉。今天我给大家介绍STM32固件包的新成员:功能扩展插件。



固件包


(1)STM32Cube MCU固件包



虽然大家对STM32Cube MCU固件包已经很熟悉了,从2014年第一个STM32CUbeF4问世,后面每个新出来的产品系列,都有一个独立的Cube MCU固件包;同时对在F4之前出来的F1、L1、F2也都补上了对应的Cube MCU固件包。但是随着Cube家族的扩充和演进,每个系列的Cube MCU固件包也不断有新的feature融入。


就拿下载方式来讲,以往的传统方式是去网站,每个独立的Cube MCU固件包有独立的下载页面。随着CubeMX的引入和发展,所有的Cube MCU固件包都可以以CubeMX为操作平台,自动刷新有无版本更新,并且通过在CubeMX界面上一键下载,无需再手动登录到官网页面,搜索这张胶片,概况了到现在2019年底,STM32官网上发布的14大系列产品线,它对应的Cube MCU固件包。刚才说,Cube MCU固件包里的功能是横向的,因此可以看到它包括了很多中间件模块,比如FreeRTOS,Fatfs,USB主机/设备协议栈、LwIP TCP/IP协议栈等。

以G0的MCU固件包为例,我们看一下它里面的结构和内容



胶片左图展开了 STM32CubeG0 固件包的结构。
>> 因为它是专门针对G0系列的,因此Driver目录下只有G0的HAL驱动
>> 中间件目录下,可以看到有来自第三方的文件系统Fatfs和FreeRTOS,来自ST的USB PD协议栈
>> project目录下,可以看到目前ST官方有6块基于G0的评估板,在这个目录的,每个评估板的子目录下,分别存放着在这个评估板下,pre-build好的项目。无需修改,下载后即可运行。


每个Cube MCU固件包里都有几个重要文档,希望大家不要忽略。
>> 在Documentation目录下,有个PDF文档,每个系列固件包里该文档的内容都差不多,第一次使用STM32Cube MCU固件包,建议好好读一下;它介绍了这个MCU固件包的架构、具体内容(支持的板子、文件夹内容)、如何运行首个例子程序,并如何从参考例子的.ico文件开始,开发自己的应用
>> Release Note,是在Project目录下,它说明了该Cube MCU固件包里每个软件模块的license,软件包里的bug
>> CubeProjectList,也是在Project目录下,打开文件来看:一个表格,每一行是一个例子;每一列是一个板子;交叉处即是:该板子上是否有这个例子。交叉处的【-】,表示没有;【X】表示有;【CubeMX】表示该例子是由CubeMX工具生成的初始化吸、外设、中间件等,因此它有对应的*.ioc文件。


(2)功能扩展固件包




第二种STM32固件包是“STM32Cube功能扩展固件包”,目前它还不能像Cube MCU固件包那样,可以在CubeMX里刷新、查询是否有更新,并一键下载。还是需要手动到ST官网上下载,网址如图。胶片里贴的是Cube功能扩展包的主入口页面,扩展包的名字通常以X-Cube或者FP-开头。通过filter可以筛选以缩小搜寻范围。页面上筛选后的列表还可以通过export功能以excel文件形式导出。一般用户不大会用到,通常找到需要的功能扩展包,点击超链进去,就可以下载压缩包以及相关使用文档。


我们以X-Cube-AWS这个功能扩展包为例,



X-Cube-AWS是压缩包的名字,解压后就是STM32CubeExpansion_Cloud_AWS,加上版本号作为尾缀。顾名思义,该功能扩展包就演示如何连接AWS IoT云平台的,该功能不在普通的Cube MCU固件包中,因此是一个“扩展”的功能。从Driver目录下,看它包含了F4、F7、L4三个系列的HAL驱动;同时Projects目录下,可以看到它支持了四个板子,有在这四个板子上pre-build好项目例程。这是和MCU Cube固件包第二个不同的地方。


和MCU cube固件包一样,每个功能扩展包也有相应使用文档,有些还有额外的辅助工具(比如这里的AWS-Dashboard,它是一个ST在AWS服务器上搭建的前端页面。用户在STM32板子上运行X-Cube-AWS例程的时候,可以在这个网页dashboard上,以视图的方式看到板子上传的传感器数据,并遥控板子的LED开关)。有些功能扩展包,还有搭配的手机app,配合使用。

总而言之,功能扩展包,它是针对一个特定的,在Cube MCU固件包中没有的功能;通常支持多个芯片系列的ST官方评估板。





功能扩展插件



然后来看,今天要讲的STM32固件新成员:STM32Cube功能扩展插件。Cube功能扩展插件,顾名思义,和刚才讲的Cube功能扩展包,有着紧密的联系。一个是“插件” ,一个是“包” 。第一个好消息是,目前所有ST官方发布的STM32Cube功能扩展插件,都可以和Cube MCU固件包一样,由CubeMX自动去检查版本更新,并可以一键下载。从胶片里的截图可以看到,目前已经有5个功能扩展插件出来了,他们的名字和对应的功能扩展包一样,因此功能扩展插件是基于功能扩展包出来,且二者是兼容的。



(1)以X-Cube-BLE1插件为例

一方面,它可以从CubeMX中自动下载,选择最新版本4.4.0,在电脑上默认的存放地址在STM32Cube的repository目录,如图。另外一方面,也可以使用传统的Cube功能扩展包的下载方式,去ST官网搜索找到对应页面,最新版本4.4.0,下载并保存到电脑上的任意路径。压缩包解压后的结构和内容如图,文件夹名称,尾缀是V4.4.0。


X-Cube-BLE插件是从扩展包演讲过来的,因此我们先来看一下压缩包解压后放在根目录下的release note。


X-Cube-BLE1,从2014年出来第一版,演进到v3.3.0,都是独立的Cube功能扩展包。从2018年6月份,4.0版本,X-Cube-BLE1同时兼容功能插件。并且插件随着CubeMX的版本演进而演进。插件当前最新版本4.4.0,需要至少5.2版本的CubeMX,目前最新的5.4版本CubeMX也可以使用它。
我们稍后会把V3.3.0和V4.4.0两个版本的X-Cube-BLE1比较一下。看看支持插件功能的新一代扩展包和传统功能扩展包的区别。


和release note同样路径下还有一个pdsc文件,这是对插件pack的描述文件。



从pack的版本历史section,也可以看到它一路演进的过程。可以看出,从CubeMX5.x版本后,Pack的版本号,和X-Cube-BLE1功能扩展包的版本,保持一致了。然后过往版本的插件也都可以在CubeMX中看到,并都可以下载。这是Cube MCU固件包和Cube 扩展功能插件集成到了CubeMX中,对用户很大的一个便利之处。一键下载,以及历史版本都可以获得。



(2)V3.3.0和V4.4.0两个版本的X-Cube-BLE1比较



左图是Cube-BLE1,3.3.0,不支持pack时候的文件结构和 内容;右图是Cube-BLE1,4.4.0,支持pack后的文件结构和内容。后者多了一个CubeMX文件夹,一个pdsc文件,一个标号为DM00367782的licence文件;在Documentation目录下,还多了一个Getting start文档。这些新增的内容,都是CubeMX功能插件带来的。


其他的内容差异,比如Projects目录下内容的变化,则是由于STM32Cube规范的演进带来的:在4.4.0里面,例程分别在每个所支持的板子的目录下,预编译项目支持三个板子;每个板子的目录打开,可以看到支持哪些demo,一目了然;3.3.0里,在project/multi/applications目录下的readme.txt才看得到支持哪些板子。


需要强调的是:由于4.4.0同时支持新的pack插件功能,还要兼容以前的功能扩展包,因此会留有Project目录,以及projects下面支持的若干板子子目录。就Pack插件本身来说,它是完全独立于硬件平台的,不受限于运行在什么板子,是STM32官方评估板,还是客户自己的STM32板子,都可以方便的把功能插件用上去。不像以前的功能扩展包,如果只提供了比如,F401-Nucleo板子上的例程,现在我想跑到F723-discovery板子上,需要手动去做HAL驱动的替换、系统时钟调整等。



(3)Getting start文档


Getting start文档,pack压缩包中自带的是《Getting started with the STMicroelectronics X-CUBE-BLE1 software package for STM32CubeMX的》,讲如何使用X-Cube-BLE1这个插件的。和搭配X-Cube-BLE1功能扩展包下载页面里同步提供的文档UM1873《Getting started with the X-CUBE-BLE1 Bluetooth Low Energy software expansion for STM32Cube》不同。


对于首次使用STM32Cube功能扩展插件的用户,强烈建议花一点时间,先把20多页的用户手册快速浏览一下。它介绍了这个插件包里提供的例子,如何在CubeMX中安装这个插件包、在CubeMX中新建项目后,如何添加插件包中需要的组件,以及如何配置这些组件暴露出来的参数,包括和硬件交互的部分。



(4)以F401-Nucleo板为例,运行X-Cube-BLE1插件。


作为准备工作,要把F401-Nucleo板子的硬件接口理一下。X-Cube-BLE1插件是运行在任意STM32上,和搭载BlueNRG-MS低功耗蓝牙模块的X-Nucleo-IDB05A1扩展包一起工作。蓝牙扩展板和STM32的硬件交互有:SPI总线信号、STM32对蓝牙模块的片选控制和复位信号,蓝牙模块对STM32的中断输入信号。分别罗列在表格中。
另外,F401-Nucleo板上,自己的原生用户接口,比如打印log的串口、控制板上LED灯和用户按键的GPIO,也罗列了出来。这个在使用STM32CubeMX的图形界面配置插件时需要查阅。




视频讲解

接下来我们看一段大约18分钟的视频,讲解如何在STM32CubeMX上使用X-Cube-BLE1插件,并生成示例代码,由ST意大利同事操作录制。

视频:
在STM32CubeMX上使用X-Cube-BLE1插件

现在大家对STM32Cube扩展功能插件的使用,从用户角度有了一定认识。使用它,就和使用原生内嵌在CubeMX里面的中间件,比如FreeRTOS一样,可以方便地跑在任何STM32上,快速集成到项目所选择的STM32应用代码中。

并且它还可以和STM32原生的外设,比如USART,I2C一样,通过CubeMX的图形界面直观的配置。


除此之外,它比普通原生集成的中间件走的更远的是,通过在插件pack中提供例程,这些例程也可以快速方便地集成到任意所选STM32的应用代码里。


大部分的用户看到这里,应该明白,STM32CubeMX作为中心平台,而其上的扩展功能插件,可以极大的丰富STM32的软硬件生态系统。大家肯定希望基于STM32CubeMX的功能插件,越多越好。那么作为STM32的合作伙伴,或者极客爱好者,STM32Cube功能扩展插件是展示你们方案的最佳平台。开发的功能插件,借助于STM32CubeMX平台,可以让成千上万STM32的开发者,快速使用。


那么如何开发一个基于STM32CubeMX的功能插件呢?我们下期来讲。