查看: 2072|回复: 1

GoKit软件部分评析

[复制链接]
  • TA的每日心情
    开心
    2017-9-24 20:12
  • 签到天数: 3 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2015-9-15 22:50:42 | 显示全部楼层 |阅读模式
    分享到:
    首先贴码 主程序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模块的主程序了 用户根据需要自行处理,呵呵。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2016-5-2 09:25
  • 签到天数: 14 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2015-9-16 08:33:12 | 显示全部楼层
    顶一个
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-22 11:52 , Processed in 0.113873 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.