OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 387|回复: 0

机智云自助代码生成工具支持与STM32CubeMX无缝对接了!

[复制链接]

  离线 

42

主题

60

帖子

0

精华

版主

Rank: 7Rank: 7Rank: 7

积分
237
金钱
237
注册时间
2017-3-30
在线时间
23 小时
发表于 2017-11-21 11:09:31 | 显示全部楼层 |阅读模式
正点原子公众号
本帖最后由 z3512641347 于 2017-11-21 11:15 编辑

1.什么是“MCU代码自动生成工具
为了降低开发者的开发门槛,缩短开发周期,降低开发资源投入,机智云推出了代码自动生成服务。云端会根据产品定义的数据点生成对应产品的设备端代码。
自动生成的代码实现了机智云通信协议的解析与封包、传感器数据与通信数据的转换逻辑,并封装成了简单的API,且提供了多种平台的实例代码。当设备收到云端或APP端的数据后,程序会将数据转换成对应的事件并通知到应用层,开发者只需要在对应的事件处理逻辑中添加传感器的控制函数,就可以完成产品的开发。
使用自动生成的代码开发产品,就不必再处理协议相关的部分了,开发者可以将节省出来的精力集中在产品的核心功能开发上。
2.支持的平台
自动生成服务支持的硬件方案有:独立MCU方案、SOC方案。其中独立MCU方案支持的硬件平台有:stm32f103c8x平台、通用平台(即“其他平台”);SOC方案支持的硬件平台有:ESP8266平台。
MCU方案与SOC方案区别:
[td]
方案
说明
MCU方案模组负责与云端信息的交互,通过串口与主控板(即MCU)进行通信,需要在MCU上进行协议解析与外设控制的开发。
SoC方案节省一颗MCU芯片,利用模组内部资源完成传感器操作和产品逻辑。


搜狗截图20171121110557.png

搜狗截图20171121110625.png


延伸阅读:APP代码自动生成工具
为了降低开发智能硬件APP开发门槛,降低开发资源的投入,机智云在《APP开源框架》基础上进一步推出了实现项目完整控制功能的APP开源代码。当开发者在产品项目上创建对应的数据点后,云端会根据产品定义的数据点生成对应产品的APP参考代码。
自动生成的APP代码模块化集成了一个智能硬件APP必备功能,主要包括:
  • 1.用户部分:用户注册,找回密码、第三方登录(微信登录、QQ登录)
  • 2.配置设备入网(Arilink+SoftAP)
  • 3.设备发现,列表展示
  • 4.设备控制
  • 5.消息推送:设备报警后给APP推送报警信息,主要合作推送平台是极光推送和百度推送。
开发者下载源码后,只需要优化UI和设计设备控制界面控制逻辑,源码的控制页面编写了机智云SDK控制设备的标准流程,APP源码二次开发过程中只需按照该流程进行相关代码的优化即可快速完成针对自身产品的智能控制APP。
目前APP生成的源码支持 Andriod、iOS、APICloud平台。

搜狗截图20171121110644.png

点我了解详情


STM32CubeMX移植机智云自动生成代码详解
文档编辑

