刚解决完网关下发会导致异常问题,但蓝牙那边mk给蓝牙发未配置成功未解决,开始调lora功耗
已修改3个文件
326 ■■■■ 文件已修改
keil/include/drivers/serial_at_cmd_app.c 284 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/main/main.c 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/src/Radio/lora_1268.c 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
keil/include/drivers/serial_at_cmd_app.c
@@ -521,159 +521,161 @@
    memcpy(&send_frame[8],&set_mk_time,2);
    checksum=Checksum_u16(&send_frame[2],8);
    memcpy(&send_frame[10],&checksum,2);
        //LOG_INFO(TRACE_MODULE_APP,"发给ble的checksum %#x\r\n",checksum);
    uart_send(UART_ID0, send_frame,12, NULL);    
    uart_send(UART_ID1, send_frame,12, NULL);
}
extern uint8_t bat_percent;
extern uint32_t dev_id;
void Usart0ParseDataHandler(uint8_t data)//UART蓝牙数据分析处理
{
//        // 全局变量
//static Usart0ReceiveState usart0_receive_state = Usart0ReceiveWaitHead0;
        // 全局变量
static Usart0ReceiveState usart0_receive_state = Usart0ReceiveWaitHead0;
//static uint8_t index = 0;               // 缓冲区索引
//static uint8_t pack_cmd_type = 0;       // 指令类型
//static uint8_t pack_msg_type = 0;       // 消息类型
//static uint8_t pack_data_len = 0;       // 数据长度
//static uint8_t pack_param_addr = 0;     // 参数地址
//static uint16_t pack_checksum = 0;      // 接收到的校验和
//static uint16_t calculated_checksum = 0; // 计算得到的校验和
//static uint8_t send_frame[256];  // 用于计算校验和的帧
//static uint8_t frame_index = 0;  // 帧缓冲区索引
//static uint8_t pack_datalen = 0;
//
//    LOG_INFO(TRACE_MODULE_APP,"收到 %#x\r\n",data);
//    switch(usart0_receive_state) {
//        case Usart0ReceiveWaitHead0:
//            if(data == 0x55) {
//                usart0_receive_state = Usart0ReceiveWaitHead1;
//                // 初始化帧缓冲区
//                frame_index = 0;
//                send_frame[frame_index++] = data;
//            }
//            break;
//
//        case Usart0ReceiveWaitHead1:
//            if(data == 0xAA) {
//                usart0_receive_state = Usart0ReceiveWaitCmdType;
//                send_frame[frame_index++] = data;
//            } else {
//                usart0_receive_state = Usart0ReceiveWaitHead0;
//            }
//            break;
//
//        case Usart0ReceiveWaitCmdType:
//            if(data == 64) {
//                pack_cmd_type = data;
//                usart0_receive_state = Usart0ReceiveWaitMsgType;
//                send_frame[frame_index++] = data;
//            } else {
//                usart0_receive_state = Usart0ReceiveWaitHead0;
//            }
//            break;
//
//        case Usart0ReceiveWaitMsgType:
//            if(data == 0x2||data==0x1) {  // 读写回复消息类型
//                pack_msg_type = data;
//                usart0_receive_state = Usart0ReceiveWaitDataLen;
//                send_frame[frame_index++] = data;
//            } else {
//                usart0_receive_state = Usart0ReceiveWaitHead0;
//            }
//            break;
//
//        case Usart0ReceiveWaitDataLen:
//            pack_data_len = data;
//            index = 0;
//            usart0_receive_state = Usart0ReceiveWaitData;
static uint8_t index = 0;               // 缓冲区索引
static uint8_t pack_cmd_type = 0;       // 指令类型
static uint8_t pack_msg_type = 0;       // 消息类型
static uint8_t pack_data_len = 0;       // 数据长度
static uint8_t pack_param_addr = 0;     // 参数地址
static uint16_t pack_checksum = 0;      // 接收到的校验和
static uint16_t calculated_checksum = 0; // 计算得到的校验和
static uint8_t send_frame[256];  // 用于计算校验和的帧
static uint8_t frame_index = 0;  // 帧缓冲区索引
static uint8_t pack_datalen = 0;
    LOG_INFO(TRACE_MODULE_APP,"收到 %#x\r\n",data);
    switch(usart0_receive_state) {
        case Usart0ReceiveWaitHead0:
            if(data == 0x55) {
                usart0_receive_state = Usart0ReceiveWaitHead1;
                // 初始化帧缓冲区
                frame_index = 0;
                send_frame[frame_index++] = data;
            }
            break;
        case Usart0ReceiveWaitHead1:
            if(data == 0xAA) {
                usart0_receive_state = Usart0ReceiveWaitCmdType;
                send_frame[frame_index++] = data;
            } else {
                usart0_receive_state = Usart0ReceiveWaitHead0;
            }
            break;
        case Usart0ReceiveWaitCmdType:
            if(data == 64) {
                pack_cmd_type = data;
                usart0_receive_state = Usart0ReceiveWaitMsgType;
                send_frame[frame_index++] = data;
            } else {
                usart0_receive_state = Usart0ReceiveWaitHead0;
            }
            break;
        case Usart0ReceiveWaitMsgType:
            if(data == 0x2||data==0x1) {  // 读写回复消息类型
                pack_msg_type = data;
                usart0_receive_state = Usart0ReceiveWaitDataLen;
                send_frame[frame_index++] = data;
            } else {
                usart0_receive_state = Usart0ReceiveWaitHead0;
            }
            break;
        case Usart0ReceiveWaitDataLen:
            pack_data_len = data;
            index = 0;
            usart0_receive_state = Usart0ReceiveWaitData;
            send_frame[frame_index++] = data;
            break;
//        case Usart0ReceiveWaitParamAddr:
//            pack_param_addr = data;
//                        if(pack_msg_type==CMD_READ)
//                        {
//                            usart0_receive_state = Usart0ReceiveWaitChecksum1;
//                            pack_datalen=pack_data_len-6;
//                        }else{
//                            usart0_receive_state = Usart0ReceiveWaitData;
//                        }
//            send_frame[frame_index++] = data;
//            break;
//
////        case Usart0ReceiveWaitParamAddr:
////            pack_param_addr = data;
////                        if(pack_msg_type==CMD_READ)
////                        {
////                            usart0_receive_state = Usart0ReceiveWaitChecksum1;
////                            pack_datalen=pack_data_len-6;
////                        }else{
////                            usart0_receive_state = Usart0ReceiveWaitData;
////                        }
////            send_frame[frame_index++] = data;
////            break;
//
//        case Usart0ReceiveWaitData:
//                            send_frame[frame_index++] = data;
//                        mUsart2ReceivePack[index++] = data;
//
//                            if(index == pack_data_len-3) {
//                usart0_receive_state = Usart0ReceiveWaitChecksum1;
//                                //pack_datalen=pack_data_len;
//              }
//            break;
//
//        case Usart0ReceiveWaitChecksum1:
//            pack_checksum = data;  // 高字节
//                        pack_checksum_test = data;  // 高字节
//                        send_frame[frame_index++] = data;
//                    usart0_receive_state = Usart0ReceiveWaitChecksum2;
//                    LOG_INFO(TRACE_MODULE_APP,"收到校验1 %#x\r\n",data);
//                        break;
//                case Usart0ReceiveWaitChecksum2:
//            pack_checksum |= data<<8;  // 低字节
//            pack_checksum_test |= data<<8;  // 低字节
//                LOG_INFO(TRACE_MODULE_APP,"收到校验2 %#x\r\n",data);
//            // 计算校验和 (从第3个字节开始,长度为4+数据长度)
////                        if(pack_msg_type!=CMD_REPLY)
////            {
//                        calculated_checksum = Checksum_u16(&send_frame[2],pack_data_len);
////                        }else{
////                        //calculated_checksum = Checksum_u16(&send_frame[2],4);
////
////                        }
//            test_calculate=calculated_checksum;
//                    LOG_INFO(TRACE_MODULE_APP,"收到校验 %#x,%#x\r\n",calculated_checksum,pack_checksum);
//            // 验证校验和
//            if(pack_checksum == calculated_checksum) {
//                // 校验通过,处理数据
//                                    switch(pack_msg_type)
//                                        {
//                                        case CMD_BLE_TO_MK:
//                                        memcpy(&dev_id,&mUsart2ReceivePack[0],2);
//                                        bat_percent=mUsart2ReceivePack[2];
//                                        memcpy(&set_mk_time,&mUsart2ReceivePack[3],2);
//                                        memcpy(&g_com_map[DEV_ID],&dev_id,2);
//                                        memcpy(&g_com_map[SET_START_TIME],&set_mk_time,2);
//                                        Send_Reply_To_Ble();
//                                        LOG_INFO(TRACE_MODULE_APP,"收到蓝牙数据 set_mk_time %d,dev_id %04x,bat_percent %d\r\n",set_mk_time,dev_id,bat_percent);
//                                            save_com_map_to_flash();
//                                            //memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen);
//
        case Usart0ReceiveWaitData:
                            send_frame[frame_index++] = data;
                        mUsart2ReceivePack[index++] = data;
                            if(index == pack_data_len-3) {
                usart0_receive_state = Usart0ReceiveWaitChecksum1;
                                //pack_datalen=pack_data_len;
              }
            break;
        case Usart0ReceiveWaitChecksum1:
            pack_checksum = data;  // 高字节
                        pack_checksum_test = data;  // 高字节
                        send_frame[frame_index++] = data;
                    usart0_receive_state = Usart0ReceiveWaitChecksum2;
                    LOG_INFO(TRACE_MODULE_APP,"收到校验1 %#x\r\n",data);
                        break;
                case Usart0ReceiveWaitChecksum2:
            pack_checksum |= data<<8;  // 低字节
            pack_checksum_test |= data<<8;  // 低字节
                LOG_INFO(TRACE_MODULE_APP,"收到校验2 %#x\r\n",data);
            // 计算校验和 (从第3个字节开始,长度为4+数据长度)
//                        if(pack_msg_type!=CMD_REPLY)
//            {
                        calculated_checksum = Checksum_u16(&send_frame[2],pack_data_len);
//                        }else{
//                        //calculated_checksum = Checksum_u16(&send_frame[2],4);
//
//                        }
            test_calculate=calculated_checksum;
                    LOG_INFO(TRACE_MODULE_APP,"收到校验 %#x,%#x\r\n",calculated_checksum,pack_checksum);
            // 验证校验和
            if(pack_checksum == calculated_checksum) {
                // 校验通过,处理数据
                                    switch(pack_msg_type)
                                        {
                                        case CMD_BLE_TO_MK:
                                        memcpy(&dev_id,&mUsart2ReceivePack[0],2);
                                        bat_percent=mUsart2ReceivePack[2];
                                        memcpy(&set_mk_time,&mUsart2ReceivePack[3],2);
                                        memcpy(&g_com_map[DEV_ID],&dev_id,2);
                                        memcpy(&g_com_map[SET_START_TIME],&set_mk_time,2);
                                        Send_Reply_To_Ble();
                                        LOG_INFO(TRACE_MODULE_APP,"收到蓝牙数据 set_mk_time %d,dev_id %04x,bat_percent %d\r\n",set_mk_time,dev_id,bat_percent);
                                            save_com_map_to_flash();
                                            //memcpy((uint8_t*)&g_com_map + pack_param_addr*2, mUsart2ReceivePack, pack_datalen);
                                            break;
//                                        case CMD_MK_TO_BLE:
//                                                    //uart0_send_ComMap_to_BLE(pack_datalen,pack_param_addr);
//
//                                            break;
////                                        case CMD_MK_TO_BLE:
////                                                    //uart0_send_ComMap_to_BLE(pack_datalen,pack_param_addr);
////
////                                        case CMD_REPLY:
////                                            memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
////                                            save_com_map_to_flash();
////                                            break;
//////                                        case CMD_REPLY:
//////                                            memcpy((uint8_t*)&g_com_map + pack_param_addr, mUsart2ReceivePack, pack_datalen);
//////                                            save_com_map_to_flash();
//////                                            break;
//                                        default:
//                                            break;
//                                    }
//            }
//
//            // 重置状态机
//            usart0_receive_state = Usart0ReceiveWaitHead0;
//            index = 0;
//            frame_index = 0;
//            break;
//
//        default:
//            usart0_receive_state = Usart0ReceiveWaitHead0;
//            index = 0;
//            frame_index = 0;
//            break;
//    }
                                        default:
                                            break;
                                    }
            }
            // 重置状态机
            usart0_receive_state = Usart0ReceiveWaitHead0;
            index = 0;
            frame_index = 0;
            break;
        default:
            usart0_receive_state = Usart0ReceiveWaitHead0;
            index = 0;
            frame_index = 0;
            break;
    }
}
keil/include/main/main.c
@@ -507,12 +507,12 @@
                    //Lora_Tx_Poll();
        }
                Lora_Tx_Poll();    
                if(!gpio_pin_get_val(SLEEP_PIN))
                {
                //gpio_pin_clr(LORA_NRST);//lora休眠
                LOG_INFO(TRACE_MODULE_APP, "进入休眠模式\r\n");
                mcu_deep_sleep();
                }
