正点原子探索版STM32F407,接入机智云之代码移植-Arduino中文社区 - Powered by Discuz! Archiver

机智小子 发表于 2021-6-17 12:33

正点原子探索版STM32F407,接入机智云之代码移植

正点原子官方提供了与机智云连接的开发手册,但是手册内容中的Gizwits文件目录和目前的机智云自动生成的代码目录有一定的差异,因此移植过程有了一些改变。为了方便大家针对新版机智云的代码进行移植,也为了给自己的移植过程做一个记录,特此写下正点原子探索者STM32F497的移植过程。


移植步骤


在机智云物联网开发平台新建设备,数据点,生成代码(选择其他平台)并下载。注意:机智云物联网开发平台dev.gizwits.com推荐使用最新的esp8266机智云GAgent固件,其下载地址:/download.gizwits.com/zh-cn/p/92/94选择生成其他平台的代码是标准库,选择F407平台则生成的是HAL库。


https://club.gizwits.com/data/attachment/forum/202106/17/112507qjuevjry1dexkvez.png.thumb.jpg


2.打开正点原子的移植代码:


https://club.gizwits.com/data/attachment/forum/202106/17/112545o6m1ywmgyhykkopq.png.thumb.jpg

文件路径:

https://club.gizwits.com/data/attachment/forum/202106/17/112617mi1miauub6pga1ha.png.thumb.jpg

将我们下载的自动生成的代码中的Gizwits文件夹和Utils文件夹复制到正点原子的移植代码目录中,提示覆盖点击确定即可。
https://club.gizwits.com/data/attachment/forum/202106/17/112633ad673drd9z3q93hc.png.thumb.jpg


打开工程,将Utils文件夹添加到头文件路径中


https://club.gizwits.com/data/attachment/forum/202106/17/112655r6eix949g9g4x99x.png.thumb.jpg


在gizwits_product.c中加入led.h和usart3.h

[*]#include <stdio.h>
[*]#include <string.h>
[*]#include "gizwits_product.h"
[*]//下面两个头文件是我们后来加入的
[*]#include "led.h"
[*]#include "usart3.h"
修改 dataPoint_t currentDataPoint 为 extern dataPoint_t currentDataPoint
[*]/** Current datapoint */
[*]//dataPoint_t currentDataPoint;
[*]extern dataPoint_t currentDataPoint;
找到以下代码,并加入
[*]if(0x01 == currentDataPoint.valueLEDonoff)
[*]{
[*]//user handle
[*]//下面一行是我们后加入的
[*]                        LED1=0;//LED1亮
[*]}
[*]else
[*]{
[*]//user handle
[*]//下面一行是我们后加入的
[*]                        LED1=1;//LED1灭                        
[*]}
将main.c中的 void userHandle(void)
[*]//数据采集
[*]void userHandle(void)
[*]{
[*]//判断当前LED1开关量
[*]if(LED1==0)
[*]currentDataPoint.valueLEDonoff = 1;
[*]else
[*]      currentDataPoint.valueLEDonoff = 0;
[*]
[*]}
剪切到gizwits_product.c中的对应位置
[*]//下面的void userHandle(void)是我们从main.c中剪切过来的
[*]//数据采集
[*]void userHandle(void)
[*]{
[*]//判断当前LED1开关量
[*]if(LED1==0)
[*]currentDataPoint.valueLEDonoff = 1;
[*]else
[*]      currentDataPoint.valueLEDonoff = 0;
[*]
[*]}
修改gizwits_product.c中的 int32_t uartWrite(uint8_t *buf, uint32_t len)
[*]int32_t uartWrite(uint8_t *buf, uint32_t len)
[*]{
[*]uint32_t i = 0;
[*]
[*]if(NULL == buf)
[*]{
[*]return -1;
[*]}
[*]
[*]#ifdef PROTOCOL_DEBUG
[*]GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
[*]for(i=0; i<len; i++)
[*]{
[*]GIZWITS_LOG("%02x ", buf);
[*]}
[*]GIZWITS_LOG("\n");
[*]#endif
[*]
[*]for(i=0; i<len; i++)
[*]{
[*]//USART_SendData(UART, buf);//STM32 test demo
[*]//实现串口发送函数,将buf发送到模组
[*]                USART_SendData(USART3,buf);
[*]while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
[*]if(i >=2 && buf == 0xFF)
[*]{
[*]//实现串口发送函数,将0x55发送到模组
[*]                USART_SendData(USART3,0x55);
[*]while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕
[*]}
[*]}
[*]
[*]
[*]
[*]return len;
[*]}
在gizwits_product.c中的 void mcuRestart(void); 处加入如下代码
[*]void mcuRestart(void)
[*]{
[*]__set_FAULTMASK(1);//关闭所有中断
[*]NVIC_SystemReset();//复位      
[*]}
在gizwits_product.h中加入 void gizTimerMs(void);
[*]void userInit(void);
[*]void userHandle(void);
[*]void mcuRestart(void);
[*]//下面的一行是我们后面加入的
[*]void gizTimerMs(void);
[*]


移植完成


编译下载到开发板即可。
https://club.gizwits.com/data/attachment/forum/202106/17/112752ok4n62noddhdnook.png.thumb.jpg


按下KEY1,用机智云的手机App进行连接调试。


https://club.gizwits.com/data/attachment/forum/202106/17/112811ndirirj8jr882ibk.png.thumb.jpg


https://club.gizwits.com/data/attachment/forum/202106/17/112821ixddddddgxjdkdkd.png.thumb.jpg


进入即可控制LED的亮灭。


https://club.gizwits.com/data/attachment/forum/202106/17/112832jbvbb9ozv55vnxut.png.thumb.jpg

页: [1]
查看完整版本: 正点原子探索版STM32F407,接入机智云之代码移植