freertos.c 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * File Name : freertos.c
  5. * Description : Code for freertos applications
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2024 STMicroelectronics.
  10. * All rights reserved.
  11. *
  12. * This software is licensed under terms that can be found in the LICENSE file
  13. * in the root directory of this software component.
  14. * If no LICENSE file comes with this software, it is provided AS-IS.
  15. *
  16. ******************************************************************************
  17. */
  18. /* USER CODE END Header */
  19. /* Includes ------------------------------------------------------------------*/
  20. #include "FreeRTOS.h"
  21. #include "task.h"
  22. #include "main.h"
  23. #include "cmsis_os.h"
  24. /* Private includes ----------------------------------------------------------*/
  25. /* USER CODE BEGIN Includes */
  26. #include "usart.h"
  27. #include "can.h"
  28. #include "ConfigMacros.h"
  29. //#include "net4g.h"
  30. /* USER CODE END Includes */
  31. /* Private typedef -----------------------------------------------------------*/
  32. /* USER CODE BEGIN PTD */
  33. /* USER CODE END PTD */
  34. /* Private define ------------------------------------------------------------*/
  35. /* USER CODE BEGIN PD */
  36. /* USER CODE END PD */
  37. /* Private macro -------------------------------------------------------------*/
  38. /* USER CODE BEGIN PM */
  39. uint8_t test = 0;
  40. uint8_t count = 0;
  41. extern Menu_table menu;
  42. extern UART_HandleTypeDef huart1;
  43. extern UART_HandleTypeDef huart2;
  44. extern UART_HandleTypeDef huart3;
  45. extern UART_HandleTypeDef huart4;
  46. extern UART_HandleTypeDef huart5;
  47. extern unsigned char SN1[];
  48. extern char DisConnected[];
  49. extern char Connected_phone[];
  50. extern bool warningtag ;
  51. extern bool resetML307A;
  52. extern bool refresh;
  53. extern bool resetFlag;
  54. extern bool sealFlag;
  55. extern bool BT_CONN;
  56. extern bool REBOOT;
  57. extern bool bd_flag; //已绑定标志位
  58. extern bool open_flagw;
  59. extern bool close_flagw;
  60. extern bool bt_lock_ropesta;
  61. extern bool bt_lock_machinesta;
  62. extern uint8_t u4RecvFlag; // 串口4接收标志串口接收完成标志
  63. extern RTC_HandleTypeDef hrtc;
  64. extern CAN_HandleTypeDef hcan;
  65. RTC_DateTypeDef GetData; //获取日期结构体
  66. RTC_TimeTypeDef GetTime; //获取时间结构体
  67. /* USER CODE END PM */
  68. /* Private variables ---------------------------------------------------------*/
  69. /* USER CODE BEGIN Variables */
  70. /* USER CODE END Variables */
  71. osThreadId ScanKeyTaskHandle;
  72. osThreadId BT4GTaskHandle;
  73. osThreadId testTaskHandle;
  74. osThreadId loginfoTaskHandle;
  75. /* Private function prototypes -----------------------------------------------*/
  76. /* USER CODE BEGIN FunctionPrototypes */
  77. /* USER CODE END FunctionPrototypes */
  78. void StartScanKeyTask(void const * argument);
  79. void StarBT4GTask(void const * argument);
  80. void StartTestTask(void const * argument);
  81. void StartloginfoTaskTask(void const * argument);
  82. void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */
  83. /* GetIdleTaskMemory prototype (linked to static allocation support) */
  84. void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize );
  85. /* USER CODE BEGIN GET_IDLE_TASK_MEMORY */
  86. static StaticTask_t xIdleTaskTCBBuffer;
  87. static StackType_t xIdleStack[configMINIMAL_STACK_SIZE];
  88. void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer, StackType_t **ppxIdleTaskStackBuffer, uint32_t *pulIdleTaskStackSize )
  89. {
  90. *ppxIdleTaskTCBBuffer = &xIdleTaskTCBBuffer;
  91. *ppxIdleTaskStackBuffer = &xIdleStack[0];
  92. *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
  93. /* place for user code */
  94. }
  95. /* USER CODE END GET_IDLE_TASK_MEMORY */
  96. /**
  97. * @brief FreeRTOS initialization
  98. * @param None
  99. * @retval None
  100. */
  101. void MX_FREERTOS_Init(void) {
  102. /* USER CODE BEGIN Init */
  103. /* USER CODE END Init */
  104. /* USER CODE BEGIN RTOS_MUTEX */
  105. /* add mutexes, ... */
  106. /* USER CODE END RTOS_MUTEX */
  107. /* USER CODE BEGIN RTOS_SEMAPHORES */
  108. /* add semaphores, ... */
  109. /* USER CODE END RTOS_SEMAPHORES */
  110. /* USER CODE BEGIN RTOS_TIMERS */
  111. /* start timers, add new ones, ... */
  112. /* USER CODE END RTOS_TIMERS */
  113. /* USER CODE BEGIN RTOS_QUEUES */
  114. /* add queues, ... */
  115. /* USER CODE END RTOS_QUEUES */
  116. /* Create the thread(s) */
  117. /* definition and creation of ScanKeyTask */
  118. osThreadDef(ScanKeyTask, StartScanKeyTask, osPriorityRealtime, 0, 128);
  119. ScanKeyTaskHandle = osThreadCreate(osThread(ScanKeyTask), NULL);
  120. /* definition and creation of BT4GTask */
  121. osThreadDef(BT4GTask, StarBT4GTask, osPriorityRealtime, 0, 128);
  122. BT4GTaskHandle = osThreadCreate(osThread(BT4GTask), NULL);
  123. /* definition and creation of testTask */
  124. osThreadDef(testTask, StartTestTask, osPriorityRealtime, 0, 128);
  125. testTaskHandle = osThreadCreate(osThread(testTask), NULL);
  126. /* definition and creation of loginfoTask */
  127. osThreadDef(loginfoTask, StartloginfoTaskTask, osPriorityRealtime, 0, 128);
  128. loginfoTaskHandle = osThreadCreate(osThread(loginfoTask), NULL);
  129. /* USER CODE BEGIN RTOS_THREADS */
  130. /* add threads, ... */
  131. /* USER CODE END RTOS_THREADS */
  132. }
  133. /* USER CODE BEGIN Header_StartScanKeyTask */
  134. /**
  135. * @brief Function implementing the ScanKeyTask thread.
  136. * @param argument: Not used
  137. * @retval None
  138. */
  139. /* USER CODE END Header_StartScanKeyTask */
  140. void StartScanKeyTask(void const * argument)
  141. {
  142. /* USER CODE BEGIN StartScanKeyTask */
  143. /* Infinite loop */
  144. for(;;)
  145. {
  146. osDelay(1);
  147. updatekeystate();
  148. execute_function(menu);
  149. OLED_Refresh();
  150. workinfo(); //搬移蓝牙数据
  151. }
  152. /* USER CODE END StartScanKeyTask */
  153. }
  154. /* USER CODE BEGIN Header_StarBT4GTask */
  155. /**
  156. * @brief Function implementing the BT4GTask thread.
  157. * @param argument: Not used
  158. * @retval None
  159. */
  160. /* USER CODE END Header_StarBT4GTask */
  161. void StarBT4GTask(void const * argument)
  162. {
  163. /* USER CODE BEGIN StarBT4GTask */
  164. /* Infinite loop */
  165. for(;;)
  166. {
  167. osDelay(1);
  168. if(resetMBA32A) //freertos监测蓝牙复位标志位
  169. {
  170. MBA32A_Init();
  171. }
  172. else if(warningtag) //freertos监测施解封确认标志位
  173. {
  174. HAL_Delay(2000); //延时显示1.2s
  175. menu.current=0; //回到首界面显示
  176. refresh=true; //清除界面元素标志位
  177. warningtag=false; //复位施解封确认标志位
  178. Write_Information(resetDevAddr+FLASH_PAGE_SIZE);
  179. //printf("******解封标志:%s\t%d %d %d %d %d\n",(sealFlag ? "true":"false"), menu.current, menu.up, menu.next, menu.enter, menu.back);
  180. }
  181. else if(REBOOT && bd_flag)//初始化完成,并且已经绑定
  182. {
  183. BT_CONN=true;
  184. if(bt_lock_ropesta==0x01 && bt_lock_machinesta==0x01)// 0x01电机关 0x01锁绳拔出
  185. {
  186. menu.home=0x04;//关(电机关上,锁绳未插入)
  187. menu.sn=SN1;
  188. }
  189. else if(bt_lock_ropesta==0x01 && bt_lock_machinesta==0x00)// 0x00电机开 0x01锁绳拔出
  190. {
  191. menu.home=0x01;//开(全部打开)
  192. menu.sn=SN1;
  193. }
  194. else if(bt_lock_ropesta==0x00 && bt_lock_machinesta==0x00)//0x00电机开 0x00锁绳插入
  195. {
  196. menu.home=0x03;//开(电机没关,锁绳已插入)
  197. menu.sn=SN1;
  198. }
  199. else if(bt_lock_ropesta==0x00 && bt_lock_machinesta==0x01)//0x01电机关 0x00锁绳插入
  200. {
  201. menu.home=0x02;//关(全部关闭)
  202. menu.sn=SN1;
  203. }
  204. else
  205. {
  206. //default status
  207. menu.home=0;
  208. menu.sn=SN1;
  209. }
  210. }
  211. else
  212. {
  213. //default status
  214. menu.home=0;
  215. menu.sn=SN1;
  216. }
  217. // USART_SendString(&huart5, "AT+MAC?\r\n");
  218. // HAL_Delay(100);
  219. // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容
  220. // USART_SendString(&huart5, "AT+DISCONN=0\r\n");
  221. // HAL_Delay(50);
  222. // USART_SendString(&huart5, "AT+AUTO_DEL\r\n");
  223. // HAL_Delay(50);
  224. // USART_SendString(&huart5, "AT+RESET=1\r\n");
  225. // USART_SendString(&huart5, "AT+UUIDS?\r\n");
  226. // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显
  227. // USART_SendString(&huart5, "AT+UUIDW?\r\n");
  228. // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显
  229. // USART_SendString(&huart5, "AT+UUIDN?\r\n");
  230. // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显
  231. // if(UART_485_EN)
  232. // {
  233. // printf("485 output\r\n");
  234. // }
  235. // if(UART_TTL_EN)
  236. // {
  237. // printf("TTL output\r\n");
  238. // }
  239. // if(test==1)
  240. // {
  241. //test=0;
  242. //int txLen = sprintf((char *)recvBuff, "RecvAT>>%s<<",g_ML307A_8buf_Down);//4g
  243. // int txLen = sprintf((char *)recvBuff, "RecvAT>>\r\n%s<<",g_MBA32A_8buf);//bt
  244. // HAL_UART_Transmit(&huart3,recvBuff,txLen,0xffff);
  245. // memcpy(g_ML307A_8buf_Down,g_ML307A_8buf,20);
  246. //
  247. // printf("buf:%s\r\n",g_MBA32A_8buf);
  248. // printf("bufD:%s\r\n",g_ML307A_8buf_Down);
  249. // }
  250. // test ++;
  251. //
  252. // if(test==2)
  253. // {
  254. // test =0;
  255. //
  256. // }
  257. //printf("%d\r\n",test);
  258. }
  259. /* USER CODE END StarBT4GTask */
  260. }
  261. /* USER CODE BEGIN Header_StartTestTask */
  262. /**
  263. * @brief Function implementing the testTask thread.
  264. * @param argument: Not used
  265. * @retval None
  266. */
  267. /* USER CODE END Header_StartTestTask */
  268. void StartTestTask(void const * argument)
  269. {
  270. /* USER CODE BEGIN StartTestTask */
  271. #ifdef CAN_TEST
  272. #if CAN_TEST ==1
  273. CAN_TxHeaderTypeDef TxHeader;
  274. uint8_t TxData[8] = {1, 2, 3, 4, 5, 6, 7, 8};
  275. uint32_t TxMailbox;
  276. TxHeader.StdId = 0x123;
  277. TxHeader.ExtId = 0;
  278. TxHeader.RTR = CAN_RTR_DATA;
  279. TxHeader.IDE = CAN_ID_STD;
  280. TxHeader.DLC = 8;
  281. TxHeader.TransmitGlobalTime = DISABLE;
  282. CAN_RxHeaderTypeDef RxHeader; // 添加这行定义RxHeader变量
  283. uint8_t RxData[8]; // 添加这行定义RxData变量
  284. #endif
  285. #endif
  286. /* Infinite loop */
  287. for(;;)
  288. {
  289. osDelay(1500);
  290. #ifdef WORK_BT_TEST
  291. #if WORK_BT_TEST ==1
  292. {
  293. test++;
  294. //测试协议报文
  295. // uint8_t header[2] = {0x66, 0x00};//Jl_lock帧头
  296. // //uint8_t serchInfo_CMD[] = {0x01, 0x00};//查询信息命令帧
  297. // uint8_t openlock_CMD[] = {0x00,0x00, 0x00,0x00,0x00,0x01, 0x55,0x55,0x55,0x55, 0x24,0x02,0x04,0x0E ,0x01};//开锁命令帧
  298. // uint8_t openlock_head = 0x02;
  299. // uint8_t openlock_length = (sizeof(openlock_CMD)-2);
  300. // openlock_CMD[0]=openlock_head;
  301. // openlock_CMD[1]=openlock_length;
  302. // sendCombinedArray(header,sizeof(header),openlock_CMD,sizeof(openlock_CMD));
  303. if(close_flagw && (open_flagw==false))
  304. {
  305. close_lock();
  306. }
  307. else if(open_flagw && (close_flagw==false))
  308. {
  309. open_lock();
  310. }
  311. else if((close_flagw==false)&&(open_flagw==false)&& bd_flag)
  312. {
  313. lock_searchInfo();
  314. }
  315. //open_lock();
  316. // close_lock();
  317. //测试条件语句
  318. // USART_SendString(&huart5, "AT+RESET=1\r\n");
  319. // HAL_Delay(50);
  320. // HAL_UART_Transmit(&huart1,g_MBA32A_8buf_Down, 30, 0xFFFF);//485回显
  321. //
  322. // test++;
  323. // USART_SendString(&huart5, "AT+DEV?\r\n");
  324. // HAL_Delay(100);
  325. // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容
  326. // USART_SendString(&huart5, "AT+NAME?\r\n");
  327. // HAL_Delay(100);
  328. // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容
  329. // USART_SendString(&huart5, "AT+MAC?\r\n");
  330. // HAL_Delay(100);
  331. // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容
  332. //USART_SendString(&huart5, "AT+RESET=1\r\n");
  333. // HAL_Delay(100);
  334. // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");//连接指定 MAC 地址设备
  335. // HAL_Delay(100);
  336. //// USART_SendString(&huart5, "AT+DEV?\r\n"); //查询当前已连接的设备
  337. // count = countValidData(g_MBA32A_8buf,1024,0);
  338. // printf("Mbabuf:%s\r\n_%d\r\n",g_MBA32A_8buf,count);
  339. {
  340. /**蓝牙发送命令无需带内冒号**/
  341. //BLE 协议说明
  342. //0xfff2 Write 写入的数据会从串口TX输出
  343. //0xfff1 Notify 从串口 RX 输入的数据将会在此通道产生通知发给移动设备!!!移动接收
  344. //APP 通过 0xFFF2 通道 将数据发送给 MCU:MCU 通过 0xFFF1 通道将数据发送给 APP,用户也可通过 AT 指令对读写通道进行自定义。
  345. // USART_SendString(&huart5, "AT+UUIDS=0000000200001000800000805f9b34fb\r\n"); //设置主服务通道
  346. // HAL_Delay(50);
  347. // USART_SendString(&huart5, "AT+UUIDN=0000ff0500001000800000805f9b34fb\r\n"); //设置读服务通道
  348. // HAL_Delay(50);
  349. // USART_SendString(&huart5, "AT+UUIDW=0000ff0400001000800000805f9b34fb\r\n"); //设置写服务通道
  350. // HAL_Delay(50);
  351. // USART_SendString(&huart5, "AT+UUIDS=0000180100001000800000805f9b34fb\r\n"); //设置主服务通道
  352. // HAL_Delay(50);
  353. //USART_SendString(&huart5, "AT+RESET=1\r\n");//恢复出厂设置 // USART_SendString(&huart5, "AT+RESET=1\r\n");//恢复出厂设置
  354. // USART_SendString(&huart5, "AT+NAME?\r\n");//23字节(0-22)
  355. // HAL_Delay(50);
  356. // printf("%s",g_MBA32A_8buf);
  357. //USART_SendString(&huart5, "AT+MAC?\r\n"); //查询蓝牙 4.0 地址码
  358. // HAL_Delay(50);
  359. // printf("1%s",g_MBA32A_8buf);
  360. // printf("2%s",&g_MBA32A_8buf[23]);
  361. // HAL_Delay(100);
  362. //USART_SendString(&huart5, "AT+DEV?\r\n"); //查询当前已连接的设备
  363. // HAL_UART_Receive(&huart5,&g_MBA32A_8buf[0],20,150);
  364. // printf("%s\r\n",g_MBA32A_8buf);
  365. //USART_SendString(&huart5, "AT+RESET=1\r\n");//恢复出厂设置
  366. // HAL_Delay(100);
  367. // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");
  368. // HAL_Delay(100);
  369. // printf("%s", g_MBA32A_8buf_Down); // 使用接收缓冲区的内容
  370. // USART_SendString(&huart5, "AT+UUIDN?\r\n");
  371. // HAL_Delay(100);
  372. // USART_SendString(&huart5, "AT+UUIDW?\r\n");
  373. // USART_SendString(&huart5, "AT+DISCONN=0\r\n");
  374. // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");//连接指定 MAC 地址设备
  375. // USART_SendString(&huart5, "AT+UUIDS=0000fff000001000800000805f9b34fb\r\n"); //设置主服务通道
  376. // USART_SendString(&huart5, "AT+UUIDW=0000ff0500001000800000805f9b34fb\r\n"); //设置写服务通道
  377. // USART_SendString(&huart5, "AT+UUIDN=0000ff0400001000800000805f9b34fb\r\n"); //设置读服务通道
  378. // USART_SendString(&huart5, "AT+AUTO_CFG=1\r\n");
  379. // HAL_Delay(100);
  380. // USART_SendString(&huart5, "AT+AUTO_MAC=1500000000cb\r\n");
  381. // HAL_Delay(100);
  382. // USART_SendString(&huart5, "AT+CONN=1500000000cb\r\n");//连接指定 MAC 地址设备
  383. // HAL_Delay(100);
  384. // USART_SendString(&huart5, "AT+TXPOWER=10\r\n");
  385. // uint8_t data[] = {0x01, 0x00,0x00};
  386. // HAL_UART_Transmit(&huart1,data,3,0xffff);
  387. // HAL_UART_Transmit(&huart5,data,3,0xffff);
  388. // uint8_t len = sizeof(data) / sizeof(data[0]);
  389. // uint8_t data_open[] = {0x02, 0x04,0x01,0,0,0};
  390. // uint8_t len = sizeof(data_open) / sizeof(data_open[0]);
  391. // uint8_t crc = crc16(data_open, len);
  392. // uint8_t sendData[len + 1];
  393. // for (uint8_t i = 0; i < len; i++) {
  394. // sendData[i] = data_open[i];
  395. // }
  396. // sendData[len] = crc;
  397. //printf("Send Data with CRC: ");
  398. // for (uint8_t i = 0; i < len + 1; i++) {
  399. // printf("%02X ", sendData[i]);
  400. // }
  401. //printf("\n");
  402. //USART_SendString(&huart5, "AT+SCAN=1\r\n");//查询扫描蓝牙 4.0 BLE 设备(0-关闭 1-开启)
  403. // USART_SendString(&huart5, "AT+UUIDW?\r\n"); //查询 BLE 写服务通道fff2
  404. // HAL_UART_Receive(&huart5,g_MBA32A_8buf,BUFFER_SIZE,100);
  405. // USART_SendString(&huart5, "AT+DISCONN=1\r\n");//断开蓝牙连接(0-断开所有连接的从设备 1-主动断开与主机端设备的连接)
  406. // USART_SendString(&huart5, "AT+AINTVL?\r\n");//查询广播间隔 单位ms
  407. // HAL_Delay(50);
  408. // USART_SendString(&huart5, "AT+VER?\r\n"); //读取软件版本
  409. // HAL_Delay(50);
  410. // USART_SendString(&huart5, "AT+TXPOWER?\r\n");//查询模块的发射功率
  411. // HAL_Delay(50);
  412. // int count = countValidData(g_MBA32A_8buf,256,0);
  413. // if(count<2)
  414. // {
  415. // test = 0;
  416. // //HAL_Delay(100);
  417. // }else {
  418. // printf("mba:%s-%d",g_MBA32A_8buf,count);
  419. // }
  420. // USART_SendString(&huart5, "AT+REBOOT=1\r\n");//设置模块重启
  421. // USART_SendString(&huart5, "AT+SCAN_MANU=1\r\n");//扫描蓝牙自定义广播数据
  422. // USART_SendString(&huart5, "AT+SCAN=1\r\n");//查询扫描蓝牙 4.0 BLE 设备(0-关闭 1-开启)
  423. // HAL_Delay(200);
  424. // USART_SendString(&huart5, "AT+CONN=DC:2D:04:C7:21:8A\r\n");//连接指定 MAC 地址设备
  425. // USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开蓝牙连接(0-断开所有连接的从设备 1-主动断开与主机端设备的连接)
  426. // USART_SendString(&huart5, "AT+ADV?\r\n");//查询广播状态(0-关闭 1-开启)
  427. // USART_SendString(&huart5, "AT+UART?\r\n");//查询模块串口波特率(0:9600/ 1:14400/ 2:19200/ 3:38400/ 4:57600/ 5:115200/ 6:230400)
  428. // }
  429. // }
  430. //USART_SendString(&huart5, "AT+DEV?\r\n");//查询当前已连接的设备
  431. //}
  432. // else if(test == 3)
  433. // {
  434. // //USART_SendString(&huart5, "AT+VER?\r\n");//查询当前已连接的设备
  435. // }
  436. // }
  437. }
  438. }
  439. #endif
  440. #endif
  441. #ifdef WORK_4G_TEST
  442. #if WORK_4G_TEST == 1
  443. {
  444. //if(test==1)
  445. //{
  446. //1 必须步骤AT
  447. //USART_SendString(&huart4, "AT\r\n");
  448. //2 查询SIM卡状态
  449. //USART_SendString(&huart4, "AT+CPIN?\r\n");
  450. //3 查询协议栈是否打开(return 1)
  451. //USART_SendString(&huart4, "AT+CFUN?\r\n");//确保驻网前为1
  452. //4 查询信号质量(小于10表示信号弱)
  453. //USART_SendString(&huart4, "AT+CSQ\r\n");
  454. //5 设置APN(中国移动 return ok)
  455. //USART_SendString(&huart4, "AT+CGDCONT=1,\"IP\",\"CMNET\"\r\n");
  456. //6 查询是否驻网成功 (return 0,1)
  457. //USART_SendString(&huart4, "AT+CEREG?\r\n");//查看是否附着(驻网)成功
  458. //7 激活PDP (return ok))
  459. //USART_SendString(&huart4, "AT+CGACT=1,1\r\n");
  460. //8 测试tcp连接(网址为ubuntu公网)
  461. //USART_SendString(&huart4, "AT+MIPOPEN=1,\"TCP\",\"121.36.7.137\",22\r\n");
  462. //USART_SendString(&huart4, "AT+MIPCLOSE=1\r\n");
  463. //9连接mqtt
  464. //若省略可选参数,则是查询
  465. //USART_SendString(&huart4, "AT+CREG?\r\n");//查看是否GSM成功
  466. //USART_SendString(&huart4, "AT+CPIN?\r\n");
  467. //USART_SendString(&huart4, "AT+MGNSSCFG=?\r\n");//AT+MGNSSCFG GNSS测试命令
  468. //USART_SendString(&huart4, "ATI\r\n");//查询产品版本信息
  469. //USART_SendString(&huart4, "ATI\r\n");//查询产品版本信息
  470. //USART_SendString(&huart4, "AT+MCCID\r\n");//读取ICCID
  471. //USART_SendString(&huart4, "AT+MDIALUP=1,1\r\n");//拨号上网
  472. //USART_SendString(&huart4, "AT+MCHIPINFO=‘temp’\r\n");//查询芯片温度
  473. //USART_SendString(&huart4, "AT+CPIN?\r\n");//SIM卡状态
  474. //USART_SendString(&huart4, "AT+CSQ\r\n");//查看信号强度
  475. //USART_SendString(&huart4, "AT+CREG?\r\n");
  476. //USART_SendString(&huart4, "AT+CFUN?\r\n");//确保驻网前为1
  477. //USART_SendString(&huart4, "AT+CEREG?\r\n");//查看是否附着(驻网)成功
  478. //USART_SendString(&huart4, "AT+MIPCALL?\r\n");// 查询拨号状态
  479. /*已激活请跳过*/
  480. //USART_SendString(&huart4, "AT+CGDCONT=1,\"IPV4V6\",\"cmnet\"\r\n");// //配置PDP上下文
  481. //USART_SendString(&huart4, "AT+MIPCALL=1,1\r\n");// 激活PDP,建立应用层拨号连接。
  482. //USART_SendString(&huart4, "AT+MUECONFIG=\"autoconn\",1\r\n");// 配置为自动连网(模组应用层网络)
  483. //USART_SendString(&huart4, "AT+MDIALUPCFG=\"auto\",1\r\n");// 配置为自动拨号(上位机网卡拨号)
  484. //USART_SendString(&huart4, "AT+CMGF=0\r\n");//配置PDU模式(默认)
  485. //USART_SendString(&huart4, "AT+CSMP=33,167,0,0\r\n");//设置文本模式参数为:有效期为相对时间格式,并且编码类型为GSM 7bit
  486. //USART_SendString(&huart4, "AT+CNMI=2,2,0,2,0\r\n");//配置接收到短信时自动上报
  487. //USART_SendString(&huart4, "AT+CMGS=23\r\n");//发送PDU短信,PDU长度23字节,数据以ctrl-z(0x1A)结尾。
  488. //USART_SendString(&huart4, "AT+CMGF=1\r\n");// //配置文本模式
  489. //USART_SendString(&huart4, "AT+CSMP=33,167,0,0\r\n");//设置发送为bit7。(可根据实际设置为bit8/bit16)
  490. //发送短信
  491. //char msg[] = "Hello, World!";
  492. //char smsCmd[50];
  493. //sprintf(smsCmd, "AT+CMGS=\"**\"\r\n%s%c", msg, 0x1A); // 使用Ctrl+Z (0x1A) 结束短信内容
  494. //USART_SendString(&huart4, smsCmd);
  495. //USART_SendString(&huart4, "AT+CCLK?\r\n");//驻网自动同步网络时间
  496. //USART_SendString(&huart4, "AT+MQTTCONN=?\r\n");
  497. //查询mqtt版本
  498. //AT+MQTTCFG="version",<connect_id>[,<version>]
  499. //+MQTTCFG: "version",<version>
  500. //USART_SendString(&huart4, "AT+MQTTCFG=\"version\"\r\n"); //+MQTTCFG: "version",4
  501. //查询mqtt客户端使用的pdp
  502. //AT+MQTTCFG="cid",<connect_id>[,<cid>]
  503. //+MQTTCFG: "cid"[,<cid>]
  504. //USART_SendString(&huart4, "AT+MQTTCFG=\"cid\"\r\n"); //+MQTTCFG: "cid",1
  505. //查询当前MQTT SSL模式以及SSL上下文索引配置情况
  506. //AT+MQTTCFG="ssl",<connect_id>[,<ssl_enable>[,<ssl_id>]]
  507. //+MQTTCFG: "ssl",<ssl_enable>,<ssl_id>
  508. //USART_SendString(&huart4, "AT+MQTTCFG=\"ssl\"\r\n"); //+MQTTCFG: "ssl",0,0
  509. //USART_SendString(&huart4, "AT+MQTTCFG=\"ssl\",2,1\r\n"); //OK
  510. //查询当前保活时间
  511. //AT+MQTTCFG="keepalive",<connect_id>[,<keepalive_time>]
  512. //+MQTTCFG: "keepalive",<keepalive_time>
  513. //USART_SendString(&huart4, "AT+MQTTCFG=\"keepalive\"\r\n");//+MQTTCFG: "keepalive",120
  514. //查询当前会话类型
  515. //AT+MQTTCFG="clean",<connect_id>[,<clean_session>]
  516. //+MQTTCFG: "clean",<clean_session>
  517. //USART_SendString(&huart4, "AT+MQTTCFG=\"clean\"\r\n"); //+MQTTCFG: "clean",0
  518. //查询当前设置的重传间隔以及重传次数配置
  519. //AT+MQTTCFG="retrans",<connect_id>[,<retrans_interval>[,<retry_times>]]
  520. //+MQTTCFG: "retrans",<retrans_interval>,<retry_times>
  521. //USART_SendString(&huart4, "AT+MQTTCFG=\"retrans\"\r\n"); //+MQTTCFG: "retrans",20,0
  522. //查询设置命令(配置Will flag、qos及retain信息)
  523. //AT+MQTTCFG="willoption",<connect_id>[,<will_flag>[,<will_qos>[,<will_retain>]]]
  524. //+MQTTCFG: "willoption",<will_flag>,<will_qos>,<will_retain>
  525. //USART_SendString(&huart4, "AT+MQTTCFG=\"willoption\"\r\n"); //+MQTTCFG: "willoption",0,0,0
  526. //设置命令(配置 Will topic和message信息)查询当前 Will Topic和Will Message信息,<will_msg>输入格式解析受"encoding"配置影响
  527. //AT+MQTTCFG="willpayload",<connect_id>[,<will_topic>,<will_msg>]
  528. //+MQTTCFG: "willpayload",<will_topic>,<will_msg>
  529. //USART_SendString(&huart4, "AT+MQTTCFG=\"willpayload\"\r\n"); //+MQTTCFG: "willpayload",,
  530. //设置命令(配置MQTT心跳请求间隔) 则查询当前MQTT的心跳间隔
  531. //AT+MQTTCFG="pingreq",<connect_id>[,<ping_interval>]
  532. //+MQTTCFG: "pingreq",<ping_interval>
  533. //USART_SendString(&huart4, "AT+MQTTCFG=\"pingreq\"\r\n"); //+MQTTCFG: "pingreq",120
  534. //设置命令(配置MQTT心跳请求回显) 查询当前MQTT的心跳回显配置
  535. //AT+MQTTCFG="pingresp",<connect_id>[,<pingack>]
  536. //+MQTTCFG: "pingresp",<pingack>
  537. //USART_SendString(&huart4, "AT+MQTTCFG=\"pingresp\",0,1\r\n"); //+MQTTCFG: "pingresp",0
  538. //设置命令(配置MQTT消息的输入编码以及输出打印编码) 则查询当前编码配置
  539. //AT+MQTTCFG="encoding",<connect_id>[,<input_format>[,<output_format>]]
  540. //+MQTTCFG: "encoding",<input_format>,<output_format>
  541. //USART_SendString(&huart4, "AT+MQTTCFG=\"encoding\"\r\n"); //+MQTTCFG: "encoding",0,0
  542. //设置命令(配置MQTT消息缓存输出模式) 查询当前缓存配置
  543. //AT+MQTTCFG="cached",<connect_id>[,<cached_mode>]
  544. //+MQTTCFG: "cached",<cached_mode>
  545. //USART_SendString(&huart4, "AT+MQTTCFG=\"cached\"\r\n"); //+MQTTCFG: "cached",0
  546. //设置命令(配置MQTT重连次数) 查询当前重连配置
  547. //AT+MQTTCFG="reconn",<connect_id>[,<recon_times>[,<reconn_interval>[,<mode>]]]
  548. //+MQTTCFG: "reconn",<reconn_times>,<reconn_interval>,<mode>
  549. //USART_SendString(&huart4, "AT+MQTTCFG=\"reconn\"\r\n"); //+MQTTCFG: "reconn",3,20,0
  550. //设置命令(查询MQTT配置信息)
  551. //AT+MQTTCFG="query",<connect_id>
  552. /* +MQTTCFG: "version",<version>
  553. +MQTTCFG: "cid",<cid>
  554. +MQTTCFG: "ssl",<ssl_enable>,<ssl_id>
  555. +MQTTCFG: "keepalive",<keepalive_time>
  556. +MQTTCFG: "clean",<clean_session>
  557. +MQTTCFG: "retrans",<retrans_interval>,<retry_times>
  558. +MQTTCFG: "willoption",<will_flag>,<will_qos>,<will_retain>
  559. +MQTTCFG: "willpayload",[<will_topic>,<will_msg>]
  560. +MQTTCFG: "pingreq",<ping_interval>
  561. +MQTTCFG: "pingresp",<pingack>
  562. +MQTTCFG: "encoding",<input_format>,<output_format>
  563. +MQTTCFG: "cached",<cached_mode>
  564. +MQTTCFG: "reconn",<reconn_times>,<reconn_interval>,<mode>*/
  565. //USART_SendString(&huart4, "AT+MQTTCFG=\"query\"\r\n"); //+MQTTCFG: "reconn",3,20,0
  566. //mqttconn 连接(连接至MQTT或MQTTS服务器)
  567. //AT+MQTTCONN=?
  568. //+MQTTCONN: <connect_id>,<host>,<port>,<clientID>,<user>,<passwd>
  569. //USART_SendString(&huart4, "AT+MQTTCONN=?\r\n"); //+MQTTCONN: (0-5),,(0-65535),,,
  570. //USART_SendString(&huart4, "AT+MQTTSTART\r\n"); //+MQTTCONN: (0-5),,(0-65535),,,
  571. //设置命令
  572. //AT+MQTTCONN=<connect_id>,<host>[,<port>[,<clientID>,<user>,<passwd>]]
  573. //+MQTTURC: "conn",<connect_id>,<conn_state>
  574. //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");
  575. //AT+MQTTSUB订阅主题
  576. //AT+MQTTSUB=<connect_id>,<topic>,<qos>[,<topic1>,<qos1>..]
  577. //+MQTTSUB: <connect_id>,<mid>
  578. //成功+MQTTURC: "suback",<connect_id>,<mid>,<code>[,<code1>,...]
  579. //超时+MQTTURC: "timeout",<connect_id>,<mid>
  580. //USART_SendString(&huart4, "AT+MQTTSUB=0,\"/sys/k0qza26L4FE/${4g_dtuV1.0}/thing/service/property/set\",1\r\n");
  581. //USART_SendString(&huart4, "AT+MQTTSUB=0\r\n");
  582. }
  583. #endif
  584. #endif
  585. #ifdef RTC_TEST
  586. #if RTC_TEST ==1
  587. /* Get the RTC current Time */
  588. HAL_RTC_GetTime(&hrtc, &GetTime, RTC_FORMAT_BIN);
  589. /* Get the RTC current Date */
  590. HAL_RTC_GetDate(&hrtc, &GetData, RTC_FORMAT_BIN);
  591. /* Display date Format : yy/mm/dd */
  592. printf("%02d/%02d/%02d\t",2000 + GetData.Year, GetData.Month, GetData.Date);
  593. /* Display time Format : hh:mm:ss */
  594. printf("%02d:%02d:%02d\r\n",GetTime.Hours, GetTime.Minutes, GetTime.Seconds);
  595. //printf("test\r\n");
  596. #endif
  597. #endif
  598. #ifdef CAN_TEST
  599. #if CAN_TEST ==1
  600. //CANTEST,cpu发
  601. // if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) > 0) {
  602. // if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) == HAL_OK) {
  603. // // 成功发送CAN消息
  604. // // 可以在这里添加自定义的测试代码
  605. //
  606. // }
  607. // }
  608. //CANTEST,收发测试
  609. if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) > 0) {
  610. if (HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox) == HAL_OK) {
  611. // 成功发送CAN消息
  612. // 可以在这里添加自定义的测试代码
  613. // 修改代码段开始
  614. if (HAL_CAN_GetRxFifoFillLevel(&hcan, CAN_RX_FIFO0) > 0) {
  615. HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData);
  616. // 处理接收到的CAN消息
  617. // 示例代码:将接收到的数据回传
  618. if (HAL_CAN_AddTxMessage(&hcan, (CAN_TxHeaderTypeDef*)&RxHeader, RxData, &TxMailbox) != HAL_OK) {
  619. // 发送CAN消息失败,处理错误情况
  620. }
  621. }
  622. // 修改代码段结束
  623. //HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData,&TxMailbox);
  624. }
  625. }
  626. #endif
  627. #endif
  628. #ifdef RESET_4G_TEST
  629. #if RESET_4G_TEST ==1
  630. //reset_4G();
  631. if(resetML307A)
  632. {
  633. resetML307A = false;
  634. ML307A_Init();
  635. }
  636. #endif
  637. #endif
  638. #ifdef RESET_BT_TEST
  639. #if RESET_BT_TEST ==1
  640. if(resetMBA32A)
  641. {
  642. resetMBA32A = false;
  643. HAL_GPIO_WritePin(REST_BT_GPIO_Port,REST_BT_Pin,GPIO_PIN_SET);
  644. MBA32A_Init();
  645. }
  646. #endif
  647. #endif
  648. #ifdef RESET_CPU_TEST
  649. #if RESET_CPU_TEST ==1
  650. //HAL_Delay(50000);//关闭看门狗
  651. #endif
  652. #endif
  653. }
  654. /* USER CODE END StartTestTask */
  655. }
  656. /* USER CODE BEGIN Header_StartloginfoTaskTask */
  657. /**
  658. * @brief Function implementing the loginfoTask thread.
  659. * @param argument: Not used
  660. * @retval None
  661. */
  662. /* USER CODE END Header_StartloginfoTaskTask */
  663. void StartloginfoTaskTask(void const * argument)
  664. {
  665. /* USER CODE BEGIN StartloginfoTaskTask */
  666. /* Infinite loop */
  667. for(;;)
  668. {
  669. osDelay(500);
  670. //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);
  671. }
  672. /* USER CODE END StartloginfoTaskTask */
  673. }
  674. /* Private application code --------------------------------------------------*/
  675. /* USER CODE BEGIN Application */
  676. /* USER CODE END Application */