//                if(!gpio_pin_get_val(SLEEP_PIN))
//                {
//                //gpio_pin_clr(LORA_NRST);//lora休眠
//                LOG_INFO(TRACE_MODULE_APP, "进入休眠模式\r\n");
//                mcu_deep_sleep();
//                }
                IdleTask();
                }
    }    
@@ -521,7 +521,7 @@
    LOG_INFO(TRACE_MODULE_APP, "进入休眠模式\r\n");
    //gpio_pin_clr(LORA_NRST);//lora休眠
//    spi_close(SPI_ID0);
    //lora_in_sleep();
    lora_in_sleep();
     power_init();
    mcu_deep_sleep();
}
keil/include/src/Radio/lora_1268.c
@@ -370,7 +370,8 @@
//    gpio_pin_clr(LORA_IRQ);
    //gpio_pin_clr(LORA_NRST);
    //gpio_pin_clr(LORA_NRST);//lora休眠
     Radio.Standby();
//     Radio.Standby();
    Radio.Sleep();
}
////States_t State = LOWPOWER;
@@ -396,8 +397,9 @@
        
    if(flag_writepara_needreset) //配置写入完成设备需要重启
    {
        printf("网关下发配置写入完成,重启");
        SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
        LOG_INFO(TRACE_MODULE_APP,"网关下发配置写入完成,重启\r\n");
//        SCB->AIRCR = 0X05FA0000|(unsigned int)0x04; //软复位回到bootloader
            sys_reset(0);
    }
    Radio.Standby();
    if(LoraUp_flag)
