1回答

0收藏

GoKit软件部分评析

机智云GoKit 机智云GoKit 2468 人阅读 | 1 人回复 | 2015-09-15

首先贴码 主程序int main(void){
        SystemInit();
        UARTx_Init();
        Printf_SystemRccClocks();
        RTC_Init();
        Hal_Init();
        McuStatusInit();
        while(1)
        {
                MessageHandle();
                KEY_Handle();               
                IR_Handle();
                DHT11_Read_Data(&Device_ReadStruct.Temperature, &Device_ReadStruct.Humidity);
                ReportDevStatusHandle();
        }
}
包括硬件和软件初始化,硬件部分用了串口(wifi模块)IO、定时器(红外和计时pwm)外设等部分.
通信部分包括串口 wifi模块同mcu交换信息、红外遥控、温湿传感器从代码可以看出是单一总线。
主循环里面也是通信和马达控制。
今天简单的看下第一部分MessageHandle();
__packed        typedef struct       
{
        uint8_t                                                        Package_Flag;                                     //??????·????????????ê????????????°ü         
        uint8_t                                                        UART_Flag1;
        uint8_t                                                        UART_Flag2;
        uint16_t                                                 UART_Count;                                                                //???????????????????¤??       
        uint8_t                                                         UART_Cmd_len;                                                        //?????¤??       
        uint8_t                                                 UART_Buf[Max_UartBuf];                 //??????????
        uint8_t             Message_Buf[Max_UartBuf]; //???í????????????Buf
        uint8_t             Message_Len;                    //???í?????¤??
       
}UART_HandleTypeDef;
这是WiFi通信帧__packed优化结构体让对象在内存地址对齐,控制信息包括标志指令长度和串口buffer和帧buffer。这些用来存储接受信息的其中注意的是接受标志和长度很多新手在这里出现错误发生丢帧或者处理错误的问题
从if(UART_HandleStruct.Package_Flag)标志看出如果wifi发出指令会将uart接收的数据转移到Message_Buf【】这里感觉多余
                if(CheckSum(UART_HandleStruct.Message_Buf, UART_HandleStruct.Message_Len) != UART_HandleStruct.Message_Buf[UART_HandleStruct.Message_Len - 1])
                {
                        Pro_W2D_ErrorCmdHandle();
                        return ;               
                }
这里校验我们的接收的数据是否正确checksum注意是倒数第二位,只要留意下就可以。
checksum程序是叠加和看规范就好
switch (Recv_HeadPart.Cmd)
                {
                        case Pro_W2D_GetDeviceInfo_Cmd:
                                Pro_W2D_GetMcuInfo();
                                break;
                        case Pro_W2D_P0_Cmd:
                                Pro_W2D_P0CmdHandle();       

这里就是我们mcu处理wifi模块的主程序了 用户根据需要自行处理,呵呵。
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

lyzd

发表于 2015-9-16 08:33:12 | 只看该作者

顶一个
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条