| STM32与机智云连接实现步骤与技巧(下篇) 
 
 机智云相关代码开始移植 相关移植步骤 1.实现与模组通信串口驱动2.实现串口打印函数printf();
 3.实现1ms定时器,gizTimerMs()维护系统时间 (提供时基)
 4.实现MCU复位函数,模组可请求MCU复位
 5.实现配置入网功能,调用gizwitsSetMode()函数实现模组配网功能
 6.实现userHandle()数据的采集(上行逻辑)
 7.实现 gizwitsEventProcess()控制命令的具体执行(下行逻辑)
 1.WIFI串口接收数据写入缓冲区 串口包含这个机智云的头文件 
 2.实现uartWrite()串口发送数据 在该文件中找到uartWrite()这个函数,并在给文件上方添加所用串口的.h文件 该函数修改为 复制代码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[i]);
    }
//    GIZWITS_LOG("\n");
    #endif
 
    for(i=0; i<len; i++)
    {
        USART_SendData(USART3, buf[i]);//STM32 test demo
                                while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
        //Serial port to achieve the function, the buf[i] sent to the module
        if(i >=2 && buf[i] == 0xFF)
        {
                                        USART_SendData(USART3,0x55);
                                        while (USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
          //Serial port to achieve the function, the 0x55 sent to the module
          //USART_SendData(UART, 0x55);//STM32 test demo
        }
    }
    
 
 
    
    return len;
}
AI写代码
 实现毫秒定时 对于使用的定时器4,中断里添加相应代码 复制代码//定时器4中断服务程序
void TIM4_IRQHandler(void)   //TIM4中断
{
        if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  //检查TIM4更新中断发生与否
                {
                        TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update );
                        gizTimerMs();
                }
}
AI写代码
 编译会出现警告,找不到该函数,gizTimerMs();函数没有定义,在gizwits_product.h文件中进行定义 4.实现芯片复位函数 修改该函数在gizwits_product.h文件中 
 改为下边的代码 复制代码void mcuRestart(void)
{
        __set_FAULTMASK(1);
        NVIC_SystemReset();
}
AI写代码
 实现配置入网  模组支持 SoftAp 和 AirLink 两种方式配置入网, 相应接口为 gizwitsSetMode(), 三种模式如下: WIFI_RESET_MODE                恢复默认出厂设置 WIFI_SOFTAP_MODE            热点配网 WIFI_AIRLINK_MODE            手机广播配网 在此之前主函数中添加头文件 以及初始化 
 
 
 添加机智云初始化代码,本次选择了airlink配网模式 复制代码userInit();
        
  gizwitsInit();
//        Delay_ms(500); 
        gizwitsSetMode(WIFI_AIRLINK_MODE);
        
        gizwitsSetMode(WIFI_RESET_MODE);
AI写代码
 协议处理 根据采集到的数据,然后调用函数 gizwitsHandle()、userHandle()上报,函数位置在gizwits_protocol.c文件中,该函数主要完成协议数据的处理及数据主动上报的相关操作 在main.c进行外部** 复制代码/** Current datapoint */
extern dataPoint_t currentDataPoint;
AI写代码
在while(1)调用gizwitsHandle()和userHandle()上报数据
 
gizwitsHandle(¤tDataPoint);
userHandle();
AI写代码
 到这一步,配网就结束了,接下来开始配置自己需要传输的数据 7.数据上下发配置 上发数据用到的函数为userHandle(),这个函数是在gizwits_protocol.c中 如图,本设计一开始将参数都初始化为0 采集数据的函数 该函数中内容作为机智云app下发数据 至此,完成所有步骤,实验现象如下:
 
 
 
 
 WIFI连接出现的问题 出现timeout超时,可能原因是主函数中给了延时函数,可以尝试屏蔽掉。如果出现连接数据传输不稳定,WIFI连接容易掉,可以尝试一下。 注释掉箭头指向的这三行 并且把这个语句能搜索到的全部注释掉,可以ctrl+f 搜索都在这两个文件中 这个主要是串口1打印内容(gizwits_product.c,gizwits_protocol.c) 
 
 |