新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > STM32开放式开发环境:释放创造力的利器

STM32开放式开发环境:释放创造力的利器

作者:时间:2016-08-02来源:电子产品世界收藏

  市场上涌现各种价格亲民的经济型微控制器,助力新一代开发者创造令人兴奋的新型嵌入式应用。如今的开发工具非常好用,软硬件均呈现模块化趋势,插接安装简单容易,使得产品设计评估和原型开发周期大幅缩短。开放式开发环境是业内独一无二的软硬件开发平台,堆叠式插接电路板集成各种模块化硬件,同时模块化软件覆盖从驱动程序到应用层的全部软件,帮助设计人员将创意快速变成产品原型,顺利转化成最终设计。

本文引用地址:http://www.eepw.com.cn/article/201608/294894.htm

  开放式开发环境是什么?

  开放式开发环境 是意法半导体开发的嵌入式系统原型设计开发环境,以简化嵌入式项目设计为目标,通过开源形式提供全部重要功能模块,组件包括:

  - 价格极低的STM32 Nucleo开发板(STM32微控制器)和STM32 Nucleo扩展板(传感器、通信接口、电机控制和致动功能),提供基于尖端商用产品的各种硬件功能。

  - 基于STM32Cube软件工具的STM32微控制器软件库和简单好用的软件库配置器(STM32CubeMX )。

  - STM32Cube扩展软件库,支持STM32 Nucleo扩展板上各种器件,包括电机驱动器、低能耗蓝牙模块、传感器等。

  - 功能包:一套利用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)在售,按功能划分,可以分为五类:

  - 感测: 9轴运动传感器; 压力传感器,环境传感器,接近检测传感器; 麦克风

  - 连接: 低能耗蓝牙、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);

  /* Wait for the motor of device 0 ends moving */

  BSP_MotorControl_WaitWhileActive(0);


上一页 1 2 下一页

关键词: STM32 MEMS

评论


相关推荐

技术专区

关闭