0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

机智云配网教程第三期:单片机代码移植实战

机智云 ? 2025-07-01 17:32 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群


前言519da97a-565e-11f0-b47f-92fbcf53809c.png


本篇文章将分享单片机移植的经验。可以下载并按步骤移植,也可以直接使用已移植好的工程文件。文中将介绍我在移植过程中遇到的问题,并提供解决方案,供大家参考。


准备工作519da97a-565e-11f0-b47f-92fbcf53809c.png


1.硬件:主控:stm32f103c8t6 ,WiFi模块:ESP-01s ,下载器:ST-LINK


2.软件:keil5的工程文件模板,mcu代码包

代码资源:未移植和移植后

(注:本文是基于stm32标准库移植,不是HAL库,HAL可参考第一期给的资源)



各模块介绍519da97a-565e-11f0-b47f-92fbcf53809c.png


1、keil工程说明


下载完未移植的代码包后,打开工程,在System中有我配置的配网的基本模块:USART1(用于串口调试,接USB转TTL连接到电脑上,打开串口助手对后期通信进行测试,单本部分功能我并未用上,也未进行测验,就不误人子弟了,不影响配网),USART3(用于WiFi通信,必要),TIM3(1ms定时,必要);在Hardware中有个RGB模块(其实就是点灯),后期用于验证。





51c23150-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


2、MCU代码包说明





51e9468c-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png
代码移植519da97a-565e-11f0-b47f-92fbcf53809c.png


1、打开开发指南,开发指南中有我们移植需要做的具体工作,以及每个文件,函数的说明,就不在过多介绍,下面直接开始移植。





5212e000-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


2、将MCU代码包的Gizwits和Utils复制到keil的工程文件夹中。

3、打开工程,将上面两个文件加入工程中,并将路径包含进去。





5259170a-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


(注:如果运行报错可以看下C/C++文件路径:keil5的include路径要根据自己下载的keil5路径选择;Linker也可看下是否有此行,同理根据自己的keil5的下载路径找)





5284ece0-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


4.通信串口(USART3)接收配置:开发指南中给的是USART2,不过不影响,也可以改用其他的串口(注:stm32f103c8t6只有USART1-3)。将开发手册中串口2的中断函数移植到工程文件的USART3中断函数处。并将串口2改成串口3:USART_ClearITPendingBit(USART3,USART_IT_RXNE);

value = USART_ReceiveData(USART3);移植完后会报一个警告,在上面加上( #include "gizwits_product.h" )头文件即可。





52a2ffe6-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png





52c7fb0c-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


4、发送数据配置:在工程中打开gizwits_product.c文件,找到开发手册中给出的函数,将红色部分串口改为3,


USART_SendData(USART3, buf[i]);

while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);


USART_SendData(USART3,0x55);

