377 lines
8.8 KiB
C
377 lines
8.8 KiB
C
|
#include "main.h"
|
|||
|
|
|||
|
uint8_t send_start_buf[6] = {0xA5, 0x5A, 0x06, 0x00, 0x10, 0x01};
|
|||
|
uint8_t get_package_buf[14] = {0xA5, 0x5A, 0x0A, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // 2022change
|
|||
|
// uint8_t send_over_buf[9] = {0xA5, 0x5A, 0x09, 0x00, 0x12, 0x00, 0x00, 0x00,0x00};//2022change
|
|||
|
|
|||
|
uint32_t FlashPtr;
|
|||
|
typedef void (*pFunction)(void);
|
|||
|
pFunction Jump_To_Application;
|
|||
|
|
|||
|
uint32_t packagesSize;
|
|||
|
uint8_t rx1_frame_OK;
|
|||
|
uint8_t rx1_buff[rx2_buffsize];
|
|||
|
uint32_t rx1count;
|
|||
|
uint8_t wifi_connect_flg = 0;
|
|||
|
uint32_t time_flg = 0;
|
|||
|
uint8_t version[4] = {0}; // 2022change
|
|||
|
uint32_t current_package; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
uint8_t upgrade_hand_flg = 0;
|
|||
|
uint32_t lastFrameCnt = 0; //<2F><><EFBFBD><EFBFBD>һ֡<D2BB>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
uint8_t flash_array[BinPerFrameSize];
|
|||
|
|
|||
|
uint32_t OPENBL_CRC32_MPEG_2(uint8_t *data, uint32_t length)
|
|||
|
{
|
|||
|
uint32_t i;
|
|||
|
uint32_t crc = 0xffffffff, j = 0;
|
|||
|
|
|||
|
while ((length--) != 0)
|
|||
|
{
|
|||
|
crc ^= (uint32_t)data[j] << 24;
|
|||
|
j++;
|
|||
|
for (i = 0; i < 8; ++i)
|
|||
|
{
|
|||
|
if ((crc & 0x80000000) != 0)
|
|||
|
{
|
|||
|
crc = (crc << 1) ^ 0x04C11DB7;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
crc <<= 1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return crc;
|
|||
|
}
|
|||
|
|
|||
|
void CRC_usart1send(uint8_t *data, uint32_t length)
|
|||
|
{
|
|||
|
uint32_t crc_temp, i;
|
|||
|
uint8_t crc[4];
|
|||
|
|
|||
|
crc_temp = OPENBL_CRC32_MPEG_2(data, length);
|
|||
|
crc[0] = (uint8_t)crc_temp;
|
|||
|
crc[1] = (uint8_t)(crc_temp >> 8);
|
|||
|
crc[2] = (uint8_t)(crc_temp >> 16);
|
|||
|
crc[3] = (uint8_t)(crc_temp >> 24);
|
|||
|
|
|||
|
for (i = 0; i < length; i++)
|
|||
|
{
|
|||
|
UART_SendByte(USART1, (uint8_t)data[i]);
|
|||
|
}
|
|||
|
for (i = 0; i < 4; i++)
|
|||
|
{
|
|||
|
UART_SendByte(USART1, (uint8_t)crc[i]);
|
|||
|
}
|
|||
|
while (RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC))
|
|||
|
;
|
|||
|
}
|
|||
|
|
|||
|
uint8_t flashWrite(uint8_t *data, uint_fast8_t length)
|
|||
|
{
|
|||
|
static uint8_t buffer;
|
|||
|
uint16_t temp, i;
|
|||
|
uint_fast8_t index;
|
|||
|
uint32_t flashPtr1;
|
|||
|
|
|||
|
if (length == 0)
|
|||
|
return 0;
|
|||
|
flashPtr1 = FlashPtr;
|
|||
|
FLASH_Unlock();
|
|||
|
|
|||
|
index = 0;
|
|||
|
|
|||
|
do
|
|||
|
{
|
|||
|
if (flashPtr1 & 1)
|
|||
|
{
|
|||
|
flashPtr1--;
|
|||
|
temp = buffer;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
temp = data[index++];
|
|||
|
};
|
|||
|
|
|||
|
temp |= data[index++] << 8;
|
|||
|
|
|||
|
FLASH_ProgramHalfWord(flashPtr1, temp);
|
|||
|
flashPtr1 += sizeof(uint16_t);
|
|||
|
|
|||
|
} while ((length - index) >= 2);
|
|||
|
|
|||
|
for (i = 0; i < length; i++) //<2F><><EFBFBD><EFBFBD>flashУ<68><D0A3><EFBFBD>Ƿ<EFBFBD>д<EFBFBD><D0B4>
|
|||
|
{
|
|||
|
if (data[i] != *(uint8_t *)(FlashPtr + i))
|
|||
|
return 1; //<2F>д<EFBFBD>
|
|||
|
}
|
|||
|
FLASH_Lock();
|
|||
|
FlashPtr += length;
|
|||
|
return 0;
|
|||
|
}
|
|||
|
|
|||
|
void page_flashErase(void) //<2F>β<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
FLASH_Unlock();
|
|||
|
FLASH_EraseSector(FLASH_Sector_8, VoltageRange_3);
|
|||
|
FLASH_EraseSector(FLASH_Sector_9, VoltageRange_3);
|
|||
|
FLASH_Lock();
|
|||
|
}
|
|||
|
|
|||
|
int check_stack_head(unsigned long execAdr)
|
|||
|
{
|
|||
|
// MBL_APP_EXEC_ADRΪ<52>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD>Ϊ0x2000xxxx<78><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>
|
|||
|
if (((*(__IO uint32_t *)execAdr) & 0x2FFE0000UL) == 0x20000000UL)
|
|||
|
return 0;
|
|||
|
else
|
|||
|
return -1;
|
|||
|
}
|
|||
|
|
|||
|
void flash_write_version(uint8_t *version) // versionΪ4<CEAA><34><EFBFBD>ֽ<EFBFBD>
|
|||
|
{
|
|||
|
//<2F><>Ҫflash<73>ѽ<EFBFBD><D1BD><EFBFBD>
|
|||
|
uint32_t value;
|
|||
|
value = *(__IO uint32_t *)version;
|
|||
|
FLASH_ProgramWord(FLASH_VERSION_ADDR, value);
|
|||
|
}
|
|||
|
|
|||
|
void execute_app()
|
|||
|
{
|
|||
|
uint32_t JumpAddress = 0;
|
|||
|
uint32_t Jumpadd = FLASH_OLDAPP_ADDR;
|
|||
|
USART_DeInit(USART1);
|
|||
|
|
|||
|
if (upgrade_flag == 1) // 1111--<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
Jumpadd = FLASH_APP_ADDR;
|
|||
|
}
|
|||
|
|
|||
|
JumpAddress = *(__IO uint32_t *)(Jumpadd + 4); //<2F>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD>ִ洢Ϊ<E6B4A2>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>ָ<EFBFBD>룩
|
|||
|
printf("Jumpadd is %x,JumpAddress is %x,upgrade_flag is %d\r\n", Jumpadd, JumpAddress, upgrade_flag);
|
|||
|
Jump_To_Application = (pFunction)JumpAddress;
|
|||
|
__set_MSP(*(__IO uint32_t *)Jumpadd); //<2F><>ʼ<EFBFBD><CABC>APP<50><50>ջָ<D5BB><D6B8>(<28>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ)
|
|||
|
Jump_To_Application(); // <20><><EFBFBD><EFBFBD>PCָ<43><D6B8>Ϊ<EFBFBD>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>жϺ<D0B6><CFBA><EFBFBD><EFBFBD>ĵ<EFBFBD>ַ
|
|||
|
}
|
|||
|
|
|||
|
void upgrade_menu(void)
|
|||
|
{
|
|||
|
uint8_t error;
|
|||
|
switch (upgrade_hand_flg)
|
|||
|
{
|
|||
|
case 0x01: //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD>
|
|||
|
upgrade_hand_flg = 0x00; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>־λ<D6BE><CEBB>0
|
|||
|
|
|||
|
get_package_buf[6] = (uint8_t)current_package;
|
|||
|
get_package_buf[7] = (uint8_t)(current_package >> 8); // 2022change
|
|||
|
get_package_buf[8] = (uint8_t)(current_package >> 16);
|
|||
|
get_package_buf[9] = (uint8_t)(current_package >> 24);
|
|||
|
// time_flg = resent_time;//<2F><><EFBFBD>¼<EFBFBD>ʱ
|
|||
|
CRC_usart1send(get_package_buf, 9); // 2022change
|
|||
|
|
|||
|
break;
|
|||
|
case 0x02: //д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD>
|
|||
|
error = flashWrite(flash_array, BinPerFrameSize); //д<><D0B4>flash,<2C>̶<EFBFBD>һ<EFBFBD><D2BB>д256<35><36><EFBFBD>ֽ<EFBFBD>
|
|||
|
if (1 == error) //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
page_flashErase();
|
|||
|
NVIC_SystemReset();
|
|||
|
}
|
|||
|
|
|||
|
if (0 == lastFrameCnt)
|
|||
|
{
|
|||
|
current_package += BinPerFrameSize;
|
|||
|
upgrade_hand_flg = 0x01; //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>־λ<D6BE><CEBB>0
|
|||
|
get_package_buf[5] = 0x01; //<2F>ظ<EFBFBD>OK
|
|||
|
}
|
|||
|
else //<2F><><EFBFBD><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
current_package += lastFrameCnt;
|
|||
|
upgrade_hand_flg = 0x44; // flash<73><68><EFBFBD>ɱ<EFBFBD>־λ
|
|||
|
get_package_buf[5] = 0x03; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
break;
|
|||
|
case 0x44: // Execute The New Program Enter 'D'
|
|||
|
// MBL_APP_EXEC_ADRΪ<52>³<EFBFBD><C2B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD><C7B7>Ϸ<EFBFBD><CFB7><EFBFBD><EFBFBD><EFBFBD>ջ<EFBFBD><D5BB><EFBFBD><EFBFBD>ַ<EFBFBD>Ƿ<EFBFBD>Ϊ0x2000xxxx<78><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SRAM<41><4D>
|
|||
|
if (check_stack_head(FLASH_APP_ADDR) == 0)
|
|||
|
{
|
|||
|
FLASH_Unlock();
|
|||
|
FLASH_EraseSector(FLASH_Sector_2, VoltageRange_3);
|
|||
|
FLASH_ProgramWord(FLASH_DATA_FLAG_ADDR, FLASH_START_FLAG); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// flash_write_version(version);
|
|||
|
FLASH_Lock();
|
|||
|
// send_over_buf[5] = version[0];
|
|||
|
// send_over_buf[6] = version[1];
|
|||
|
// send_over_buf[7] = version[2];
|
|||
|
// send_over_buf[8] = version[3];//2022change
|
|||
|
|
|||
|
get_package_buf[6] = (uint8_t)current_package;
|
|||
|
get_package_buf[7] = (uint8_t)(current_package >> 8);
|
|||
|
get_package_buf[8] = (uint8_t)(current_package >> 16);
|
|||
|
get_package_buf[9] = (uint8_t)(current_package >> 24);
|
|||
|
CRC_usart1send(get_package_buf, 9); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
delay_ms(2);
|
|||
|
upgrade_flag = 1;
|
|||
|
execute_app(); /*ִ<><D6B4><EFBFBD>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>*/
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
case 0x1E: // wifi<66><69><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD>
|
|||
|
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
void boot_ReceiveHdl()
|
|||
|
{
|
|||
|
uint32_t crcCal, i;
|
|||
|
|
|||
|
uint8_t crcGet[4];
|
|||
|
uint32_t packageNO;
|
|||
|
if (rx1_frame_OK)
|
|||
|
{
|
|||
|
switch (rx1_buff[4])
|
|||
|
{
|
|||
|
|
|||
|
case 0x10: //<2F>ѽ<EFBFBD><D1BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|||
|
get_package_buf[5] = 0x01; //<2F>ظ<EFBFBD>OK
|
|||
|
CRC_usart1send(send_start_buf, 6);
|
|||
|
break;
|
|||
|
case 0x11: //<2F><>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
|
|||
|
//<2F><>ȡ<EFBFBD>汾<EFBFBD><E6B1BE>
|
|||
|
version[0] = rx1_buff[5];
|
|||
|
version[1] = rx1_buff[6];
|
|||
|
version[2] = rx1_buff[7];
|
|||
|
version[3] = rx1_buff[8]; // 2022change
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡<EFBFBD>İ汾<C4B0><E6B1BE>
|
|||
|
// get_package_buf[5] = version[0];
|
|||
|
// get_package_buf[6] = version[1];
|
|||
|
// get_package_buf[7] = version[2];
|
|||
|
// get_package_buf[8] = version[3];//2022change
|
|||
|
//<2F><>ȡbin<69>ֽ<EFBFBD><D6BD><EFBFBD>
|
|||
|
packagesSize = (uint32_t)(rx1_buff[12]) << 24 | (uint32_t)(rx1_buff[11]) << 16 | (uint32_t)(rx1_buff[10]) << 8 | rx1_buff[9];
|
|||
|
page_flashErase(); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫռ<D2AA>õ<EFBFBD>flash<73>ռ<EFBFBD>
|
|||
|
FlashPtr = FLASH_APP_ADDR; //<2F><><EFBFBD>µ<EFBFBD>ַ<EFBFBD><D6B7>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
|
|||
|
current_package = 0; //<2F><>ǰ<EFBFBD><C7B0><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>0<EFBFBD><30>ʼ
|
|||
|
lastFrameCnt = 0;
|
|||
|
upgrade_hand_flg = 0x01; //<2F><>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>־λ
|
|||
|
wifi_connect_flg = 1; //ͨѶ<CDA8><D1B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
break;
|
|||
|
case 0x12: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
//<2F><>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
packageNO = (uint32_t)(rx1_buff[8]) << 24 | (uint32_t)(rx1_buff[7]) << 16 | (uint32_t)(rx1_buff[6]) << 8 | rx1_buff[5];
|
|||
|
//<2F><>ȡCRC
|
|||
|
crcGet[0] = rx1_buff[rx1count - 4];
|
|||
|
crcGet[1] = rx1_buff[rx1count - 3];
|
|||
|
crcGet[2] = rx1_buff[rx1count - 2];
|
|||
|
crcGet[3] = rx1_buff[rx1count - 1];
|
|||
|
|
|||
|
crcCal = OPENBL_CRC32_MPEG_2(rx1_buff, rx1count - 4);
|
|||
|
if ((*(__IO uint32_t *)crcGet == crcCal) && (packageNO == current_package)) // CRCУ<43><D0A3><EFBFBD>ϸ<CFB8><F1A1A2B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȷ
|
|||
|
{
|
|||
|
for (i = 0; i < BinPerFrameSize; i++)
|
|||
|
{
|
|||
|
flash_array[i] = rx1_buff[9 + i];
|
|||
|
}
|
|||
|
|
|||
|
upgrade_hand_flg = 0x02; //<2F><>ʼд<CABC><D0B4>flash
|
|||
|
if ((rx1count - 13 + current_package) >= packagesSize) //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һ֡<D2BB><D6A1><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
|
|||
|
{
|
|||
|
lastFrameCnt = rx1count - 13;
|
|||
|
if (lastFrameCnt < BinPerFrameSize)
|
|||
|
{
|
|||
|
memset(&flash_array[lastFrameCnt], 0xff, BinPerFrameSize - lastFrameCnt);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
upgrade_hand_flg = 0x01; //<2F><>ʼ<EFBFBD><CABC>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>־λ--<2D><><EFBFBD>¿<EFBFBD>ʼ<EFBFBD><CABC>ȡ
|
|||
|
get_package_buf[5] = 0x02; //<2F>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD>»<EFBFBD>ȡ
|
|||
|
}
|
|||
|
LED_B = 0;
|
|||
|
delay_ms(10);
|
|||
|
LED_B = 1;
|
|||
|
break;
|
|||
|
case 0xff: //
|
|||
|
NVIC_SystemReset();
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
rx1count = 0;
|
|||
|
rx1_frame_OK = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void USART1_IRQHandler(void) //<2F><><EFBFBD><EFBFBD>1<EFBFBD>жϷ<D0B6><CFB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>--WIFI
|
|||
|
{
|
|||
|
static uint8_t rece_step = 0;
|
|||
|
static uint16_t templen = 0;
|
|||
|
uint8_t receive;
|
|||
|
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>(<28><><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>0x0d 0x0a<30><61>β)
|
|||
|
{
|
|||
|
receive = USART_ReceiveData(USART1); //(USART1->DR); //<2F><>ȡ<EFBFBD><C8A1><EFBFBD>յ<EFBFBD><D5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
rx1_buff[rx1count++] = receive;
|
|||
|
if (rx1_frame_OK == 1) //û<><C3BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ٷ<EFBFBD><D9B7>Ͷ<EFBFBD><CDB6><EFBFBD>
|
|||
|
{
|
|||
|
USART_ReceiveData(USART1);
|
|||
|
return;
|
|||
|
}
|
|||
|
switch (rece_step)
|
|||
|
{
|
|||
|
case 0:
|
|||
|
if (receive == 0xa5)
|
|||
|
{
|
|||
|
rece_step = 1;
|
|||
|
rx1count = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
rx1count = 0;
|
|||
|
break;
|
|||
|
case 1:
|
|||
|
if (receive == 0x5a)
|
|||
|
{
|
|||
|
|
|||
|
rx1_buff[0] = 0xa5;
|
|||
|
rx1_buff[1] = 0x5a;
|
|||
|
rx1count = 2;
|
|||
|
rece_step = 2;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if (receive == 0xA5)
|
|||
|
{
|
|||
|
rece_step = 1;
|
|||
|
rx1count = 1;
|
|||
|
}
|
|||
|
else
|
|||
|
rece_step = 0;
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case 2:
|
|||
|
if (rx1count >= 4)
|
|||
|
{
|
|||
|
templen = (uint16_t)(rx1_buff[3]) << 8 | rx1_buff[2];
|
|||
|
|
|||
|
rece_step = 3;
|
|||
|
}
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
if ((templen >= rx2_buffsize) || rx1count >= rx2_buffsize)
|
|||
|
{
|
|||
|
rece_step = 0;
|
|||
|
rx1count = 0;
|
|||
|
}
|
|||
|
else if (rx1count >= (4 + templen))
|
|||
|
{
|
|||
|
rx1_frame_OK = 1;
|
|||
|
rece_step = 0;
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|