收藏官网首页
查看: 862|回复: 0

[分享] STM32与机智云连接实现步骤与技巧(下篇)

114

主题

123

帖子

5181

积分

论坛元老

Rank: 8Rank: 8

积分
5181
跳转到指定楼层
楼主
 楼主| 发表于 2025-5-22 19:13:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
STM32机智云连接实现步骤与技巧(下篇)

机智云相关代开始移植
相关移植步
1.实现与模组通信串口驱动
2.实现串口打印函数printf();
3.实现1ms定时器,gizTimerMs()维护系统时间 (提供时基)
4.实现MCU复位函数,模组可请求MCU复位
5.实现配置入网功能,调用gizwitsSetMode()函数实现模组配网功能
6.实现userHandle()数据的采集(上行逻辑)
7.实现 gizwitsEventProcess()控制命令的具体执行(下行逻辑)
1.WIFI串口接收数据写入冲区
串口包含这个机智云的头文件

2.实现uartWrite()串口送数据
在该文件中找到uartWrite()这个函数,并在给文件上方添加所用串口的.h文件
该函数修改为
  1. int32_t uartWrite(uint8_t *buf, uint32_t len)
  2. {
  3.     uint32_t i = 0;
  4.    
  5.     if(NULL == buf)
  6.     {
  7.         return -1;
  8.     }
  9.    
  10.        #ifdef PROTOCOL_DEBUG
  11. //    GIZWITS_LOG("MCU2WiFi[%4d:%4d]: ", gizGetTimerCount(), len);
  12.     for(i=0; i<len; i++)
  13.     {
  14. //        GIZWITS_LOG("%02x ", buf[i]);
  15.     }
  16. //    GIZWITS_LOG("\n");
  17.     #endif

  18.     for(i=0; i<len; i++)
  19.     {
  20.         USART_SendData(USART3, buf[i]);//STM32 test demo
  21.                                 while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  22.         //Serial port to achieve the function, the buf[i] sent to the module
  23.         if(i >=2 && buf[i] == 0xFF)
  24.         {
  25.                                         USART_SendData(USART3,0x55);
  26.                                         while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
  27.           //Serial port to achieve the function, the 0x55 sent to the module
  28.           //USART_SendData(UART, 0x55);//STM32 test demo
  29.         }
  30.     }
  31.    


  32.    
  33.     return len;
  34. }
  35. AI写代码
复制代码

实现毫秒定
对于使用的定时器4,中断里添加相应代码
  1. //定时器4中断服务程序
  2. void TIM4_IRQHandler(void)   //TIM4中断
  3. {
  4.         if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  //检查TIM4更新中断发生与否
  5.                 {
  6.                         TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update );
  7.                         gizTimerMs();
  8.                 }
  9. }
  10. AI写代码
复制代码

编译会出现警告,找不到该函数,gizTimerMs();函数没有定义,在gizwits_product.h文件中进行定义
4.实现芯片复位函数
修改该函数在gizwits_product.h文件中

改为下边的代码
  1. void mcuRestart(void)
  2. {
  3.         __set_FAULTMASK(1);
  4.         NVIC_SystemReset();
  5. }
  6. AI写代码
复制代码

实现配置入网
模组支持 SoftAp 和 AirLink 两种方式配置入网, 相应接口为 gizwitsSetMode(), 三种模式如下:
WIFI_RESET_MODE                恢复默认出厂设置
WIFI_SOFTAP_MODE            热点配网
WIFI_AIRLINK_MODE            手机广播配网
在此之前主函数中添加头文件
以及初始化



添加机智云初始化代码,本次选择了airlink配网模式
  1. userInit();
  2.        
  3.   gizwitsInit();
  4. //        Delay_ms(500);
  5.         gizwitsSetMode(WIFI_AIRLINK_MODE);
  6.        
  7.         gizwitsSetMode(WIFI_RESET_MODE);
  8. AI写代码
复制代码

协议处
根据采集到的数据,然后调用函数 gizwitsHandle()、userHandle()上报,函数位置在gizwits_protocol.c文件中,该函数主要完成协议数据的处理及数据主动上报的相关操作
在main.c进行外部**
  1. /** Current datapoint */
  2. extern dataPoint_t currentDataPoint;
  3. AI写代码
  4. 在while(1)调用gizwitsHandle()和userHandle()上报数据

  5. gizwitsHandle(¤tDataPoint);
  6. userHandle();
  7. AI写代码
复制代码

到这一步,配网就结束了,接下来开始配置自己需要传输的数据
7.数据上下配置
上发数据用到的函数为userHandle(),这个函数是在gizwits_protocol.c中
如图,本设计一开始将参数都初始化为0
采集数据的函数
该函数中内容作为机智云app下发数据
至此,完成所有步骤,实验现象如下:




WIFI接出问题
timeout,可能原因是主函数中了延函数,可以尝试屏蔽掉。如果出现连接数据传输不稳定,WIFI连接容易掉,可以尝试一下。
注释掉箭头指向的这三行
并且把这个语句能搜索到的全部注释掉,可以ctrl+f 搜索都在这两个文件中
这个主要是串口1打印内容(gizwits_product.c,gizwits_protocol.c)


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

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表
在线咨询