市场上涌现各种价格亲民的经济型微控制器,助力新一代开发者创造令人兴奋的新型嵌入式应用。如今的开发工具非常好用,软硬件均呈现模块化趋势,插接安装简单容易,使得产品设计评估和原型开发周期大幅缩短。STM32开放式开发环境是业内独一无二的软硬件开发平台,堆叠式插接电路板集成各种模块化硬件,同时模块化软件覆盖从驱动程序到应用层的全部软件,帮助设计人员将创意快速变成产品原型,顺利转化成最终设计。
STM32开放式开发环境是什么?
STM32开放式开发环境 是意法半导体开发的嵌入式系统原型设计开发环境,以简化嵌入式项目设计为目标,通过开源形式提供全部重要功能模块,组件包括:
- 价格极低的STM32 Nucleo开发板(STM32微控制器)和STM32 Nucleo扩展板(传感器、通信接口、电机控制和致动功能),提供基于尖端商用产品的各种硬件功能。
- 基于STM32Cube软件工具的STM32微控制器软件库和简单好用的软件库配置器(STM32CubeMX )。
- STM32Cube扩展软件库,支持STM32 Nucleo扩展板上各种器件,包括电机驱动器、低能耗蓝牙模块、MEMS传感器等。
- 功能包:一套利用STM32 Nucleo开发板和STM32Cube软件为一些最常用用例开发的功能性例程(代码示例)。
- 每个软硬件功能模块都配备描述详尽的技术文档。
- 活跃的快速发展的在线开发社区
STM32 Nucleo开发板
STM32 Nucleo开发板是STM32开发环境的基础组件,板载一颗基于ARM® Cortex®-M 32位处理器内核的STM32微控制器。STM32开放式开发环境所用的STM32 Nucleo开发板是64引脚版(图1)微控制器。目前STM32 F4和STM32 L0微控制器兼容所有的STM32 Nucleo扩展板和扩展软件。
图1 – STM32 Nucleo-64开发板
开发环境使用基于STM32Cube HAL(硬件抽象层) API的STM32Cube软件库,大幅降低了在不同系列的STM32产品(目前有20余款STM32 Nucleo开发板)中移植软件项目所需的编程工作量。
STM32 Nucleo-64开发板硬件具有以下特性:
- 采用LQFP-64封装的STM32微控制器
- 通过38引脚的Morpho连接器可以使用STM32的所有引脚
- 四个Arduino连接器(位置非对称排列,引导用户正确插接Arduino兼容扩展板)
- 集成ST-LINK/V2-1调试器/代码烧录器和mini USB端口,无需安装额外的调试工具,板子可直连PC机,进行调试和烧写代码操作。此外,USB接口支持虚拟COM端口和大容量存储接口(兼容ARM mbed)
- 2个按键(微控制器复位信号和开发者专用按键)
- 3支LED灯(5V电源、开发者专用、ST-Link调试器状态)
用户可以为板子选用不同的电源:
- 5V USB供电
- 5V外部电源
- 外部电源VIN (7-12V)
STM32 Nucleo开发板上的5V电源还用于驱动通过Arduino或morpho连接器连接主板的扩展板,同时通过板载稳压器为STM32提供3.3V 电源。
STM32 Nucleo开发板功能性极强,板载代码烧写/调试工具非常实用,设计人员可以立即动手开发项目,而无需添置昂贵的开发工具。
基于STM32Cube的嵌入式软件和工具
在选中了最适合自己的STM32 Nucleo开发板后,下一步是下载相关的软件库,熟悉STM32技术特性和外设。最快捷的入门方式是下载软件库配置器STM32CubeMX (www.st.com/stm32cubemx)。在这个工具的图形用户界面内,用户只要直接选择正在使用的STM32 Nucleo开发板(图2),配置器就会按照板子所连接的硬件设备(例如LED、按键、UART引脚分配)自动配置STM32外设。 下一步,可能需要详细配置每个外设,例如,设置UART同步/异步通信模式、波特率、寄偶校验和停止位。
图 2 – STM32CubeMX: 从板子选型到外设配置,只需几步简单的操作。
最后,STM32CubeMX将生成代码,创建一个完整软件项目,且兼容所用代码编译工具链(例如IAR、Keil或Eclipse),同时配置先前在图形用户界面内所选的全部硬件和外设,并兼容所用代码调试/烧录工具。
这个图形用户界面工具让你从零开始创建项目,几分钟完成项目所需的全部配置,然后立即动手创建自己的软件项目,直接在main.c文件里写代码。
图3 – STM32Cube软件库的层次
所生成的代码位于STM32Cube嵌入式软件之上,STM32Cube有两个主层(图3):
- 硬件抽象层:准许上面的软件层(例如,中间件层)执行各自的功能,而无需开发人员深入了解如何使用微控制器
- 中间件:一整套中间件组件(RTOS, USB, TCP/IP, …)
软件设计采用模块化方法,用户在项目开发过程中可以随时添加软件模块,轻松地跨系列移植全部项目。
STM32 Nucleo扩展板
为连接STM32 Nucleo扩展板,STM32 Nucleo-64开发板配备两种连接器:
- 兼容Arduino标准的Arduino连接器(微控制器的32个引脚都在这个连接器上)。
- Morpho 连接器,可以连接STM32微控制器的全部引脚(76个引脚都在这个连接器上)。
STM32 Nucleo扩展板让设计人员像搭积木一样,在主板上插接多块不同功能的子板,创建一个完整的应用系统。目前意法半导体网站(www.st.com/x-nucleo) 上有20余款扩展板(图4)在售,按功能划分,可以分为五类: - 感测:MEMS9轴运动传感器; 压力传感器,环境传感器,接近检测传感器;MEMS麦克风
- 连接: 低能耗蓝牙、Wi-Fi、NFC和Sub-GHz射频;
- 电机控制/致动: 直流电机驱动器、步进电机驱动器、3相直流无刷电机驱动器
- 输入/输出: I/O模块(家庭自动化和工业自动化)
- 信号调理: 运算放大器
图4 – 各种型号的STM32 Nucleo扩展板
STM32 Nucleo板功能扩展方法类似于Arduino和Raspberry Pi解决方案,便于设计人员快捷开发产品原型。利用这些连接工具,可以将扩展板堆叠插接在主板上,给系统增添新的功能,唯一不足之处是,堆叠式连接方法受限于微控制器外设的使用方式,这个问题的解决方法是,使用I2C和SPI总线替代UART等速度慢的数据总线,这样可提高同一总线上所连接设备的数量。此外,Arduino连接器不对称排列设计可有效防止STM32 Nucleo扩展板连接方向错误,降低电源连接错误损坏设备的风险。扩展板使用STM32 Nucleo开发板上LDO稳压器通过板上5V电源生成的3.3V电源,用户可以使用跳线(JP5)为开发板选择USB 5V电源或外部E5V电源。有些扩展板需要更高的电压,例如,电机驱动器和I/O扩展板,因此,开发板上还增加一个电源连接器,利用外部电源驱动负载,提供更高的电压Vbus(最高45V)。
为安全起见,多数扩展板是为低功率应用设计,50V以下电压在电源极性接反或短路时可以降低板子烧毁风险,所以适合初学者和学生使用。
这些低功耗的扩展板还可以单独连接高压高功率的电机控制扩展板,但是,我们只建议电机控制专业人士选用这种配置。为了便于区分,我们将高功率STM32 Nucleo扩展板涂成绿色,其余的扩展板全都是蓝色。高功率电机控制扩展板兼备高压高功率扩展板和低压扩展板的双重优点,在电机控制应用中轻松增加数据通信功能,例如,使用射频技术远程驱动高压电机或使用低能耗蓝牙或Wi-Fi获取电机驱动信息和远程记录失败数据。
STM32Cube扩展软件
STM32 Nucleo扩展板可以像搭积木一样插接到开发板上,几分钟就能组建一个硬件平台。不过,软件才是设计项目中最耗时的环节,通常占用研发周期70-80%的时间。STM32Cube将积木式组装方法带到软件设计中。软硬件一致是STM32开放式开发环境的特性之一,因此,每个STM32Cube扩展软件包都为用户提供例程,其中包含各种软件库,例如,电机控制、低能耗蓝牙协议栈或NFC射频处理功能,全部都是开源软件。
STM32Cube扩展软件包附加的例程非常实用,能够帮助设计人员快速熟悉设备软件库。以下面的步进电机驱动软件演示项目为例,用户可将其中所需功能复制到自己的软件项目:
//----- Init of the Motor control library
/* Start the L6474 library to use 1 device */
/* The L6474 registers are set with the predefined values */
/* from file l6474_target_config.h*/
BSP_MotorControl_Init(BSP_MOTOR_CONTROL_BOARD_ID_L6474, 1);
/* Attach the function MyFlagInterruptHandler (defined below) to the flag interrupt */
BSP_MotorControl_AttachFlagInterrupt(MyFlagInterruptHandler);
/* Attach the function Error_Handler (defined below) to the error Handler*/
BSP_MotorControl_AttachErrorHandler(Error_Handler);
//----- Move of 16000 steps in the FW direction
/* Move device 0 of 16000 steps in the FORWARD direction*/
BSP_MotorControl_Move(0, FORWARD, 16000);
/* Wait for the motor of device 0 ends moving */
BSP_MotorControl_WaitWhileActive(0);
/* Wait for 2 seconds */
HAL_Delay(2000);
//----- Move of 16000 steps in the BW direction
/* Move device 0 of 16000 steps in the BACKWARD direction*/
BSP_MotorControl_Move(0, BACKWARD, 16000);
因为基于STM32Cube的软件库的模块化结构,每个扩展板软件模块都可以作为中间件添加到用户项目,添加操作可以在项目开发过程中随时进行,也可以添加到已经存在的复杂项目内(图5)。
图 5 –STM32Nucleo扩展板软件库作为中间件添加到开发项目内
除STM32开放式开发环境外,还有功能包软件项目和附加软件库
当需要不只一个功能模块时,最快捷的方式是使用功能包软件源代码项目,因为这个软件包将不同的STM32 Nucleo扩展板的软件库整合成一个立即可用的完整项目。
例如,当STM32 Nucleo开发板连接NFC和低能耗蓝牙(BLE)扩展板时,可以下载功能软件包,进行BLE与NFC配对。
除STM32开放式开发环境外,意法半导体还提供各种附加软件库(图6),让开发者在其应用项目内能够使用前几年不易实现的先进功能,例如:传感器数据整合、运动识别、蓝牙语音、声学波束成形、声音定位等,因为这些软件库使用非常专业的IP技术,所以不提供完整的源代码(STM32开放式开发环境软件100%提供源代码), 但是,用户可以从意法半导体网站下载相关许可证,然后花费几分钟激活软件,即可正常使用这些软件。
图 6 – 在STM32开放式开发环境之上的Open.X 软件库和Open.Framework
同样地,开放式功能包也有例程,例如,在BLUE MICROSYSTEM 1演示应用(图7)中,STM32F4读取MEMS加速度计/陀螺仪/磁强传感器数据(RAW格式和传感器数据整合算法输出)、温湿传感器以及压力传感器的数据,通过低能耗蓝牙协议将数据发送到智能手机上的应用程序(图8)。只要将所需的代码段复制到自己的软件项目内,就可以在不同的应用中反复使用代码。同一个演示应用,假如软件设计人员想要从零开始创建,则需要从查看每个设备数据手册信息开始,开发和调试可能需要几个月的时间。
STM32开放式开发环境功能包和Open.Framework实现示例可以在相应的STM32 Nucleo扩展板网页下载,而智能手机/平板电脑的图形用户界面应用软件的源代码需要直接向意法半导体销售代表和授权经销商索取。
图7 – BLUE MICROSYSTEM1 开源功能包演示应用使用了MEMS运动传感器、环境传感器(温度、湿度、压力传感器)和最新的低能耗蓝牙技术。
图8 – 当使用基于蓝牙或低能耗蓝牙的演示板时,可以使用智能手机或平板电脑应用查看传感器数据(相关应用软件可在Google Play或Apple AppStore下载)。
应用项目示例
当使用STM32 Nucleo扩展板的软件项目示例或现有的开源功能包创建复杂的演示程序和系统时,创建速度简单快速。下面是一个玩具小汽车的演示示例,3D遥控器通过低能耗蓝牙(图9)控制小汽车运动。基本软硬件模块包括:
STM32 Nucleo玩具小汽车(硬件): NUCLEO-F401RE、X-NUCLEO-IHM02A1(双步进电机驱动器),、X-NUCLEO-IDB04A1(低能耗蓝牙)
STM32 Nucleo玩具小汽车(软件):X-CUBE-SPN2 (步进电机驱动器软件库基础例程)、X-CUBE-BLE1 (BLE软件库基础例程)
3D遥控器(硬件): NUCLEO-F401RE、X-NUCLEO-IKS01A1 (MEMS传感器),X-NUCLEO-IDB04A1 (低能耗蓝牙)
3D遥控器(软件):BLUEMICROSYSTEM1(通过低能耗蓝牙发送传感器RAW数据和传感器整合数据的功能包)
图9 – STM32 Nucleo玩具小汽车: 玩具小汽车演示板和3D遥控器都是采用STM32 Nucleo电路板
对于穿戴设备和物联网硬件等应用,评估板的外观尺寸有时候是一个不小的问题。为了满足物联网硬件开发者的需求,意法半导体产品阵容开始增加尺寸极其紧凑的小演示板(图10),板上的元器件与STM32 Nucleo电路板完全相同。这样,在STM32开放式开发环境内开发的软件工程项目可以100%移植到这些小板子上。
图10 – 功能包Blue Micro System1从STM32 Nucleo电路板移植到小评估板(用于物联网和穿戴设备)
岂止STM32开放式开发环境,还支持兼容STM32 Nucleo的Arduino电路板
STM32 Nucleo扩展板中还有板载Arduino连接器的Arduino Shield 电路板。因为硬件接口相互兼容,开发人员可以继续使用以前开发的电路板和设备驱动软件和固件库。在www.st.com网站和其它开源软件工程社区,有一些Arduino电路板配合STM32 Nucleo扩展板的直接可用的现成项目:图11所示是一个典型的Adafruit TFT触屏shield板与STM32 Nucleo扩展板相连的演示 示例, STM32CubeF4软件包提供该软件项目。
图11 – Adafruit 1.8” TFT触屏Shield板与STM32 Nucleo扩展板相连的演示示例
释放你的创造力
五年来,软硬件开发环境变化巨大,市场需要更短的研发周期,越来越多的传统消费产品技术(例如:MEMS、 NFC、低能耗蓝牙)被用于工业设备。从3D建模到PCB电路图,更完备的工程项目出现在开源软件工程社区(无人机、3D打印机、传感器数据整合、复杂的音频功能和USB供电等)。
STM32开放式开发环境专注于让开发者的生活更轻松,提供易于定制的基本的和复杂的软硬件功能模块。在系统设计内增加一个射频模块,用于遥控设备或传送数据,不再要求开发者有深厚的射频专业背景,只需将STM32 Nucleo扩展板连接到系统,按照系统要求设置软件项目,几分钟即可完成。
STM32开放式开发环境是业内独一无二的软硬件开发平台,整合基于尖端商用产品的各种扩展板,模块化软件覆盖从驱动程序到应用层的全部软件,帮助设计人员将创意快速变成产品原型,顺利转化成最终设计。