uart_process.c 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545
  1. #include "can_process.h"
  2. #include "uart_process.h"
  3. #include "crc_cal.h"
  4. #include "stdlib.h"
  5. #include "stdio.h"
  6. #include "string.h"
  7. #include "encrypt.h"
  8. #include "Update.h"
  9. #include "ctf_process.h"
  10. uint8_t Power_mode = 0;//0-default,1-off,2-on
  11. uint32_t T_startPowerOnOff = 0;
  12. uint8_t UART1_BaudrateSwitch = 0;
  13. uint32_t T_UART1_BaudrateSwitch = 0;//0-9600bps,1-57600bps,2-ready to switch baudrate to 57600bps
  14. uint8_t Transmit_UARTOrCAN = 0;//0-both,1-CAN,2-UART
  15. uint32_t T_RecvCANMsg = 0;
  16. uint32_t T_RecvUartMsg = 0;
  17. void UART1_BaudrateCheck(void)
  18. {
  19. if(UART1_BaudrateSwitch == 2)
  20. {
  21. if((HAL_GetTick() - T_UART1_BaudrateSwitch)>50)
  22. {
  23. UART1_BaudrateSwitch = 1;
  24. MX_USART1_Reopen(57600);
  25. }
  26. }
  27. else if(UART1_BaudrateSwitch == 1)
  28. {
  29. if((HAL_GetTick() - T_UART1_BaudrateSwitch)>5000)
  30. {
  31. UART1_BaudrateSwitch = 0;
  32. MX_USART1_Reopen(1200);
  33. }
  34. }
  35. }
  36. uint8_t Transmit_UARTOrCAN_pre = 0;//0-both,1-CAN,2-UART
  37. void MsgModeCheck(void)
  38. {
  39. Transmit_UARTOrCAN_pre = Transmit_UARTOrCAN;
  40. if(((HAL_GetTick() - T_RecvCANMsg) > 30000) && ((HAL_GetTick() - T_RecvUartMsg) > 30000))
  41. {
  42. Transmit_UARTOrCAN = 0;//超过x秒未收到UART和CAN数据进入模式0,下次通信同时发送CAN和UART数据
  43. }
  44. else if(((HAL_GetTick() - T_RecvCANMsg) < 5000)&&(T_RecvCANMsg>0))
  45. {
  46. Transmit_UARTOrCAN = 1;
  47. }
  48. else if(((HAL_GetTick() - T_RecvUartMsg) < 5000)&&(T_RecvUartMsg>0))
  49. {
  50. Transmit_UARTOrCAN = 2;
  51. }
  52. else if((T_RecvCANMsg == 0)&&(T_RecvUartMsg == 0))
  53. {
  54. Transmit_UARTOrCAN = 0;
  55. }
  56. if(Transmit_UARTOrCAN_pre != Transmit_UARTOrCAN)
  57. {
  58. if(Transmit_UARTOrCAN == 2)
  59. {
  60. HAL_Delay(100);
  61. HAL_GPIO_WritePin(CommSwitch_GPIO_Port, CommSwitch_Pin1, GPIO_PIN_SET);
  62. HAL_GPIO_WritePin(CommSwitch_GPIO_Port, CommSwitch_Pin2, GPIO_PIN_SET);
  63. }
  64. else
  65. {
  66. HAL_Delay(100);
  67. HAL_GPIO_WritePin(CommSwitch_GPIO_Port, CommSwitch_Pin1, GPIO_PIN_RESET);
  68. HAL_GPIO_WritePin(CommSwitch_GPIO_Port, CommSwitch_Pin2, GPIO_PIN_RESET);
  69. }
  70. }
  71. }
  72. void PowerOnOff(uint8_t *mode)
  73. {
  74. if(*mode == 1)
  75. {
  76. if((HAL_GetTick() - T_startPowerOnOff) >= 1000)//Off延时1s
  77. {
  78. HAL_GPIO_WritePin(ACC_WELLING_EN_GPIO_Port, ACC_WELLING_EN_Pin, GPIO_PIN_RESET);//Off
  79. *mode = 0;
  80. }
  81. }
  82. else if(*mode == 2)
  83. {
  84. if((HAL_GetTick() - T_startPowerOnOff) >= 3000)//On延时3s
  85. {
  86. HAL_GPIO_WritePin(ACC_WELLING_EN_GPIO_Port, ACC_WELLING_EN_Pin, GPIO_PIN_RESET);//Off
  87. *mode = 0;
  88. }
  89. }
  90. }
  91. //命令处理
  92. static void UART3_DataProcess(uint8_t Mode, uint16_t Command, uint8_t* Data)
  93. {
  94. switch(Command)
  95. {
  96. //CDL在线检测
  97. case 0x1100:
  98. {
  99. SendCmdData(&UART_TxBuff_Struct3, MODE_REPORT, 0x07FF, 0x1100, (uint8_t*)NULL);
  100. break;
  101. }
  102. //设备开关机
  103. case 0x2201:
  104. {
  105. if(Power_mode == 0)
  106. {
  107. T_startPowerOnOff = HAL_GetTick();
  108. if(Data[0] == 0xF0)//关机
  109. {
  110. Power_mode = 1;
  111. HAL_GPIO_WritePin(ACC_WELLING_EN_GPIO_Port, ACC_WELLING_EN_Pin, GPIO_PIN_SET);//On
  112. }
  113. else if(Data[0] == 0xF1)//开机
  114. {
  115. Power_mode = 2;
  116. HAL_GPIO_WritePin(ACC_WELLING_EN_GPIO_Port, ACC_WELLING_EN_Pin, GPIO_PIN_SET);//On
  117. }
  118. }
  119. if(Data[0] == 0xF0)//关机
  120. {
  121. HAL_GPIO_WritePin(SwitchOnOrOff_GPIO_Port, SwitchOnOrOff_Pin, GPIO_PIN_RESET);
  122. HAL_GPIO_WritePin(ACC_MOTINOVA_EN_GPIO_Port, ACC_MOTINOVA_EN_Pin, GPIO_PIN_RESET);
  123. }
  124. else if(Data[0] == 0xF1)//开机
  125. {
  126. HAL_GPIO_WritePin(SwitchOnOrOff_GPIO_Port, SwitchOnOrOff_Pin, GPIO_PIN_SET);
  127. HAL_GPIO_WritePin(ACC_MOTINOVA_EN_GPIO_Port, ACC_MOTINOVA_EN_Pin, GPIO_PIN_SET);
  128. }
  129. break;
  130. }
  131. //复位
  132. case 0x4400:
  133. {
  134. Refresh_Flag();
  135. __set_FAULTMASK(1);//关闭所有中断
  136. HAL_NVIC_SystemReset();
  137. break;
  138. }
  139. case 0x2505:
  140. {
  141. if (strncmp("RESET", (char *)Data, 5) == 0)
  142. {
  143. // UART_TransferData(&UART_TxBuff_Struct1, UARTID_CDL_TO_MC, Mode, 0x751, Command, Data);
  144. // HAL_Delay(200);
  145. //
  146. // __set_FAULTMASK(1);//关闭所有中断
  147. // HAL_NVIC_SystemReset();
  148. T_UART1_BaudrateSwitch = HAL_GetTick();
  149. UART1_BaudrateSwitch = 2;
  150. }
  151. break;
  152. }
  153. //随机码和密钥进行校验
  154. case 0x5514:
  155. {
  156. static uint8_t InputCode[12];
  157. static uint8_t InputKey[8];
  158. static uint8_t OutputCode[12];
  159. static uint8_t SendData[27];
  160. memcpy(InputCode, Data, 12);
  161. memcpy(InputKey, Data + 12, 8);
  162. CheckCodeCal(InputCode, InputKey, OutputCode);
  163. memcpy(SendData, OutputCode, 12);
  164. memcpy(SendData + 12, (uint8_t*)"V4.1.0_20240827", 15);
  165. SendCmdData(&UART_TxBuff_Struct3, MODE_REPORT, 0x07FF, 0x551B, SendData);
  166. break;
  167. }
  168. //授权
  169. case 0x6600:
  170. {
  171. uint8_t SendData[24];
  172. Ctf_CalAndSave();
  173. memcpy(SendData, MAC_ID, 12);
  174. memcpy(SendData + 12, Check_Code, 12);
  175. SendCmdData(&UART_TxBuff_Struct3, MODE_REPORT, 0x07FF, 0x6618, SendData);
  176. HAL_Delay(200);
  177. __set_FAULTMASK(1);//关闭所有中断
  178. HAL_NVIC_SystemReset();
  179. break;
  180. }
  181. case 0x7702:
  182. {
  183. UART_SendSwitch_Lidian2(&UART_TxBuff_Struct1, 0x01, Command, Data);
  184. HAL_Delay(50);
  185. UART_SendSwitch_zhihuigainian(&UART_TxBuff_Struct1, Command, Data);
  186. HAL_Delay(50);
  187. break;
  188. }
  189. default:break;
  190. }
  191. }
  192. static void UART1_DataProcess(uint8_t Mode, uint16_t Command, uint8_t* Data)
  193. {
  194. }
  195. //发送数据
  196. void UART_SendSwitch_Lidian2(USART_Buf_TypeDef * ptTx, uint8_t Addr, uint16_t Cmd, uint8_t* Data)
  197. {
  198. uint8_t databuf[256] = {0};
  199. uint8_t i = 0;
  200. uint8_t len = 0;
  201. uint16_t checkxor = 0;
  202. len = 20;
  203. databuf[0] = Addr;
  204. databuf[1] = len;
  205. databuf[2] = (uint8_t)((Cmd >> 8) & 0xFF);
  206. for(i=0; i<(Cmd & 0xFF); i++)
  207. {
  208. databuf[3+i] = Data[i];
  209. }
  210. for(i=0; i<len; i++)
  211. {
  212. checkxor ^= databuf[i];
  213. }
  214. databuf[len-1] = checkxor;
  215. UART_SendData(ptTx, databuf, len);
  216. }
  217. void UART_SendSwitch_zhihuigainian(USART_Buf_TypeDef * ptTx, uint16_t Cmd, uint8_t* Data)
  218. {
  219. uint8_t databuf[256] = {0};
  220. uint8_t i = 0;
  221. uint8_t len = 0;
  222. uint16_t checkxor = 0;
  223. len = 13;
  224. databuf[0] = 0x55;
  225. for(i=0; i<(Cmd & 0xFF); i++)
  226. {
  227. databuf[1+i] = Data[i];
  228. }
  229. for(i=0; i<10; i=i+2)
  230. {
  231. checkxor ^= (uint16_t)((databuf[i]<<8) + databuf[i+1]);
  232. }
  233. databuf[len-3] = (uint8_t)(checkxor&0xff);
  234. databuf[len-2] = (uint8_t)(checkxor>>8);
  235. databuf[len-1] = 0xF0;
  236. UART_SendData(ptTx, databuf, len);
  237. }
  238. void UART_TransferData(USART_Buf_TypeDef * ptTx, uint8_t Addr, uint8_t Mode, uint16_t ID, uint16_t Cmd, uint8_t* Data)
  239. {
  240. uint8_t databuf[256] = {0};
  241. uint8_t i = 0;
  242. uint8_t len = 0;
  243. uint16_t checksum = 0;
  244. len = (uint8_t)((Cmd & 0xff) + 4);
  245. if(len > 247)
  246. {
  247. len = 247;
  248. }
  249. databuf[0] = UARTFRAME_BEGIN;
  250. databuf[1] = Addr;
  251. databuf[2] = Mode;
  252. databuf[3] = len;
  253. databuf[4] = (uint8_t)((ID >> 8) & 0xFF);
  254. databuf[5] = (uint8_t)(ID & 0xFF);
  255. databuf[6] = (uint8_t)((Cmd >> 8) & 0xFF);
  256. databuf[7] = (uint8_t)(Cmd & 0xFF);
  257. for(i=0; i<(len-4); i++)
  258. {
  259. databuf[8+i] = Data[i];
  260. }
  261. for(i=1; i<(len+4); i++)
  262. {
  263. checksum = (uint16_t)(databuf[i] + checksum);
  264. }
  265. databuf[4+len] = (uint8_t)checksum;
  266. databuf[5+len] = (uint8_t)(checksum>>8);
  267. databuf[6+len] = UARTFRAME_END1;
  268. databuf[7+len] = UARTFRAME_END2;
  269. UART_SendData(ptTx, databuf, len + 8);
  270. }
  271. void SendCmdData(USART_Buf_TypeDef * ptTx, uint8_t Mode, uint16_t ID, uint16_t Command, uint8_t* Data)
  272. {
  273. uint8_t SendBuf[255] = {0};
  274. uint8_t CRC_Buf[255] = {0};
  275. uint32_t CRC_Result = 0x00000000;
  276. uint8_t DataLength;
  277. DataLength = (uint8_t)(Command & 0xFF);
  278. SendBuf[0] = FRAME_BEGIN1;
  279. SendBuf[1] = FRAME_BEGIN2;
  280. SendBuf[2] = (uint8_t)((ID >> 8) & 0xFF);
  281. SendBuf[3] = (uint8_t)(ID & 0xFF);
  282. SendBuf[4] = Mode;
  283. SendBuf[5] = DataLength + 2;
  284. SendBuf[6] = (uint8_t)((Command >> 8) & 0xFF);
  285. SendBuf[7] = DataLength;
  286. memcpy(SendBuf + 8, Data, DataLength);
  287. memcpy(CRC_Buf, SendBuf, 8 + DataLength);
  288. CRC_Result = CRC32_Calculate(CRC_Buf, DataLength + 8);
  289. SendBuf[8 + DataLength] = (uint8_t)((CRC_Result >> 24) & 0xFF);
  290. SendBuf[9 + DataLength] = (uint8_t)((CRC_Result >> 16) & 0xFF);
  291. SendBuf[10 + DataLength] = (uint8_t)((CRC_Result >> 8) & 0xFF);
  292. SendBuf[11 + DataLength] = (uint8_t)(CRC_Result & 0xFF);
  293. SendBuf[12 + DataLength] = FRAME_END;
  294. UART_SendData(ptTx, SendBuf, DataLength + 13);
  295. }
  296. //串口1数据解析
  297. void Uart1_RxData_Process(USART_Buf_TypeDef* ptUartRx, uint16_t TimeOut)
  298. {
  299. uint8_t Mode, DataLength, Addr;
  300. static uint8_t Data[255];
  301. uint16_t Cmd, i, ID;
  302. uint16_t CheckSumResult=0, CheckSumData=0;
  303. uint8_t FrameBegin, FrameEnd1, FrameEnd2;
  304. static uint32_t DelayTimeCnt = 0;
  305. static TrueOrFalse_Flag_Struct_t IsWaitRX_Flag = FALSE;
  306. if(ptUartRx->ucBufCnt >= 8)
  307. {
  308. //读取帧头
  309. FrameBegin = UART_ReadChar(ptUartRx, 0);
  310. if(FrameBegin == UARTFRAME_BEGIN)
  311. {
  312. Addr = UART_ReadChar(ptUartRx, 1);//读取地址ID
  313. if(Addr == UARTADDR_CDL)
  314. {
  315. //读取帧模式
  316. Mode = UART_ReadChar(ptUartRx, 2);
  317. if((Mode == UARTMODE_READ) || (Mode == UARTMODE_WRITE) || (Mode == UARTMODE_REPORT))
  318. {
  319. //读取数据段长度
  320. DataLength = UART_ReadChar(ptUartRx, 3);
  321. if(ptUartRx->ucBufCnt < (DataLength + 8))//帧头1byte + 地址1byte + 模式1byte + 长度1byte + 校验位2bytes + 帧尾2bytes
  322. {
  323. if(IsWaitRX_Flag == FALSE)
  324. {
  325. DelayTimeCnt = HAL_GetTick();
  326. IsWaitRX_Flag = TRUE;
  327. }
  328. if((HAL_GetTick() - DelayTimeCnt) > TimeOut)//超时,单位ms
  329. {
  330. UART_DelChar(ptUartRx, ptUartRx->ucBufCnt);
  331. IsWaitRX_Flag = FALSE;
  332. }
  333. return;
  334. }
  335. else
  336. {
  337. T_RecvUartMsg = HAL_GetTick();
  338. IsWaitRX_Flag = FALSE;
  339. //接收到完整正确数据包
  340. for(i=0; i<(DataLength+4); i++)//读取数据段
  341. {
  342. Data[i] = UART_ReadChar(ptUartRx, i);
  343. }
  344. CheckSumData = (UART_ReadChar(ptUartRx, 4 + DataLength)) + \
  345. (UART_ReadChar(ptUartRx, 5 + DataLength) << 8);
  346. for(i = 1; i<(DataLength+4); i++)
  347. {
  348. CheckSumResult = (uint16_t)(Data[i] + CheckSumResult);
  349. }
  350. FrameEnd1 = UART_ReadChar(ptUartRx, 6 + DataLength);
  351. FrameEnd2 = UART_ReadChar(ptUartRx, 7 + DataLength);
  352. if((CheckSumData == CheckSumResult) && (FrameEnd1 == UARTFRAME_END1) && (FrameEnd2 == UARTFRAME_END2))// 比较校验和帧尾
  353. {
  354. //数据处理
  355. UART1_DataProcess(Mode, Cmd, &Data[4]);//Mode为帧模式,Cmd为命令字,Data为数据段
  356. if(DataLength >= 4)//数据段包含ID+Cmd,至少4bytes
  357. {
  358. ID = (uint16_t)((Data[4]<<8) + Data[5]);
  359. Cmd = (uint16_t)((Data[6]<<8) + Data[7]);
  360. SendCmdData(&UART_TxBuff_Struct3, Mode, ID, Cmd, &Data[8]);
  361. }
  362. if((Cmd==0xC109) || (Cmd==0xC202) || (Cmd==0xC302) || (Cmd==0xC402) || (Cmd==0xC502))
  363. {
  364. T_UART1_BaudrateSwitch = HAL_GetTick();
  365. }
  366. //清除缓存
  367. UART_DelChar(ptUartRx, DataLength + 8);
  368. //通信指示
  369. HAL_GPIO_TogglePin(LED_Display_GPIO_Port, LED_Display_Pin);
  370. }
  371. else
  372. {
  373. UART_DelChar(ptUartRx, 1);
  374. }
  375. }
  376. }
  377. else
  378. {
  379. UART_DelChar(ptUartRx, 1);
  380. }
  381. }
  382. else
  383. {
  384. UART_DelChar(ptUartRx, 1);
  385. }
  386. }
  387. else
  388. {
  389. UART_DelChar(ptUartRx, 1);
  390. }
  391. }
  392. }
  393. //串口3数据解析
  394. void Uart3_RxData_Process(USART_Buf_TypeDef* ptUartRx, uint16_t TimeOut)
  395. {
  396. uint8_t Mode, CmdLength, DataLength;
  397. static uint8_t Data[255], CRC_Buf[255];
  398. uint16_t Cmd, i, ID;
  399. uint32_t CrcResult, CrcData;
  400. uint8_t FrameBegin1, FrameBegin2;
  401. static uint32_t DelayTimeCnt = 0;
  402. static TrueOrFalse_Flag_Struct_t IsWaitRX_Flag = FALSE;
  403. if(ptUartRx->ucBufCnt >= 13)
  404. {
  405. //读取帧头
  406. FrameBegin1 = UART_ReadChar(ptUartRx, 0);
  407. CRC_Buf[0] = FrameBegin1;
  408. FrameBegin2 = UART_ReadChar(ptUartRx, 1);
  409. CRC_Buf[1] = FrameBegin2;
  410. if((FrameBegin1 == FRAME_BEGIN1) && (FrameBegin2 == FRAME_BEGIN2))
  411. {
  412. CRC_Buf[2] = UART_ReadChar(ptUartRx, 2);
  413. CRC_Buf[3] = UART_ReadChar(ptUartRx, 3);
  414. ID = (uint16_t)(CRC_Buf[2] << 8) + CRC_Buf[3];
  415. //读取帧模式
  416. Mode = UART_ReadChar(ptUartRx, 4);
  417. CRC_Buf[4] = Mode;
  418. if((Mode == MODE_READ) || (Mode == MODE_WRITE) || (Mode == MODE_REPORT))
  419. {
  420. //读取命令段长度和命令字
  421. CmdLength = UART_ReadChar(ptUartRx, 5);
  422. CRC_Buf[5] = CmdLength;
  423. Cmd = (UART_ReadChar(ptUartRx, 6) << 8) + UART_ReadChar(ptUartRx, 7);
  424. CRC_Buf[6] = (uint8_t)((Cmd >> 8) & 0xFF);
  425. CRC_Buf[7] = (uint8_t)(Cmd & 0xFF);
  426. DataLength = UART_ReadChar(ptUartRx, 7);
  427. if((CmdLength - DataLength) == 2)
  428. {
  429. if(ptUartRx->ucBufCnt < (CmdLength + 11))//帧头2bytes + ID2bytes 模式1byte + 命令段长度1byte + 校验位4bytes + 帧尾1byte
  430. {
  431. if(IsWaitRX_Flag == FALSE)
  432. {
  433. DelayTimeCnt = HAL_GetTick();
  434. IsWaitRX_Flag = TRUE;
  435. }
  436. if((HAL_GetTick() - DelayTimeCnt) > TimeOut)//超时,单位ms
  437. {
  438. UART_DelChar(ptUartRx, ptUartRx->ucBufCnt);
  439. IsWaitRX_Flag = FALSE;
  440. }
  441. return;
  442. }
  443. else
  444. {
  445. IsWaitRX_Flag = FALSE;
  446. //接收到完整正确数据包
  447. for(i=0; i<DataLength; i++)//读取数据段
  448. {
  449. Data[i] = UART_ReadChar(ptUartRx, 8 + i);
  450. CRC_Buf[8 + i] = Data[i];
  451. }
  452. CrcData = (UART_ReadChar(ptUartRx, 8 + DataLength) << 24) + \
  453. (UART_ReadChar(ptUartRx, 9 + DataLength) << 16) + \
  454. (UART_ReadChar(ptUartRx, 10 + DataLength) << 8) + \
  455. UART_ReadChar(ptUartRx, 11 + DataLength);
  456. CrcResult = CRC32_Calculate(CRC_Buf, 8 + DataLength);
  457. if((CrcData - CrcResult) == 0) // 比较校验
  458. {
  459. //数据处理
  460. UART3_DataProcess(Mode, Cmd, Data);//Mode为帧模式,Cmd为命令字,Data为数据段
  461. //数据转发CAN
  462. memcpy((uint8_t*)(CRC_Buf + 2), (uint8_t*)(CRC_Buf + 4), DataLength + 4);
  463. CRC_Buf[6 + DataLength] = UART_ReadChar(ptUartRx, 8 + DataLength);
  464. CRC_Buf[7 + DataLength] = UART_ReadChar(ptUartRx, 9 + DataLength);
  465. CRC_Buf[8 + DataLength] = UART_ReadChar(ptUartRx, 10 + DataLength);
  466. CRC_Buf[9 + DataLength] = UART_ReadChar(ptUartRx, 11 + DataLength);
  467. CRC_Buf[10 + DataLength] = FRAME_END;
  468. CAN_SendData(ID, CRC_Buf, DataLength + 11);
  469. UART_TransferData(&UART_TxBuff_Struct1, UARTADDR_CDL, Mode, ID, Cmd, Data);
  470. //清除缓存
  471. UART_DelChar(ptUartRx, CmdLength + 11);
  472. //通信指示
  473. HAL_GPIO_TogglePin(LED_Display_GPIO_Port, LED_Display_Pin);
  474. return;
  475. }
  476. UART_DelChar(ptUartRx, 1);
  477. }
  478. }
  479. else
  480. {
  481. UART_DelChar(ptUartRx, 1);
  482. }
  483. }
  484. else
  485. {
  486. UART_DelChar(ptUartRx, 1);
  487. }
  488. }
  489. else
  490. {
  491. UART_DelChar(ptUartRx, 1);
  492. }
  493. }
  494. }