/* USER CODE BEGIN Header */ /** ****************************************************************************** * File Name : freertos.c * Description : Code for freertos applications ****************************************************************************** * @attention * * Copyright (c) 2024 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "FreeRTOS.h" #include "task.h" #include "main.h" #include "cmsis_os.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "usart.h" #include "can.h" #include "ConfigMacros.h" //#include "net4g.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ uint8_t test = 0; uint8_t count = 0; extern Menu_table menu; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart3; extern UART_HandleTypeDef huart4; extern UART_HandleTypeDef huart5; extern unsigned char SN1[]; extern char DisConnected[]; extern char Connected_phone[]; extern bool warningtag ; extern bool resetML307A; extern bool refresh; extern bool resetFlag; extern bool sealFlag; extern bool BT_CONN; extern bool REBOOT; extern bool bd_flag; //已绑定标志位 extern bool open_flagw; extern bool close_flagw; extern bool bt_lock_ropesta; extern bool bt_lock_machinesta; extern uint8_t u4RecvFlag; // 串口4接收标志串口接收完成标志 extern RTC_HandleTypeDef hrtc; extern CAN_HandleTypeDef hcan; RTC_DateTypeDef GetData; //获取日期结构体 RTC_TimeTypeDef GetTime; //获取时间结构体 /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN Variables */ /* USER CODE END Variables */ osThreadId ScanKeyTaskHandle; osThreadId BT4GTaskHandle; osThreadId testTaskHandle; osThreadId loginfoTaskHandle; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ /* USER CODE END FunctionPrototypes */ void StartScanKeyTask(void const * argument); void StarBT4GTask(void const * argument); void StartTestTask(void const * argument); void StartloginfoTaskTask(void const * argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ /* GetIdleTaskMemory prototype (linked to static allocation support) */ void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ); /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */ static StaticTask_t xIdleTaskTCBBuffer; static StackType_t xIdleStack[configMINIMAL_STACK_SIZE]; void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize ) { *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer; *ppxIdleTaskStackBuffer = &xIdleStack[0]; *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE; /* place for user code */ } /* USER CODE END GET_IDLE_TASK_MEMORY */ /** * @brief FreeRTOS initialization * @param None * @retval None */ void MX_FREERTOS_Init(void) { /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* USER CODE BEGIN RTOS_MUTEX */ /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ /* USER CODE BEGIN RTOS_TIMERS */ /* start timers, add new ones, ... */ /* USER CODE END RTOS_TIMERS */ /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ /* Create the thread(s) */ /* definition and creation of ScanKeyTask */ osThreadDef(ScanKeyTask, StartScanKeyTask, osPriorityRealtime, 0, 128); ScanKeyTaskHandle = osThreadCreate(osThread(ScanKeyTask), NULL); /* definition and creation of BT4GTask */ osThreadDef(BT4GTask, StarBT4GTask, osPriorityRealtime, 0, 128); BT4GTaskHandle = osThreadCreate(osThread(BT4GTask), NULL); /* definition and creation of testTask */ osThreadDef(testTask, StartTestTask, osPriorityRealtime, 0, 128); testTaskHandle = osThreadCreate(osThread(testTask), NULL); /* definition and creation of loginfoTask */ osThreadDef(loginfoTask, StartloginfoTaskTask, osPriorityRealtime, 0, 128); loginfoTaskHandle = osThreadCreate(osThread(loginfoTask), NULL); /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ } /* USER CODE BEGIN Header_StartScanKeyTask */ /** * @brief Function implementing the ScanKeyTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartScanKeyTask */ void StartScanKeyTask(void const * argument) { /* USER CODE BEGIN StartScanKeyTask */ /* Infinite loop */ for(;;) { osDelay(1); updatekeystate(); execute_function(menu); OLED_Refresh(); workinfo(); //搬移蓝牙数据 } /* USER CODE END StartScanKeyTask */ } /* USER CODE BEGIN Header_StarBT4GTask */ /** * @brief Function implementing the BT4GTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StarBT4GTask */ void StarBT4GTask(void const * argument) { /* USER CODE BEGIN StarBT4GTask */ /* Infinite loop */ for(;;) { osDelay(1); if(resetMBA32A) //freertos监测蓝牙复位标志位 { MBA32A_Init(); } else if(warningtag) //freertos监测施解封确认标志位 { HAL_Delay(2000); //延时显示1.2s menu.current=0; //回到首界面显示 refresh=true; //清除界面元素标志位 warningtag=false; //复位施解封确认标志位 Write_Information(resetDevAddr+FLASH_PAGE_SIZE); //printf("******解封标志:%s\t%d %d %d %d %d\n",(sealFlag ? "true":"false"), menu.current, menu.up, menu.next, menu.enter, menu.back); } else if(REBOOT && bd_flag)//初始化完成,并且已经绑定 { BT_CONN=true; if(bt_lock_ropesta==0x01 && bt_lock_machinesta==0x01)// 0x01电机关 0x01锁绳拔出 { menu.home=0x04;//关(电机关上,锁绳未插入) menu.sn=SN1; } else if(bt_lock_ropesta==0x01 && bt_lock_machinesta==0x00)// 0x00电机开 0x01锁绳拔出 { menu.home=0x01;//开(全部打开) menu.sn=SN1; } else if(bt_lock_ropesta==0x00 && bt_lock_machinesta==0x00)//0x00电机开 0x00锁绳插入 { menu.home=0x03;//开(电机没关,锁绳已插入) menu.sn=SN1; } else if(bt_lock_ropesta==0x00 && bt_lock_machinesta==0x01)//0x01电机关 0x00锁绳插入 { menu.home=0x02;//关(全部关闭) menu.sn=SN1; } else { //default status menu.home=0; menu.sn=SN1; } } else { //default status menu.home=0; menu.sn=SN1; } // USART_SendString(&huart5, "AT+MAC?\r\n"); // HAL_Delay(100); // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容 // USART_SendString(&huart5, "AT+DISCONN=0\r\n"); // HAL_Delay(50); // USART_SendString(&huart5, "AT+AUTO_DEL\r\n"); // HAL_Delay(50); // USART_SendString(&huart5, "AT+RESET=1\r\n"); // USART_SendString(&huart5, "AT+UUIDS?\r\n"); // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显 // USART_SendString(&huart5, "AT+UUIDW?\r\n"); // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显 // USART_SendString(&huart5, "AT+UUIDN?\r\n"); // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显 // if(UART_485_EN) // { // printf("485 output\r\n"); // } // if(UART_TTL_EN) // { // printf("TTL output\r\n"); // } // if(test==1) // { //test=0; //int txLen = sprintf((char *)recvBuff, "RecvAT>>%s<<",g_ML307A_8buf_Down);//4g // int txLen = sprintf((char *)recvBuff, "RecvAT>>\r\n%s<<",g_MBA32A_8buf);//bt // HAL_UART_Transmit(&huart3,recvBuff,txLen,0xffff); // memcpy(g_ML307A_8buf_Down,g_ML307A_8buf,20); // // printf("buf:%s\r\n",g_MBA32A_8buf); // printf("bufD:%s\r\n",g_ML307A_8buf_Down); // } // test ++; // // if(test==2) // { // test =0; // // } //printf("%d\r\n",test); } /* USER CODE END StarBT4GTask */ } /* USER CODE BEGIN Header_StartTestTask */ /** * @brief Function implementing the testTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartTestTask */ void StartTestTask(void const * argument) { /* USER CODE BEGIN StartTestTask */ #ifdef CAN_TEST #if CAN_TEST ==1 CAN_TxHeaderTypeDef TxHeader; uint8_t TxData[8] = {1, 2, 3, 4, 5, 6, 7, 8}; uint32_t TxMailbox; TxHeader.StdId = 0x123; TxHeader.ExtId = 0; TxHeader.RTR = CAN_RTR_DATA; TxHeader.IDE = CAN_ID_STD; TxHeader.DLC = 8; TxHeader.TransmitGlobalTime = DISABLE; CAN_RxHeaderTypeDef RxHeader; // 添加这行定义RxHeader变量 uint8_t RxData[8]; // 添加这行定义RxData变量 #endif #endif /* Infinite loop */ for(;;) { osDelay(1500); #ifdef WORK_BT_TEST #if WORK_BT_TEST ==1 { test++; //测试协议报文 // uint8_t header[2] = {0x66, 0x00};//Jl_lock帧头 // //uint8_t serchInfo_CMD[] = {0x01, 0x00};//查询信息命令帧 // uint8_t openlock_CMD[] = {0x00,0x00, 0x00,0x00,0x00,0x01, 0x55,0x55,0x55,0x55, 0x24,0x02,0x04,0x0E ,0x01};//开锁命令帧 // uint8_t openlock_head = 0x02; // uint8_t openlock_length = (sizeof(openlock_CMD)-2); // openlock_CMD[0]=openlock_head; // openlock_CMD[1]=openlock_length; // sendCombinedArray(header,sizeof(header),openlock_CMD,sizeof(openlock_CMD)); if(close_flagw && (open_flagw==false)) { close_lock(); } else if(open_flagw && (close_flagw==false)) { open_lock(); } else if((close_flagw==false)&&(open_flagw==false)&& bd_flag) { lock_searchInfo(); } //open_lock(); // close_lock(); //测试条件语句 // USART_SendString(&huart5, "AT+RESET=1\r\n"); // HAL_Delay(50); // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显 // // test++; // USART_SendString(&huart5, "AT+DEV?\r\n"); // HAL_Delay(100); // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容 // USART_SendString(&huart5, "AT+NAME?\r\n"); // HAL_Delay(100); // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容 // USART_SendString(&huart5, "AT+MAC?\r\n"); // HAL_Delay(100); // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容 //USART_SendString(&huart5, "AT+RESET=1\r\n"); // HAL_Delay(100); // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");//连接指定 MAC 地址设备 // HAL_Delay(100); //// USART_SendString(&huart5, "AT+DEV?\r\n"); //查询当前已连接的设备 // count = countValidData(g_MBA32A_8buf,1024,0); // printf("Mbabuf:%s\r\n_%d\r\n",g_MBA32A_8buf,count); { /**蓝牙发送命令无需带内冒号**/ //BLE 协议说明 //0xfff2 Write 写入的数据会从串口TX输出 //0xfff1 Notify 从串口 RX 输入的数据将会在此通道产生通知发给移动设备!!!移动接收 //APP 通过 0xFFF2 通道 将数据发送给 MCU:MCU 通过 0xFFF1 通道将数据发送给 APP,用户也可通过 AT 指令对读写通道进行自定义。 // USART_SendString(&huart5, "AT+UUIDS=0000000200001000800000805f9b34fb\r\n"); //设置主服务通道 // HAL_Delay(50); // USART_SendString(&huart5, "AT+UUIDN=0000ff0500001000800000805f9b34fb\r\n"); //设置读服务通道 // HAL_Delay(50); // USART_SendString(&huart5, "AT+UUIDW=0000ff0400001000800000805f9b34fb\r\n"); //设置写服务通道 // HAL_Delay(50); // USART_SendString(&huart5, "AT+UUIDS=0000180100001000800000805f9b34fb\r\n"); //设置主服务通道 // HAL_Delay(50); //USART_SendString(&huart5, "AT+RESET=1\r\n");//恢复出厂设置 // USART_SendString(&huart5, "AT+RESET=1\r\n");//恢复出厂设置 // USART_SendString(&huart5, "AT+NAME?\r\n");//23字节(0-22) // HAL_Delay(50); // printf("%s",g_MBA32A_8buf); //USART_SendString(&huart5, "AT+MAC?\r\n"); //查询蓝牙 4.0 地址码 // HAL_Delay(50); // printf("1%s",g_MBA32A_8buf); // printf("2%s",&g_MBA32A_8buf[23]); // HAL_Delay(100); //USART_SendString(&huart5, "AT+DEV?\r\n"); //查询当前已连接的设备 // HAL_UART_Receive(&huart5,&g_MBA32A_8buf[0],20,150); // printf("%s\r\n",g_MBA32A_8buf); //USART_SendString(&huart5, "AT+RESET=1\r\n");//恢复出厂设置 // HAL_Delay(100); // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n"); // HAL_Delay(100); // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容 // USART_SendString(&huart5, "AT+UUIDN?\r\n"); // HAL_Delay(100); // USART_SendString(&huart5, "AT+UUIDW?\r\n"); // USART_SendString(&huart5, "AT+DISCONN=0\r\n"); // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");//连接指定 MAC 地址设备 // USART_SendString(&huart5, "AT+UUIDS=0000fff000001000800000805f9b34fb\r\n"); //设置主服务通道 // USART_SendString(&huart5, "AT+UUIDW=0000ff0500001000800000805f9b34fb\r\n"); //设置写服务通道 // USART_SendString(&huart5, "AT+UUIDN=0000ff0400001000800000805f9b34fb\r\n"); //设置读服务通道 // USART_SendString(&huart5, "AT+AUTO_CFG=1\r\n"); // HAL_Delay(100); // USART_SendString(&huart5, "AT+AUTO_MAC=1500000000cb\r\n"); // HAL_Delay(100); // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");//连接指定 MAC 地址设备 // HAL_Delay(100); // USART_SendString(&huart5, "AT+TXPOWER=10\r\n"); // uint8_t data[] = {0x01, 0x00,0x00}; // HAL_UART_Transmit(&huart1,data,3,0xffff); // HAL_UART_Transmit(&huart5,data,3,0xffff); // uint8_t len = sizeof(data) / sizeof(data[0]); // uint8_t data_open[] = {0x02, 0x04,0x01,0,0,0}; // uint8_t len = sizeof(data_open) / sizeof(data_open[0]); // uint8_t crc = crc16(data_open, len); // uint8_t sendData[len + 1]; // for (uint8_t i = 0; i < len; i++) { // sendData[i] = data_open[i]; // } // sendData[len] = crc; //printf("Send Data with CRC: "); // for (uint8_t i = 0; i < len + 1; i++) { // printf("%02X ", sendData[i]); // } //printf("\n"); //USART_SendString(&huart5, "AT+SCAN=1\r\n");//查询扫描蓝牙 4.0 BLE 设备(0-关闭 1-开启) // USART_SendString(&huart5, "AT+UUIDW?\r\n"); //查询 BLE 写服务通道fff2 // HAL_UART_Receive(&huart5,g_MBA32A_8buf,BUFFER_SIZE,100); // USART_SendString(&huart5, "AT+DISCONN=1\r\n");//断开蓝牙连接(0-断开所有连接的从设备 1-主动断开与主机端设备的连接) // USART_SendString(&huart5, "AT+AINTVL?\r\n");//查询广播间隔 单位ms // HAL_Delay(50); // USART_SendString(&huart5, "AT+VER?\r\n"); //读取软件版本 // HAL_Delay(50); // USART_SendString(&huart5, "AT+TXPOWER?\r\n");//查询模块的发射功率 // HAL_Delay(50); // int count = countValidData(g_MBA32A_8buf,256,0); // if(count<2) // { // test = 0; // //HAL_Delay(100); // }else { // printf("mba:%s-%d",g_MBA32A_8buf,count); // } // USART_SendString(&huart5, "AT+REBOOT=1\r\n");//设置模块重启 // USART_SendString(&huart5, "AT+SCAN_MANU=1\r\n");//扫描蓝牙自定义广播数据 // USART_SendString(&huart5, "AT+SCAN=1\r\n");//查询扫描蓝牙 4.0 BLE 设备(0-关闭 1-开启) // HAL_Delay(200); // USART_SendString(&huart5, "AT+CONN=DC:2D:04:C7:21:8A\r\n");//连接指定 MAC 地址设备 // USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开蓝牙连接(0-断开所有连接的从设备 1-主动断开与主机端设备的连接) // USART_SendString(&huart5, "AT+ADV?\r\n");//查询广播状态(0-关闭 1-开启) // USART_SendString(&huart5, "AT+UART?\r\n");//查询模块串口波特率(0:9600/ 1:14400/ 2:19200/ 3:38400/ 4:57600/ 5:115200/ 6:230400) // } // } //USART_SendString(&huart5, "AT+DEV?\r\n");//查询当前已连接的设备 //} // else if(test == 3) // { // //USART_SendString(&huart5, "AT+VER?\r\n");//查询当前已连接的设备 // } // } } } #endif #endif #ifdef WORK_4G_TEST #if WORK_4G_TEST == 1 { //if(test==1) //{ //1 必须步骤AT //USART_SendString(&huart4, "AT\r\n"); //2 查询SIM卡状态 //USART_SendString(&huart4, "AT+CPIN?\r\n"); //3 查询协议栈是否打开(return 1) //USART_SendString(&huart4, "AT+CFUN?\r\n");//确保驻网前为1 //4 查询信号质量(小于10表示信号弱) //USART_SendString(&huart4, "AT+CSQ\r\n"); //5 设置APN(中国移动 return ok) //USART_SendString(&huart4, "AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n"); //6 查询是否驻网成功 (return 0,1) //USART_SendString(&huart4, "AT+CEREG?\r\n");//查看是否附着(驻网)成功 //7 激活PDP (return ok)) //USART_SendString(&huart4, "AT+CGACT=1,1\r\n"); //8 测试tcp连接(网址为ubuntu公网) //USART_SendString(&huart4, "AT+MIPOPEN=1,\"TCP\",\"121.36.7.137\",22\r\n"); //USART_SendString(&huart4, "AT+MIPCLOSE=1\r\n"); //9连接mqtt //若省略可选参数,则是查询 //USART_SendString(&huart4, "AT+CREG?\r\n");//查看是否GSM成功 //USART_SendString(&huart4, "AT+CPIN?\r\n"); //USART_SendString(&huart4, "AT+MGNSSCFG=?\r\n");//AT+MGNSSCFG GNSS测试命令 //USART_SendString(&huart4, "ATI\r\n");//查询产品版本信息 //USART_SendString(&huart4, "ATI\r\n");//查询产品版本信息 //USART_SendString(&huart4, "AT+MCCID\r\n");//读取ICCID //USART_SendString(&huart4, "AT+MDIALUP=1,1\r\n");//拨号上网 //USART_SendString(&huart4, "AT+MCHIPINFO=‘temp’\r\n");//查询芯片温度 //USART_SendString(&huart4, "AT+CPIN?\r\n");//SIM卡状态 //USART_SendString(&huart4, "AT+CSQ\r\n");//查看信号强度 //USART_SendString(&huart4, "AT+CREG?\r\n"); //USART_SendString(&huart4, "AT+CFUN?\r\n");//确保驻网前为1 //USART_SendString(&huart4, "AT+CEREG?\r\n");//查看是否附着(驻网)成功 //USART_SendString(&huart4, "AT+MIPCALL?\r\n");// 查询拨号状态 /*已激活请跳过*/ //USART_SendString(&huart4, "AT+CGDCONT=1,\"IPV4V6\",\"cmnet\"\r\n");// //配置PDP上下文 //USART_SendString(&huart4, "AT+MIPCALL=1,1\r\n");// 激活PDP,建立应用层拨号连接。 //USART_SendString(&huart4, "AT+MUECONFIG=\"autoconn\",1\r\n");// 配置为自动连网(模组应用层网络) //USART_SendString(&huart4, "AT+MDIALUPCFG=\"auto\",1\r\n");// 配置为自动拨号(上位机网卡拨号) //USART_SendString(&huart4, "AT+CMGF=0\r\n");//配置PDU模式(默认) //USART_SendString(&huart4, "AT+CSMP=33,167,0,0\r\n");//设置文本模式参数为:有效期为相对时间格式,并且编码类型为GSM 7bit //USART_SendString(&huart4, "AT+CNMI=2,2,0,2,0\r\n");//配置接收到短信时自动上报 //USART_SendString(&huart4, "AT+CMGS=23\r\n");//发送PDU短信,PDU长度23字节,数据以ctrl-z(0x1A)结尾。 //USART_SendString(&huart4, "AT+CMGF=1\r\n");// //配置文本模式 //USART_SendString(&huart4, "AT+CSMP=33,167,0,0\r\n");//设置发送为bit7。(可根据实际设置为bit8/bit16) //发送短信 //char msg[] = "Hello, World!"; //char smsCmd[50]; //sprintf(smsCmd, "AT+CMGS=\"**\"\r\n%s%c", msg, 0x1A); // 使用Ctrl+Z (0x1A) 结束短信内容 //USART_SendString(&huart4, smsCmd); //USART_SendString(&huart4, "AT+CCLK?\r\n");//驻网自动同步网络时间 //USART_SendString(&huart4, "AT+MQTTCONN=?\r\n"); //查询mqtt版本 //AT+MQTTCFG="version",[,] //+MQTTCFG: "version", //USART_SendString(&huart4, "AT+MQTTCFG=\"version\"\r\n"); //+MQTTCFG: "version",4 //查询mqtt客户端使用的pdp //AT+MQTTCFG="cid",[,] //+MQTTCFG: "cid"[,] //USART_SendString(&huart4, "AT+MQTTCFG=\"cid\"\r\n"); //+MQTTCFG: "cid",1 //查询当前MQTT SSL模式以及SSL上下文索引配置情况 //AT+MQTTCFG="ssl",[,[,]] //+MQTTCFG: "ssl",, //USART_SendString(&huart4, "AT+MQTTCFG=\"ssl\"\r\n"); //+MQTTCFG: "ssl",0,0 //USART_SendString(&huart4, "AT+MQTTCFG=\"ssl\",2,1\r\n"); //OK //查询当前保活时间 //AT+MQTTCFG="keepalive",[,] //+MQTTCFG: "keepalive", //USART_SendString(&huart4, "AT+MQTTCFG=\"keepalive\"\r\n");//+MQTTCFG: "keepalive",120 //查询当前会话类型 //AT+MQTTCFG="clean",[,] //+MQTTCFG: "clean", //USART_SendString(&huart4, "AT+MQTTCFG=\"clean\"\r\n"); //+MQTTCFG: "clean",0 //查询当前设置的重传间隔以及重传次数配置 //AT+MQTTCFG="retrans",[,[,]] //+MQTTCFG: "retrans",, //USART_SendString(&huart4, "AT+MQTTCFG=\"retrans\"\r\n"); //+MQTTCFG: "retrans",20,0 //查询设置命令(配置Will flag、qos及retain信息) //AT+MQTTCFG="willoption",[,[,[,]]] //+MQTTCFG: "willoption",,, //USART_SendString(&huart4, "AT+MQTTCFG=\"willoption\"\r\n"); //+MQTTCFG: "willoption",0,0,0 //设置命令(配置 Will topic和message信息)查询当前 Will Topic和Will Message信息,输入格式解析受"encoding"配置影响 //AT+MQTTCFG="willpayload",[,,] //+MQTTCFG: "willpayload",, //USART_SendString(&huart4, "AT+MQTTCFG=\"willpayload\"\r\n"); //+MQTTCFG: "willpayload",, //设置命令(配置MQTT心跳请求间隔) 则查询当前MQTT的心跳间隔 //AT+MQTTCFG="pingreq",[,] //+MQTTCFG: "pingreq", //USART_SendString(&huart4, "AT+MQTTCFG=\"pingreq\"\r\n"); //+MQTTCFG: "pingreq",120 //设置命令(配置MQTT心跳请求回显) 查询当前MQTT的心跳回显配置 //AT+MQTTCFG="pingresp",[,] //+MQTTCFG: "pingresp", //USART_SendString(&huart4, "AT+MQTTCFG=\"pingresp\",0,1\r\n"); //+MQTTCFG: "pingresp",0 //设置命令(配置MQTT消息的输入编码以及输出打印编码) 则查询当前编码配置 //AT+MQTTCFG="encoding",[,[,]] //+MQTTCFG: "encoding",, //USART_SendString(&huart4, "AT+MQTTCFG=\"encoding\"\r\n"); //+MQTTCFG: "encoding",0,0 //设置命令(配置MQTT消息缓存输出模式) 查询当前缓存配置 //AT+MQTTCFG="cached",[,] //+MQTTCFG: "cached", //USART_SendString(&huart4, "AT+MQTTCFG=\"cached\"\r\n"); //+MQTTCFG: "cached",0 //设置命令(配置MQTT重连次数) 查询当前重连配置 //AT+MQTTCFG="reconn",[,[,[,]]] //+MQTTCFG: "reconn",,, //USART_SendString(&huart4, "AT+MQTTCFG=\"reconn\"\r\n"); //+MQTTCFG: "reconn",3,20,0 //设置命令(查询MQTT配置信息) //AT+MQTTCFG="query", /* +MQTTCFG: "version", +MQTTCFG: "cid", +MQTTCFG: "ssl",, +MQTTCFG: "keepalive", +MQTTCFG: "clean", +MQTTCFG: "retrans",, +MQTTCFG: "willoption",,, +MQTTCFG: "willpayload",[,] +MQTTCFG: "pingreq", +MQTTCFG: "pingresp", +MQTTCFG: "encoding",, +MQTTCFG: "cached", +MQTTCFG: "reconn",,,*/ //USART_SendString(&huart4, "AT+MQTTCFG=\"query\"\r\n"); //+MQTTCFG: "reconn",3,20,0 //mqttconn 连接(连接至MQTT或MQTTS服务器) //AT+MQTTCONN=? //+MQTTCONN: ,,,,, //USART_SendString(&huart4, "AT+MQTTCONN=?\r\n"); //+MQTTCONN: (0-5),,(0-65535),,, //USART_SendString(&huart4, "AT+MQTTSTART\r\n"); //+MQTTCONN: (0-5),,(0-65535),,, //设置命令 //AT+MQTTCONN=,[,[,,,]] //+MQTTURC: "conn",, //USART_SendString(&huart4, "AT+MQTTCONN=0,\"iot-06z00aohulvp4gg.mqtt.iothub.aliyuncs.com\",1883,\"k0qza26L4FE.4g_dtuV1.0|securemode=2,signmethod=hmacsha256,timestamp=1705036680114|\",\"4g_dtuV1.0&k0qza26L4FE\",\"42177cf93ab7ae09ac82ef151b27b94e123cea0237a77fdb3e24b32a2423b7dc\"\r\n"); //AT+MQTTSUB订阅主题 //AT+MQTTSUB=,,[,,..] //+MQTTSUB: , //成功+MQTTURC: "suback",,,[,,...] //超时+MQTTURC: "timeout",, //USART_SendString(&huart4, "AT+MQTTSUB=0,\"/sys/k0qza26L4FE/${4g_dtuV1.0}/thing/service/property/set\",1\r\n"); //USART_SendString(&huart4, "AT+MQTTSUB=0\r\n"); } #endif #endif #ifdef RTC_TEST #if RTC_TEST ==1 /* Get the RTC current Time */ HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN); /* Get the RTC current Date */ HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN); /* Display date Format : yy/mm/dd */ printf("%02d/%02d/%02d\t",2000 + GetData.Year, GetData.Month, GetData.Date); /* Display time Format : hh:mm:ss */ printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds); //printf("test\r\n"); #endif #endif #ifdef CAN_TEST #if CAN_TEST ==1 //CANTEST,cpu发 // if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) > 0) { // if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) == HAL_OK) { // // 成功发送CAN消息 // // 可以在这里添加自定义的测试代码 // // } // } //CANTEST,收发测试 if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) > 0) { if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) == HAL_OK) { // 成功发送CAN消息 // 可以在这里添加自定义的测试代码 // 修改代码段开始 if (HAL_CAN_GetRxFifoFillLevel(&hcan, CAN_RX_FIFO0) > 0) { HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData); // 处理接收到的CAN消息 // 示例代码:将接收到的数据回传 if (HAL_CAN_AddTxMessage(&hcan, (CAN_TxHeaderTypeDef*)&RxHeader, RxData, &TxMailbox) != HAL_OK) { // 发送CAN消息失败,处理错误情况 } } // 修改代码段结束 //HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData,&TxMailbox); } } #endif #endif #ifdef RESET_4G_TEST #if RESET_4G_TEST ==1 //reset_4G(); if(resetML307A) { resetML307A = false; ML307A_Init(); } #endif #endif #ifdef RESET_BT_TEST #if RESET_BT_TEST ==1 if(resetMBA32A) { resetMBA32A = false; HAL_GPIO_WritePin(REST_BT_GPIO_Port,REST_BT_Pin,GPIO_PIN_SET); MBA32A_Init(); } #endif #endif #ifdef RESET_CPU_TEST #if RESET_CPU_TEST ==1 //HAL_Delay(50000);//关闭看门狗 #endif #endif } /* USER CODE END StartTestTask */ } /* USER CODE BEGIN Header_StartloginfoTaskTask */ /** * @brief Function implementing the loginfoTask thread. * @param argument: Not used * @retval None */ /* USER CODE END Header_StartloginfoTaskTask */ void StartloginfoTaskTask(void const * argument) { /* USER CODE BEGIN StartloginfoTaskTask */ /* Infinite loop */ for(;;) { osDelay(500); //printf("长度:%d,事件:%d,流水号:%d,电量:%d,log:%d,MS:%d,RS:%d,HW:%04X,SW:%04X\r\n",bt_dataLength,bt_error_num,bt_serial_num,bt_battery,bt_log_num,bt_lock_machinesta,bt_lock_ropesta,bt_hwver,bt_sfver); } /* USER CODE END StartloginfoTaskTask */ } /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ /* USER CODE END Application */