while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);移植进去,再将usart3的头文件( #include "usart3.h" )包含进去。





52e585f0-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png





5307da38-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


5、1ms定时器(TIM3)配置:开发指南给的是TIM3,这里我们也选择TIM3(也可配置其他定时器,但此开发板只有TIM1-4,建议不要使用TIM1高级定时器,因为其他三个定时器都有TIMx_IRQn中断,但TIM1没有,用TIM1_UP_IRQn没有效果,这是我在配置过程中遇到的问题之一,仅供参考,有大佬知道原因也可以告诉我。)只需将红色部分( gizTimerMs(); )移入我们工程的TIM3中断函数处,在加上( #include "gizwits_product.h" )头文件,此时依旧会报一个警告,我们再回到gizwits_product.c文件,找到void gizTimerMs(void);将其复制到gizwits_product.h文件中声明一下。



53389196-565e-11f0-b47f-92fbcf53809c.png534c4204-565e-11f0-b47f-92fbcf53809c.png535f272a-565e-11f0-b47f-92fbcf53809c.png5374be50-565e-11f0-b47f-92fbcf53809c.png


6、芯片复位:打开gizwits_product.c文件,找到void mcuRestart(void),将机智云提供的复位函数


__set_FAULTMASK(1);

NVIC_SystemReset();


复制进去。


53822e82-565e-11f0-b47f-92fbcf53809c.png

539fcfd2-565e-11f0-b47f-92fbcf53809c.png


7、串口打印功能(USART1):此部分功能我并未测试,大家可以自己去测试看看,不测试也没关系,大家保留工程中的USART1文件内容不变即可,不影响配网,但要注意,由于文件中有重定向的的函数int fputc(int ch, FILE *f),所以在编译前一定要在魔法棒里C/C++中勾选Use MicroLIB,否则程序会卡死。!!!另外,在此文件中一定要加上头文件( #include "gizwits_protocol.h" )。这是我后面下载后发现产生不了WIFI信号又补充的。


53ae85d6-565e-11f0-b47f-92fbcf53809c.png

53c495c4-565e-11f0-b47f-92fbcf53809c.png53e57348-565e-11f0-b47f-92fbcf53809c.png


8、串口和定时器配置完成后,我们在main.c文件中进行添加头文件( #include "USART3.h"

#include "usart1.h" #include "tim3.h" )和初始化( USART3_Init(9600);USART1_Init();

Timer_TIM3_Init(10-1,7200-1); ),编译运行,没有报错。





53f9da7c-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


9、main.c函数移植:打开之前生成的MCU包,打开User里的main.c,将userInit(); gizwitsInit();和userHandle();gizwitsHandle((dataPoint_t *)¤tDataPoint);复制到我们工程文件的main.c文件对应处,此时会报错,我们再将头文件( #include "gizwits_product.h"

#include "gizwits_protocol.h" )添加进去。


54203c4e-565e-11f0-b47f-92fbcf53809c.png

5433cd2c-565e-11f0-b47f-92fbcf53809c.png


10、配网设置:配网模式有AIRLINK(自动)和SOFTAP(手动)两种,机智云给的开发指南建议用按键进行配网,由于本工程并没有按键模块,所以我们不用按键,直接进行配网。将开发指南的两个

配网指令( gizwitsSetMode(WIFI_SOFTAP_MODE);gizwitsSetMode(WIFI_AIRLINK_MODE); )直接复制到main.c文件中,先启用SOFTAP模式,编译。





544a4b88-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png



硬件连接519da97a-565e-11f0-b47f-92fbcf53809c.png


54712e56-565e-11f0-b47f-92fbcf53809c.jpg519da97a-565e-11f0-b47f-92fbcf53809c.png


(注:EN引脚一定要使能,接VCC,否则即使文件配置好了,也不会产生WIFI,我之前就是没配置EN引脚,导致我花了好几天才找到这个问题)


配网(SOFTAP)519da97a-565e-11f0-b47f-92fbcf53809c.png

1、手机先产生一个热点。设备名称:尽量为英文,短点 ,密码:配置简单点,重点是在更多共享配置里将热点的AP频段配置成2.4GHz。





549be128-565e-11f0-b47f-92fbcf53809c.jpg519da97a-565e-11f0-b47f-92fbcf53809c.png


2、将程序下载进开发板,调试,此步骤需要进行反复调试,运气好可能可能第一次就会收到一个WIFI信号,运气不好可能就要反复调试。


调试的办法有:1.程序下载完成后,拔掉ST-LINK,再充新插上,刚上电可能看见WiFi模块上的蓝灯频繁闪烁,打开手机WIFI搜索热点,看看是否有XPG-GAgent-开头的热点,如果灯灭了还有热点,那么就继续拔掉重插。


3、将WIFI模块的vcc供电拔掉,重新插上,开始时WIFI的蓝灯闪烁的也比较频繁,打开手机WIFI搜索热点,看看是否有XPG-GAgent-开头的热点,如果灯灭了还有热点,那么就继续拔掉重插。


(如果前面步骤没问题,重复上面两步,就可以接收到一个XPG-GAgent-开头的热点,我也不知道怎么回事,我前一个项目很好配,而这个项目我在写文章的时候要调试好几遍,才能配上,可能串口不一样吧。)





54babae4-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


4、打开手机机智云APP,直接跳过登录,点击右上角加号-------热点配网-------手机要连接上路由器或者另一个手机的热点(这个连上直接有,一般不用填)--------然后填写机智云的热点和密码(默认:123456789)------下一步------选择WIFI模块(ESP-01s选乐鑫就行)-----一直下一步跳转到XPG-GAgent-连接页面-----连接之后退回-----开始搜索,这个即使配网完成也不会自动取消,到时未取消会显示配置超时,不用管,返回就可以看到配网成功。


54d3a7e8-565e-11f0-b47f-92fbcf53809c.png0154e6fa6e-565e-11f0-b47f-92fbcf53809c.png0254f4b776-565e-11f0-b47f-92fbcf53809c.jpg03

5508cb44-565e-11f0-b47f-92fbcf53809c.jpg

04


此时,配网就完成了(同理也可以配置成AIRLINK模式,在keil里烧录对应指令,然后手机一键配网)。



验证

即使连上网了,我们如何知道是否能成功发送数据呢,我们以LED点亮验证一下。


在开发指南中提到了数据下发和上报的两个功能函数userHandle();和gizwitsHandle((dataPoint_t *)¤tDataPoint); 我们也将其放在while循环中,下面我们就用它们来验证功能。


1、回到keil工程,打开gizwits_product.c文件,将rgb.h的头文件包含进去( #include "rgb.h" ),然后将开灯和关灯的指令分别放进以下位置。(注意:自己的led是怎样的,我用的是共阴的RGB灯)。





552d660c-565e-11f0-b47f-92fbcf53809c.png519da97a-565e-11f0-b47f-92fbcf53809c.png


2、编译,下载。然后拔掉电源重新配网。(第二次配的就比较快了)。



结果演示519da97a-565e-11f0-b47f-92fbcf53809c.png


开关:

55bac844-565e-11f0-b47f-92fbcf53809c.jpg

55cdcc46-565e-11f0-b47f-92fbcf53809c.jpg

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6068

    文章

    45032

    浏览量

    652119
  • 代码
    +关注

    关注

    30

    文章

    4905

    浏览量

    70988
  • 机智云
    +关注

    关注

    3

    文章

    621

    浏览量

    26913
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【有奖问答】疯狂爱答之单片机-第三期

    疯狂爱答有你好看,感谢童鞋们对前两的参与和支持,疯狂爱答之单片机-第三期走起!一起疯狂答题吧!点击查看【有奖问答】疯狂爱答 汇总(4月15日更新) 一、活动时间:4月15日-4月22日(每周一
    发表于 04-15 15:00

    【有奖问答】疯狂爱答之单片机-第三期获奖名单公布

    第三期结束,小编周末去了桂林一趟,桂林山水真的很美,希望疯狂问答也能带给您们美丽和智慧{:4_95:}赶紧加入我们吧!点击查看【有奖问答】疯狂爱答 汇总(4月22日更新)第三期获奖名单公布:一等奖
    发表于 04-22 10:25

    【有奖问答】疯狂爱答之电路设计-第三期获奖名单公布

    第三期结束,小编上周末去了桂林一趟,桂林山水真的很美,希望疯狂问答也能带给您们美丽和智慧{:4_95:}赶紧加入我们吧!点击查看【有奖问答】疯狂爱答 汇总(4月22日更新)第三期获奖名单公布
    发表于 04-22 11:04

    【有奖问答】疯狂爱答之电源技术—第三期获奖名单公布

    第三期结束,小编上周末去了桂林一趟,桂林山水真的很美,希望疯狂问答也能带给您们美丽和智慧{:4_95:}赶紧加入我们吧!点击查看【有奖问答】疯狂爱答 汇总(4月22日更新)第三期获奖名单公布
    发表于 04-22 11:34

    【有奖问答】疯狂爱答之FPGA—第三期获奖名单公布

    第三期结束,小编上周末去了桂林一趟,桂林山水真的很美,希望疯狂问答也能带给您们美丽和智慧{:4_95:}赶紧加入我们吧!点击查看【有奖问答】疯狂爱答 汇总(4月22日更新)第三期获奖名单公布
    发表于 04-22 13:36

    开关电源免费教程(第三期)开关电源的钳位电路讲解

    本帖最后由 张飞电子学院吕布 于 2021-3-26 15:05 编辑 大家下午好!该系列视频为开关电源免费教程,特邀姜维老师为大家讲解,本期为第三期内容。持续关注,我们会继续更新!大家有关于开关电源以及工作中遇到的关于电源相关的难题,都可以在帖子下面与我们交流讨论。上期回顾:输出二极管选取
    发表于 03-19 14:00

    【视频教程】单片机新手教程(第三期单片机介绍

    本帖最后由 松山归人 于 2021-3-26 16:02 编辑 大家下午好!今天邀请了张角老师,来为大家深入讲解单片机,视频为一个系列,本次为第三期内容,请持续关注,我会进行更新!上期回顾:单片机新手教程(第二
    发表于 03-26 15:55

    【视频教程】单片机新手教程(第四单片机介绍

    本帖最后由 松山归人 于 2021-3-26 16:01 编辑 大家下午好!今天邀请了张角老师,来为大家深入讲解单片机,视频为一个系列,本次为第四内容,请持续关注,我会进行更新!上期回顾:单片机新手教程(
    发表于 03-26 15:57

    单片机实战教程(第三期)M1A时钟PCB布局

    本帖最后由 松山归人 于 2021-4-7 14:48 编辑 大家下午好!今天给大家带来单片机实际项目教程,由黄忠老师为大家讲解,本期内容为第三期,M1A开发板PCB布局详细讲解,欢迎大家留言讨论与交流! 上期回顾:(第二
    发表于 04-06 15:31

    单片机实战教程(第四)M1A时钟PCB布局2

    大家下午好!今天给大家带来单片机实际项目教程,由黄忠老师为大家讲解,本期内容为第四,M1A开发板PCB布局详细讲解,欢迎大家留言讨论与交流!上期回顾:(第三期)M1A时钟PCB布局
    发表于 04-06 15:35

    硬件实战教程(第三期)常用运放电路原理图讲解3

    本帖最后由 松山归人 于 2021-4-17 09:31 编辑 大家上午好!这是我们硬件实战教程的第三期内容,由鲁肃老师继续为大家带来一个实例项目的讲解。大家关于原理图设计的问题都可以提出来
    发表于 04-09 09:41

    硬件免费教程(第三期)稳压电源LDO详解

    大家下午好!今天给大家带来郭嘉老师的硬件教程,本次视频为第三期,本次视频教程全部免费公开。我们会持续进行更新,有问题可以留言一同交流讨论。上期回顾:硬件免费教程(第二)基本积分运算电路和微分电路及公式推导
    发表于 04-16 14:03

    动手玩转Arduino(第三期)

    动手玩转Arduino(第三期),下来看看
    发表于 07-08 15:20 ?12次下载

    无线在中国-第三期-PDF

    电子发烧友网站提供《无线在中国-第三期-PDF.pdf》资料免费下载
    发表于 11-17 10:48 ?0次下载
    无线在中国-<b class='flag-5'>第三期</b>-PDF

    课回放 I 升级版“一站式” PCB 设计第三期:原理图完整性及可靠性分析

    课回放 I 升级版“一站式” PCB 设计第三期:原理图完整性及可靠性分析
    的头像 发表于 05-10 11:09 ?253次阅读
    <b class='flag-5'>网</b>课回放 I 升级版“一站式” PCB 设计<b class='flag-5'>第三期</b>:原理图完整性及可靠性分析