前言
本文介绍如何使用STM32CubeMX将机智云自动生成的stm32源码程序移植到其他的MCU平台。
STM32CubeMX工具请在STM官网注册账号后自行下载安装,本文不做详细说明。
本示例使用在机智云自助开发中心生成的STM32F103源码工程,通过STM32Cube 移植到 STM32L496ZGT6 平台(其他STM32平台的移植也与此相似),我们选择的开发板为NUCLEO-L496ZG:
(NUCLEO-L496ZG是ST官方推出的Nucleo系列开发板NUCLEO144系列家族的新品,L4系列综合了低功耗与高性能的优势,其上集成了ST-LINK/V2-1,使用的是STM32L496ZGT6作为主控,具有超低功耗、丰富外设等特性。)
我们可以通过机智云自动生成工具生成STM32F103平台的工程源码(详情查看文档:GoKit3二次开发-代码自动生成工具介绍),下面是生成的源码目录结构说明:
[td]
文件名
说明
Driver
其中包含了所有的库文件
Gizwits
机智云协议处理文件
Hal
外设驱动文件
MDK-ARM
MDK 的工程文件
Inc
STM32源文件的头文件
Src
STM32源文件的 C 文件
Utils
公用工具库文件
.mxproject
STM32Cube 的配置文件
STM32F103C8.ioc
STM32CubeMX 的工程文件(已STM32F103C8平台为例)
注:需要移植的目录为Gizwits、Hal、Utils三个文件。
#移植到其他STM32平台
移植分为以下几步:
1.创建STM32CubeMX 工程文件
在STM32CubeMX中直接选择您所使用的 MCU(比如这里我们选择STM32L496ZGTx) ,如下:
点击“Project → Setting”设置工程目录位置以及相应参数如下所示:
注:这里编译器选择为Keil 5
2.导入机智云模板配置文件
因为机智云自动生成的源码中已经包含了对应平台的STM32CubeMX工程配置文件,相关驱动参数已经是配置过的,为方便开发者将STM32的源码移植到其他的平台,我们可以使用STM32CubeMX的配置文件导入功能,将STM32F103平台的配置参数导入到STM32L496ZGT6平台,如下:
选择File > Import Project
选择在“前言”中介绍过的STM32F103C8.ioc配置文件,如下图所示:
点击“OK”之后可以看到,在STM32L496ZGT6的工程中已经导入的机智云预先完成的配置文件了。
3.特殊处理(只针对STM32 L系类的低功耗平台,其他平台的开发可跳过此步)
由于NUCLEO-L496ZG开发板的USB串口默认连接的是MCU上的低功耗串口(LPUART1),而不是我们在F103平台上的UART1,故将配置中的UART1换为LPUART1,如下图:
注:需手动将管脚PG8/PG7设置为LPUART_RX/LPUART_TX类型
4.生成工程代码
点击Project > Generate Code或者点击快捷图标生成工程代码。
5.编译并配置工程
点击“rebuild”编译工程
点击下载到STM32L496ZGT开发板。如果提示错误,可以点击图标对Option for Target 的Dubug选项进行修改。
注:图上选的是ST-LINK
点击Settings->Flash Download勾选 Reset and Run选项。这样程序下载后自动启动运行,不用再按一下复位或者重新上电才能运行。
点击“DownLoad”烧录按钮如图所示证明烧录成功:
6.移植代码
此时的工程中只有STM32L496ZGT相关的驱动代码,若要使用机智云的联网能力就需要移植相关的协议源码(即前文介绍的已自动生成的STM32F103工程中的三个文件:Gizwits、Hal、Utils)
移植前的STM32L496ZGT工程目录如下:
移植后(即从STM32F103中复制Gizwits、Hal、Utils到STM32L496ZGT下)如下:
接下来我们在STM32L496ZGT的keill5工程中添加如下的目录结构:
同理加入相应的编译路径:
7.添加、修改代码
首先,为了适配对应的平台应在gizwits_product.h / hal_key.h 中替换为对应平台的头文件,例如:
将原来F103C8平台的头文件 #include “stm32f1xx_hal.h”** 替换为L496ZGT平台的 **#include “stm32l4xx_it.h”
注:可以在根目录下的 Drivers\STM32F1xx_HAL_Driver\Inc 中找到对应平台的头文件。
接下来在main.c中添加与机智云协议处理相关的代码:
  • 首先是引用的相关头文件:
[size=1.33333em]/* USER CODE BEGIN Includes */

#include "hal_key.h"
#include "gizwits_product.h"
#include "common.h"

/* USER CODE END Includes */
  • 接下来是相关全局变量:
[size=1.33333em]/* USER CODE BEGIN PV */

/* Private variables ---------------------------------------------------------*/
#define GPIO_KEY_NUM 2 ///< Defines the total number of key member
keyTypedef_t singleKey[GPIO_KEY_NUM]; ///< Defines a single key member array pointer
keysTypedef_t keys;   

/* USER CODE END PV */
  • 下面是长短按按键回调函数的定义:
[size=1.33333em]/* USER CODE BEGIN 0 */