@@ -445,6 +447,7 @@
uint8_t rxdone=0;
extern uint16_t set_mk_time;
extern mk_send_message_to_BLE(void);
uint8_t tt4=1;
void OnRxDone( uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr )
{  
                uint16_t checksum1;
@@ -522,6 +525,7 @@
                                                            LoraSendComMap(WGRSP_RWTAG_READ);
                                                            break;
                                                case WGRSP_RWTAG_WRITE:
                                                        rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
                                                    switch(rec_index)
                                                            {
@@ -534,18 +538,17 @@
                        default :
                            memcpy(&rec_value,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
                            g_com_map[rec_index/2] = rec_value;
//                                                        if(rec_index/2==POWER)//新增判断
//                                                        {
//                                                         memcpy(&set_mk_time,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
//                                                            //mk_send_message_to_BLE();    //发送给蓝牙
//                                                            //LOG_INFO(TRACE_MODULE_APP, "修改成功g_com表为%#x,时间为%#x\r\n",g_com_map[POWER],set_mk_time);
//                                                        }
                           // save_com_map_to_flash();
                                                        if(rec_index/2==POWER)//新增判断
                                                        {
                                                         memcpy(&set_mk_time,&RX_Buffer[PWTAG_WRITE_VALUE_IDX],2);
                                                            mk_send_message_to_BLE();    //发送给蓝牙
                                                            //LOG_INFO(TRACE_MODULE_APP, "修改成功g_com表为%#x,时间为%#x\r\n",g_com_map[POWER],set_mk_time);
                                                        }
                            save_com_map_to_flash();
                            LoraRspWriteCommap(SUBMSG_WRITE_ANCPARA);
                            flag_writepara_needreset = 1;
                            no_rx_flag = 1;                           
                                                            }
                                                            break; 
                                                case WGRSP_RWTAG_UPDATE:
                                                rec_index = RX_Buffer[PWTAG_WRITE_IDX_IDX];
@@ -571,7 +574,7 @@
                                }
                            }
LOG_INFO(TRACE_MODULE_APP, "进入回复2\r\n");
    if(!no_rx_flag)
    {
        if(lora_jianting_flag&&LoraUp_flag==0)
@@ -580,6 +583,7 @@
            Radio.Rx(0);
        }
    }
}
void OnTxTimeout( void )