main.c 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file : main.c
  5. * @brief : Main program body
  6. ******************************************************************************
  7. * @attention
  8. *
  9. * Copyright (c) 2023 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 "main.h"
  21. #include "adc.h"
  22. #include "dma.h"
  23. #include "tim.h"
  24. #include "usart.h"
  25. #include "gpio.h"
  26. /* Private includes ----------------------------------------------------------*/
  27. /* USER CODE BEGIN Includes */
  28. /* USER CODE END Includes */
  29. /* Private typedef -----------------------------------------------------------*/
  30. /* USER CODE BEGIN PTD */
  31. /* USER CODE END PTD */
  32. /* Private define ------------------------------------------------------------*/
  33. /* USER CODE BEGIN PD */
  34. /* USER CODE END PD */
  35. /* Private macro -------------------------------------------------------------*/
  36. /* USER CODE BEGIN PM */
  37. /* USER CODE END PM */
  38. /* Private variables ---------------------------------------------------------*/
  39. /* USER CODE BEGIN PV */
  40. uint8_t data_to_send[50];
  41. uint16_t CRC_value = 0;
  42. uint16_t initial_address = 0x00C1;
  43. uint32_t System_version = Version_sys;
  44. uint16_t BaudrateValue = 0x0000;
  45. uint16_t Adc2_CalibrationValue ;
  46. uint16_t Adc3_CalibrationValue ;
  47. uint8_t Rx_Flag = 0;
  48. uint16_t Rx_Len = 0;
  49. uint8_t Rx_Buf[Rx_Max] = {0};
  50. uint8_t gpioaStatus = 0;
  51. uint8_t gpiobStatus = 0;
  52. uint8_t bufMain[128];
  53. int spr000;
  54. /* USER CODE END PV */
  55. /* Private function prototypes -----------------------------------------------*/
  56. void SystemClock_Config(void);
  57. /* USER CODE BEGIN PFP */
  58. #ifdef iap_
  59. typedef struct _T2C_RemoteCaliData
  60. {
  61. uint16_t FrameHead; //帧头 0-1
  62. uint32_t AddrExtModule; //4字节扩展地址 2--5
  63. uint16_t FunctionCode; //功能码2字节 只能是0x0003、0x0006或者0x0010 6--7
  64. uint16_t AddrRegStart; //寄存器起始地址2字节:合法范围为0x0000~0xffff 8--9
  65. uint16_t NumberOfRegs; //数据个数2字节:最多读取0xffff字节;实际取决于终端限制,目前为256字节 10--11
  66. uint32_t ReserveData001; //保留字4字节 12--15
  67. uint8_t PayLoadData[44+32+32]; //有效载荷具体有三种:44,或者76字节,或者108字节;字节 16--59
  68. uint16_t ReserveData002; //保留字2字节 60--61
  69. uint16_t CheckSum; //校验2字节 62--63
  70. }sT2C_RemoteCaliDat;
  71. typedef struct{
  72. uint16_t USE_RKG; //控制器占用人孔盖总线
  73. uint16_t USE_XYF; //控制器占用卸油阀总线
  74. uint16_t KZQ_ErrorCnt; //校验错误计数
  75. uint16_t KZQ_Error; //控制器通信错误
  76. uint8_t sensor_addr; //操作的传感器地址
  77. uint8_t sensor_RW; //操作的传感器读写属性
  78. uint16_t sensor_reg; //操作的传感器寄存器地址,即功能码
  79. uint8_t sensor_datelen; //操作数据长度
  80. uint8_t data_buf[70]; //下发数据缓存
  81. }KZQ_Inf;
  82. #define ADDR_Is_In_ElecFence 0x05D0 // 1488 车是否在电子围栏内
  83. sT2C_RemoteCaliDat T2C_RemoteCaliDat001 =
  84. {
  85. 0x3901,
  86. 0x9551000,
  87. 0x0003,
  88. ADDR_Is_In_ElecFence,//0x0000,
  89. 0x0001, //操作的数据个数
  90. 0x55aa55aa, //保留字4字节
  91. {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,\
  92. 25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44},
  93. 0x7788,//保留字2字节
  94. 0x99aa //校验2字节
  95. };
  96. sT2C_RemoteCaliDat *pT2C_RemoteCaliData = &T2C_RemoteCaliDat001;
  97. uint8_t CMD_KZQ[256] =
  98. {0x39,0x01,0x95,0x50,0x00,0x01,0x00,0x03,
  99. 0x00,0x00,0x00,0x00,0x95,0x05,0xaa,0xaa,
  100. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  101. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  102. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  103. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  104. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  105. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  106. };
  107. int flagU2Rx=0;
  108. int data_lengthU2;
  109. uint8_t* ptx = CMD_KZQ;
  110. uint16_t ModbusCRC = 0,SetSuccess = 0,ModbusCRC1 = 0,SetSuccess1 = 0,SetSuccess2=0,SetSuccess3=0;
  111. int i000;
  112. uint8_t* send_ptr;
  113. uint16_t send_len;
  114. uint32_t tmpU32;
  115. KZQ_Inf kzq_inf;
  116. KZQ_Inf* pkzq = &kzq_inf;
  117. uint8_t USART2_RX_BUF003[128];
  118. uint8_t F_STATE[70] = {0};
  119. uint8_t ptxCang01Temp[150];
  120. uint32_t KZQ_RTerror = 0;
  121. void RstCPU(void)
  122. {
  123. uint16_t j;
  124. __disable_irq();
  125. while(1)
  126. {
  127. __disable_irq();
  128. NVIC_SystemReset();
  129. while(j --)
  130. {
  131. __nop(); __nop(); __nop(); __nop();
  132. }
  133. }
  134. }
  135. #endif
  136. /* USER CODE END PFP */
  137. /* Private user code ---------------------------------------------------------*/
  138. /* USER CODE BEGIN 0 */
  139. /* USER CODE END 0 */
  140. /**
  141. * @brief The application entry point.
  142. * @retval int
  143. */
  144. int main(void)
  145. {
  146. /* USER CODE BEGIN 1 */
  147. #if IR_ROM1 == 0x08000000
  148. Start_BootLoader();
  149. #else
  150. SCB->VTOR = FLASH_BASE | ADD_UPDATE_PROG;
  151. __set_PRIMASK(0);
  152. #endif
  153. /* USER CODE END 1 */
  154. /* MCU Configuration--------------------------------------------------------*/
  155. /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  156. HAL_Init();
  157. /* USER CODE BEGIN Init */
  158. /* USER CODE END Init */
  159. /* Configure the system clock */
  160. SystemClock_Config();
  161. /* USER CODE BEGIN SysInit */
  162. /* USER CODE END SysInit */
  163. /* Initialize all configured peripherals */
  164. MX_GPIO_Init();
  165. MX_DMA_Init();
  166. MX_USART1_UART_Init();
  167. MX_ADC1_Init();
  168. MX_TIM2_Init();
  169. MX_USART3_UART_Init();
  170. /* USER CODE BEGIN 2 */
  171. HAL_TIM_Base_Start_IT(&htim2);
  172. read_new_address(ADDR_FLASH_PAGE_94);
  173. updatePbStatus(read_flash_16(ADDR_FLASH_PAGE_104));
  174. update_baudrate(read_flash_16(ADDR_FLASH_PAGE_114));
  175. AdcCalibration_init();
  176. spr000=sprintf((char*)bufMain,"system reset...%5d",5);
  177. HAL_UART_Transmit(&huart1,bufMain,spr000,300);
  178. HAL_UART_Receive_DMA(&huart1,USART2_RX_BUF,Uart2_BUF_SIZE);
  179. __HAL_UART_ENABLE_IT(&huart1, UART_IT_IDLE);
  180. /* USER CODE END 2 */
  181. /* Infinite loop */
  182. /* USER CODE BEGIN WHILE */
  183. while (1)
  184. {
  185. ModBus();
  186. #ifdef iap_
  187. if (flagU2Rx == 1 && (USART2_RX_BUF002[0] == 0xa5) && (USART2_RX_BUF002[1] == 0x5a))
  188. {
  189. flagU2Rx = 0;
  190. if ((data_lengthU2 > 300) || ((USART2_RX_BUF002[0] == 0xa5) && (USART2_RX_BUF002[1] == 0x5a)))
  191. {
  192. tmpU32 = (USART2_RX_BUF002[0] << 24) | (USART2_RX_BUF002[1] << 16) | (USART2_RX_BUF002[2] << 8) | (USART2_RX_BUF002[3]);
  193. if (StartBytes_IAP == tmpU32)
  194. {
  195. Process_CMD_IAP_Update();
  196. continue;
  197. }
  198. }
  199. // KZQ_RTerror = 0;
  200. // ASC转换为16进制,收到数据为:3901开头的数据总长度131字节
  201. if ((USART2_RX_BUF002[0] == 0x3A) && (USART2_RX_BUF002[1] == 0x33) && (USART2_RX_BUF002[2] == 0x39) && (USART2_RX_BUF002[3] == 0x30)) //判断帧头
  202. {
  203. if (data_lengthU2 != 131)
  204. {
  205. ++KZQ_RTerror;
  206. continue;
  207. }
  208. for (i000 = 0; i000 < (data_lengthU2 - 3) / 2; i000++)
  209. {
  210. T2C_RemoteCaliDat001.PayLoadData[i000] = MODBUS_ASCII_AsciiToHex(USART2_RX_BUF002 + 1 + 0 + i000 * 2);
  211. USART2_RX_BUF003[i000] = MODBUS_ASCII_AsciiToHex(USART2_RX_BUF002 + 1 + 0 + i000 * 2);
  212. }
  213. //解析后的数据拷贝过来
  214. memcpy(USART2_RX_BUF002, USART2_RX_BUF003, (data_lengthU2 - 3) / 2);
  215. data_lengthU2 = (data_lengthU2 - 3) / 2;
  216. }
  217. if (data_lengthU2 < 5)
  218. continue;
  219. ModbusCRC = USART2_RX_BUF002[data_lengthU2 - 1] << 8;
  220. ModbusCRC |= USART2_RX_BUF002[data_lengthU2 - 2];
  221. ModbusCRC1 = LIB_CRC_MODBUS(USART2_RX_BUF002, data_lengthU2 - 2);
  222. if ((USART2_RX_BUF002[0] != 0x39) && (USART2_RX_BUF002[1] <= 0x01) && (USART2_RX_BUF002[2] <= 0x95) && (USART2_RX_BUF002[3] <= 0x50)) //判断帧头
  223. {
  224. RstCPU();
  225. }
  226. }
  227. #endif
  228. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET);
  229. HAL_Delay(1);
  230. HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET);
  231. gpioaStatus = GetPaInputStatus();
  232. gpiobStatus = GetPbOutputStatus();
  233. GetADCResults(&hadc1);
  234. /* USER CODE END WHILE */
  235. /* USER CODE BEGIN 3 */
  236. }
  237. /* USER CODE END 3 */
  238. }
  239. /**
  240. * @brief System Clock Configuration
  241. * @retval None
  242. */
  243. void SystemClock_Config(void)
  244. {
  245. RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  246. RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
  247. RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  248. /** Initializes the RCC Oscillators according to the specified parameters
  249. * in the RCC_OscInitTypeDef structure.
  250. */
  251. RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  252. RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  253. RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  254. RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  255. RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  256. RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  257. RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  258. if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  259. {
  260. Error_Handler();
  261. }
  262. /** Initializes the CPU, AHB and APB buses clocks
  263. */
  264. RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  265. |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  266. RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  267. RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  268. RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  269. RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  270. if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  271. {
  272. Error_Handler();
  273. }
  274. PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;
  275. PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;
  276. if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
  277. {
  278. Error_Handler();
  279. }
  280. }
  281. /* USER CODE BEGIN 4 */
  282. uint16_t read_flash_16(uint32_t addr){
  283. uint16_t data = *(volatile uint16_t*)addr; // 从Flash中读取2个字节
  284. return data;
  285. }
  286. void read_new_address(uint32_t addr){
  287. uint16_t init_address = read_flash_16(addr);
  288. if(init_address == 0xFFFF) {
  289. initial_address = initial_address;
  290. } else {
  291. initial_address = init_address; // 读取新地址并赋值给initial_address
  292. }
  293. }
  294. void erase_flash(uint32_t ADDR_FLASH){ //进行擦除
  295. FLASH_EraseInitTypeDef erase_init;
  296. erase_init.TypeErase = FLASH_TYPEERASE_PAGES; // 擦除类型为页擦除
  297. erase_init.PageAddress = ADDR_FLASH;
  298. erase_init.NbPages = 1; // 擦除的页数
  299. uint32_t page_error = 0;
  300. HAL_FLASH_Unlock(); // 解锁Flash
  301. HAL_StatusTypeDef status = HAL_FLASHEx_Erase(&erase_init, &page_error); // 执行擦除操作
  302. HAL_FLASH_Lock(); // 上锁Flash
  303. if(status == HAL_OK){
  304. if(ADDR_FLASH == ADDR_FLASH_PAGE_94) {
  305. initial_address = 0; // 将initial_address清零
  306. }
  307. else if(ADDR_FLASH == ADDR_FLASH_PAGE_104) {
  308. gpiobStatus = 0; // 将pb_status清零
  309. }
  310. else if(ADDR_FLASH == ADDR_FLASH_PAGE_114) {
  311. BaudrateValue = 0xFFFF;
  312. }
  313. else if(ADDR_FLASH == ADDR_FLASH_PAGE_124) {
  314. Adc2_CalibrationValue = 0x0000; // 清零
  315. }
  316. else if(ADDR_FLASH == ADDR_FLASH_PAGE_134) {
  317. Adc3_CalibrationValue = 0x0000; // 清零
  318. }
  319. }
  320. }
  321. void Write_Information(uint32_t addr, uint8_t* rx_buffer, uint8_t buffer_index) {
  322. uint16_t newValue = 0;
  323. erase_flash(addr);
  324. HAL_FLASH_Unlock(); // 解锁Flash
  325. if (addr == ADDR_FLASH_PAGE_94) { // 写入地址到Flash
  326. newValue = rx_buffer[buffer_index];
  327. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, ADDR_FLASH_PAGE_94, newValue);
  328. if (status == HAL_OK) {
  329. initial_address = newValue; // 将新地址赋值给initial_address
  330. }
  331. }
  332. else if (addr == ADDR_FLASH_PAGE_104) { // 写入PB状态到Flash
  333. newValue = rx_buffer[buffer_index];
  334. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, ADDR_FLASH_PAGE_104, newValue);
  335. if (status == HAL_OK) {
  336. gpiobStatus = newValue; // 将新状态赋值给gpiobStatus
  337. }
  338. }
  339. else if (addr == ADDR_FLASH_PAGE_114) { // 写入波特率到Flash
  340. newValue = rx_buffer[buffer_index];
  341. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, ADDR_FLASH_PAGE_114, newValue);
  342. if (status == HAL_OK) {
  343. BaudrateValue = newValue; // 将新状态赋值给BaudrateValue
  344. }
  345. }
  346. else if (addr == ADDR_FLASH_PAGE_124 || addr == ADDR_FLASH_PAGE_134) { // 写入ADC校准值到Flash
  347. uint16_t Standard_value = (0.6 / (3.3 / 4096));
  348. if (addr == ADDR_FLASH_PAGE_124) {
  349. if (adc2_rawValue >= Standard_value) {
  350. newValue = adc2_rawValue - Standard_value;
  351. } else {
  352. newValue = Standard_value - adc2_rawValue;
  353. newValue |= 0x8000;
  354. }
  355. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, ADDR_FLASH_PAGE_124, newValue);
  356. if (status == HAL_OK) {
  357. Adc2_CalibrationValue = newValue & 0x7FFF;
  358. Value_old_addr2 = newValue;
  359. }
  360. } else if (addr == ADDR_FLASH_PAGE_134) {
  361. if (adc3_rawValue >= Standard_value) {
  362. newValue = adc3_rawValue - Standard_value;
  363. } else {
  364. newValue = Standard_value - adc3_rawValue;
  365. newValue |= 0x8000;
  366. }
  367. HAL_StatusTypeDef status = HAL_FLASH_Program(FLASH_TYPEPROGRAM_HALFWORD, ADDR_FLASH_PAGE_134, newValue);
  368. if (status == HAL_OK) {
  369. Adc3_CalibrationValue = newValue & 0x7FFF;
  370. Value_old_addr3 = newValue;
  371. }
  372. }
  373. }
  374. HAL_FLASH_Lock(); // 上锁Flash
  375. }
  376. void delay_sys_us(uint32_t Delay)//1个delay,大概1.5us
  377. {
  378. uint32_t cnt = Delay * 8;
  379. uint32_t i = 0;
  380. for(i = 0; i < cnt; i++)__NOP();
  381. }
  382. void ModBus(void) {
  383. if (Rx_Flag == 1 && (calculate_crc(Rx_Buf,6) == (Rx_Buf[7] << 8 | Rx_Buf[6])) && data_lengthU2 < 10) {
  384. if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  385. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, 0x00, gpioaStatus, 0x00, 0x00};
  386. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  387. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  388. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  389. HAL_UART_Transmit(&huart1, data_to_send, 7, 6);
  390. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  391. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  392. Rx_Flag = 0;
  393. HAL_UART_AbortReceive(&huart1);
  394. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  395. }
  396. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  397. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, 0x00, gpiobStatus, 0x00, 0x00};
  398. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  399. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  400. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  401. HAL_UART_Transmit(&huart1, data_to_send, 7, 6);
  402. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  403. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  404. Rx_Flag = 0;
  405. HAL_UART_AbortReceive(&huart1);
  406. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  407. }
  408. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x03 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  409. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, adc2_byte1, adc2_byte2, 0x00, 0x00};
  410. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  411. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  412. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  413. HAL_UART_Transmit(&huart1, data_to_send, 7, 6);
  414. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  415. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  416. Rx_Flag = 0;
  417. HAL_UART_AbortReceive(&huart1);
  418. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  419. }
  420. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x04 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  421. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, adc3_byte1, adc3_byte2, 0x00, 0x00};
  422. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  423. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  424. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  425. HAL_UART_Transmit(&huart1, data_to_send, 7, 6);
  426. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  427. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  428. Rx_Flag = 0;
  429. HAL_UART_AbortReceive(&huart1);
  430. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  431. }
  432. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x05 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  433. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x02, adc1_byte1, adc1_byte2, 0x00, 0x00};
  434. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  435. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  436. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  437. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 7, 6);
  438. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  439. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  440. Rx_Flag = 0;
  441. HAL_UART_AbortReceive(&huart1);
  442. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  443. }
  444. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
  445. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, 0x00, gpioaStatus, 0x00, gpiobStatus, 0x00, 0x00};
  446. uint16_t CRC_value = calculate_crc(data_to_send, 7);
  447. data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
  448. data_to_send[8] = (uint8_t)(CRC_value >> 8);
  449. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 9, 8);
  450. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  451. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  452. Rx_Flag = 0;
  453. HAL_UART_AbortReceive(&huart1);
  454. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  455. }
  456. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x03){
  457. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x06, 0x00, gpioaStatus, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, 0x00, 0x00};
  458. uint16_t CRC_value = calculate_crc(data_to_send, 9);
  459. data_to_send[9] = (uint8_t)(CRC_value & 0xFF);
  460. data_to_send[10] = (uint8_t)(CRC_value >> 8);
  461. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 11, 10);
  462. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  463. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  464. Rx_Flag = 0;
  465. HAL_UART_AbortReceive(&huart1);
  466. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  467. }
  468. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x04){
  469. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x08, 0x00, gpioaStatus, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, 0x00, 0x00};
  470. uint16_t CRC_value = calculate_crc(data_to_send, 11);
  471. data_to_send[11] = (uint8_t)(CRC_value & 0xFF);
  472. data_to_send[12] = (uint8_t)(CRC_value >> 8);
  473. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 13, 12);
  474. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  475. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  476. Rx_Flag = 0;
  477. HAL_UART_AbortReceive(&huart1);
  478. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  479. }
  480. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x01 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x05){
  481. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x0A, 0x00, gpioaStatus, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
  482. uint16_t CRC_value = calculate_crc(data_to_send, 13);
  483. data_to_send[13] = (uint8_t)(CRC_value & 0xFF);
  484. data_to_send[14] = (uint8_t)(CRC_value >> 8);
  485. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 15, 14);
  486. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  487. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  488. Rx_Flag = 0;
  489. HAL_UART_AbortReceive(&huart1);
  490. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  491. }
  492. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
  493. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, 0x00, 0x00};
  494. uint16_t CRC_value = calculate_crc(data_to_send, 7);
  495. data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
  496. data_to_send[8] = (uint8_t)(CRC_value >> 8);
  497. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 9, 8);
  498. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  499. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  500. Rx_Flag = 0;
  501. HAL_UART_AbortReceive(&huart1);
  502. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  503. }
  504. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x03){
  505. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x06, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, 0x00, 0x00};
  506. uint16_t CRC_value = calculate_crc(data_to_send, 9);
  507. data_to_send[9] = (uint8_t)(CRC_value & 0xFF);
  508. data_to_send[10] = (uint8_t)(CRC_value >> 8);
  509. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 11, 10);
  510. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  511. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  512. Rx_Flag = 0;
  513. HAL_UART_AbortReceive(&huart1);
  514. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  515. }
  516. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x04){
  517. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x08, 0x00, gpiobStatus, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
  518. uint16_t CRC_value = calculate_crc(data_to_send, 11);
  519. data_to_send[11] = (uint8_t)(CRC_value & 0xFF);
  520. data_to_send[12] = (uint8_t)(CRC_value >> 8);
  521. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 13, 12);
  522. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  523. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  524. Rx_Flag = 0;
  525. HAL_UART_AbortReceive(&huart1);
  526. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  527. }
  528. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x03 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
  529. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, 0x00, 0x00};
  530. uint16_t CRC_value = calculate_crc(data_to_send, 7);
  531. data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
  532. data_to_send[8] = (uint8_t)(CRC_value >> 8);
  533. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 9, 8);
  534. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  535. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  536. Rx_Flag = 0;
  537. HAL_UART_AbortReceive(&huart1);
  538. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  539. }
  540. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x03 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x03){
  541. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x06, adc2_byte1, adc2_byte2, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
  542. uint16_t CRC_value = calculate_crc(data_to_send, 9);
  543. data_to_send[9] = (uint8_t)(CRC_value & 0xFF);
  544. data_to_send[10] = (uint8_t)(CRC_value >> 8);
  545. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 11, 10);
  546. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  547. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  548. Rx_Flag = 0;
  549. HAL_UART_AbortReceive(&huart1);
  550. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  551. }
  552. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x04 && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
  553. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, adc3_byte1, adc3_byte2, adc1_byte1, adc1_byte2, 0x00, 0x00};
  554. uint16_t CRC_value = calculate_crc(data_to_send, 7);
  555. data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
  556. data_to_send[8] = (uint8_t)(CRC_value >> 8);
  557. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 9, 8);
  558. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  559. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  560. Rx_Flag = 0;
  561. HAL_UART_AbortReceive(&huart1);
  562. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  563. }
  564. else if(Rx_Buf[0] == 0xFA && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xAA && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  565. uint8_t data_to_send[] = {0xFA, 0x03, 0x02, 0x00, (uint8_t)initial_address, 0x00, 0x00};
  566. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  567. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  568. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  569. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 7, 6);
  570. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  571. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  572. Rx_Flag = 0;
  573. HAL_UART_AbortReceive(&huart1);
  574. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  575. }
  576. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x03 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xBB && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x02){
  577. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x03, 0x04, (uint8_t)(System_version >> 24), (uint8_t)(System_version >> 16), (uint8_t)(System_version >> 8), (uint8_t)(System_version ), 0x00, 0x00};
  578. uint16_t CRC_value = calculate_crc(data_to_send, 7);
  579. data_to_send[7] = (uint8_t)(CRC_value & 0xFF);
  580. data_to_send[8] = (uint8_t)(CRC_value >> 8);
  581. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 9, 8);
  582. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  583. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  584. Rx_Flag = 0;
  585. HAL_UART_AbortReceive(&huart1);
  586. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  587. }
  588. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x02 && Rx_Buf[4] == 0x00){
  589. updatePbStatus(Rx_Buf[5]);
  590. Write_Information(ADDR_FLASH_PAGE_104, Rx_Buf, 5); // 写入Flash
  591. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, 0x00, Rx_Buf[5], 0x00, 0x00};
  592. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  593. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  594. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  595. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 7, 7);
  596. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  597. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  598. Rx_Flag = 0;
  599. HAL_UART_AbortReceive(&huart1);
  600. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  601. }
  602. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x0A && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  603. Write_Information(ADDR_FLASH_PAGE_124, Rx_Buf, 0);
  604. uint16_t now_calibrationValue = Adc2_CalibrationValue;
  605. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, (uint8_t)((now_calibrationValue >> 8) & 0xFF), (uint8_t)(now_calibrationValue & 0xFF), 0x00, 0x00};
  606. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  607. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  608. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  609. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 7, 7);
  610. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  611. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  612. Rx_Flag = 0;
  613. HAL_UART_AbortReceive(&huart1);
  614. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  615. }
  616. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x0B && Rx_Buf[4] == 0x00 && Rx_Buf[5] == 0x01){
  617. Write_Information(ADDR_FLASH_PAGE_134, Rx_Buf, 0);
  618. uint16_t now_calibrationValue = Adc3_CalibrationValue;
  619. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, (uint8_t)((now_calibrationValue >> 8) & 0xFF), (uint8_t)(now_calibrationValue & 0xFF), 0x00, 0x00};
  620. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  621. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  622. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  623. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 7, 7);
  624. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  625. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  626. Rx_Flag = 0;
  627. HAL_UART_AbortReceive(&huart1);
  628. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  629. }
  630. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0x0C && Rx_Buf[4] == 0x00){
  631. update_baudrate(Rx_Buf[5]);
  632. Write_Information(ADDR_FLASH_PAGE_114, Rx_Buf, 5); // 写入Flash
  633. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x00, 0x0C, 0x00, Rx_Buf[5], 0x00, 0x00};
  634. uint16_t CRC_value = calculate_crc(data_to_send, 6);
  635. data_to_send[6] = (uint8_t)(CRC_value & 0xFF);
  636. data_to_send[7] = (uint8_t)(CRC_value >> 8);
  637. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 8, 8);
  638. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  639. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  640. Rx_Flag = 0;
  641. HAL_UART_AbortReceive(&huart1);
  642. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  643. }
  644. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xAA && Rx_Buf[4] == 0x00){
  645. Write_Information(ADDR_FLASH_PAGE_94, Rx_Buf, 5); // 写入Flash
  646. uint8_t data_to_send[] = {(uint8_t)initial_address, 0x06, 0x02, 0x00, (uint8_t)initial_address, 0x00, 0x00};
  647. uint16_t CRC_value = calculate_crc(data_to_send, 5);
  648. data_to_send[5] = (uint8_t)(CRC_value & 0xFF);
  649. data_to_send[6] = (uint8_t)(CRC_value >> 8);
  650. HAL_StatusTypeDef status = HAL_UART_Transmit(&huart1, data_to_send, 7, 7);
  651. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  652. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  653. Rx_Flag = 0;
  654. HAL_UART_AbortReceive(&huart1);
  655. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  656. }
  657. else if(Rx_Buf[0] == (uint8_t)initial_address && Rx_Buf[1] == 0x06 && Rx_Buf[2] == 0x00 && Rx_Buf[3] == 0xCC && Rx_Buf[4] == 0xA5 && Rx_Buf[5] == 0x5A){
  658. Rx_Flag = 0; // 将标志位重新置为0
  659. memset(Rx_Buf,0,sizeof(Rx_Buf));
  660. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  661. HAL_NVIC_SystemReset();
  662. }
  663. else {
  664. memset(Rx_Buf, 0, sizeof(Rx_Buf));
  665. memset(USART2_RX_BUF, 0, Uart2_BUF_SIZE);
  666. Rx_Flag = 0;
  667. HAL_UART_AbortReceive(&huart1);
  668. HAL_UART_Receive_DMA(&huart1, USART2_RX_BUF, Uart2_BUF_SIZE);
  669. }
  670. }
  671. }
  672. /* USER CODE END 4 */
  673. /**
  674. * @brief This function is executed in case of error occurrence.
  675. * @retval None
  676. */
  677. void Error_Handler(void)
  678. {
  679. /* USER CODE BEGIN Error_Handler_Debug */
  680. /* User can add his own implementation to report the HAL error return state */
  681. __disable_irq();
  682. while (1)
  683. {
  684. }
  685. /* USER CODE END Error_Handler_Debug */
  686. }
  687. #ifdef USE_FULL_ASSERT
  688. /**
  689. * @brief Reports the name of the source file and the source line number
  690. * where the assert_param error has occurred.
  691. * @param file: pointer to the source file name
  692. * @param line: assert_param error line source number
  693. * @retval None
  694. */
  695. void assert_failed(uint8_t *file, uint32_t line)
  696. {
  697. /* USER CODE BEGIN 6 */
  698. /* User can add his own implementation to report the file name and line number,
  699. ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  700. /* USER CODE END 6 */
  701. }
  702. #endif /* USE_FULL_ASSERT */