/**
* key1 short press handle
* @param none
* @return none
*/
void key1ShortPress(void)
{
    GIZWITS_LOG("KEY1 PRESS ,Production Mode\n");
    gizwitsSetMode(WIFI_PRODUCTION_TEST);
}

/**
* key1 long press handle
* @param none
* @return none
*/
void key1LongPress(void)
{
    GIZWITS_LOG("KEY1 PRESS LONG ,Wifi Reset\n");
    gizwitsSetMode(WIFI_RESET_MODE);

}

/**
* key2 short press handle
* @param none
* @return none
*/
void key2ShortPress(void)
{
    GIZWITS_LOG("KEY2 PRESS ,Soft AP mode\n");
    #if !MODULE_TYPE
    gizwitsSetMode(WIFI_SOFTAP_MODE);
    #endif
}

/**
* key2 long press handle
* @param none
* @return none
*/
void key2LongPress(void)
{
    //AirLink mode
    GIZWITS_LOG("KEY2 PRESS LONG ,AirLink mode\n");
    #if !MODULE_TYPE
    gizwitsSetMode(WIFI_AIRLINK_MODE);
    #endif
}

/**
* Key init function
* @param none
* @return none
*/
void keyInit(void)
{
    singleKey[0] = keyInitOne(NULL, KEY1_GPIO_Port, KEY1_Pin, key1ShortPress, key1LongPress);
    singleKey[1] = keyInitOne(NULL, KEY2_GPIO_Port, KEY2_Pin, key2ShortPress, key2LongPress);
    keys.singleKey = (keyTypedef_t *)&singleKey;
    keyParaInit(&keys);
}

/* USER CODE END 0 */
  • 接下来是对相关驱动模块以及机智云协议模块的初始化:**
[size=1.33333em]/* USER CODE BEGIN 2 */

  timerInit();
  uartInit();

  userInit();
  gizwitsInit();
  keyInit();
  GIZWITS_LOG("MCU Init Success \n");

/* USER CODE END 2 */
  • 最后是在main函数中的循环处理函数调用:
[size=1.33333em]/* USER CODE BEGIN 3 */

      userHandle();
      gizwitsHandle((dataPoint_t *)¤tDataPoint);
}

/* USER CODE END 3 */
以下是针对L496ZGT平台的特殊修改,其他非低功耗STM32平台可跳过以下内容
由于NUCLEO-L496ZG 串口使用了LPUART1,而不是我们在F103平台上的UART1,故需在部分代码。
将“Gizwits/gizwits_product.c”中的两处 ”huart1” 改为main.c中已自动生成的 ”hlpuart1”
7.编译源码烧录测试
移植完毕相关代码后我们运行编译,编译无错后烧录到NUCLEO-L496ZG开发板。根据CubeMX工程配置文件可知串口波特率为:115200。
进而我们可以连接日志输出管脚来进一步调试我们的源码。

#进阶开发
##应用相关开发
完成STM32相关平台的移植后,我们可以使用机智云提供的各种工具来开发自己的项目,相关介绍请查看机智云文档中心中的Gokit-MCU发开教程等相关章节。
##驱动相关开发
当硬件配置需要更改时,可以使用STM32CubeMX进行相关硬件驱动的配置开发,进而最大限度的减少源码上的重复开发,提高开发效率,这里以按键IO配置为例:
在源码根目录打开对应平台的STM32CubeMX工程文件
在管脚配置(Pinout)界面修改管脚IO配置,例如将原先的KEY1(PB10)改为PE3,类型为GPIO_Input。
进入配置选项(Configuration),将新配置的管脚名称与之前的名称保持一致(这样就不需要更改源码中的宏定义),再选择OK
最后点击源码生成按钮,更新源码中的IO驱动(并不会影响到之前添加的代码)
由于NUCLEO-L496ZG硬件连接的方式与F103中的方式不同(下拉),要修改部分按键驱动中的程序,在 ” Hal/hal_key.c ”中,将:
改为:
[size=1.33333em]if(HAL_GPIO_ReadPin((GPIO_TypeDef\*)keyS->singleKey.keyPort,keyS->singleKey.keyGpio))
编译烧录后,测试按键效果。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-1-21 04:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */