From dcbd0e93b5cc05ea9f1e1152c7951a37e12d177f Mon Sep 17 00:00:00 2001
From: chen <15335560115@163.com>
Date: 星期二, 03 六月 2025 15:23:36 +0800
Subject: [PATCH] V1.13版本修改接收时间和帧间隔和延迟接收时间参数,适配铁鞋稳定一对多测距版本

---
 keil/include/drivers/ymodem.c | 1174 +++++++++++++++++++++++++++++-----------------------------
 1 files changed, 587 insertions(+), 587 deletions(-)

diff --git a/keil/include/drivers/ymodem.c b/keil/include/drivers/ymodem.c
index 8d48742..9e9b9ae 100644
--- a/keil/include/drivers/ymodem.c
+++ b/keil/include/drivers/ymodem.c
@@ -1,6 +1,6 @@
 /**
   ******************************************************************************
-  * @file    STM32F0xx_IAP/src/ymodem.c
+  * @file    STM32F0xx_IAP/src/ymodem.c 
   * @author  MCD Application Team
   * @version V1.0.0
   * @date    29-May-2012
@@ -16,8 +16,8 @@
   *
   *        http://www.st.com/software_license_agreement_liberty_v2
   *
-  * Unless required by applicable law or agreed to in writing, software
-  * distributed under the License is distributed on an "AS IS" BASIS,
+  * Unless required by applicable law or agreed to in writing, software 
+  * distributed under the License is distributed on an "AS IS" BASIS, 
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
@@ -58,85 +58,85 @@
 /* Private functions ---------------------------------------------------------*/
 uint32_t Str2Int(uint8_t *inputstr, int32_t *intnum)
 {
-    uint32_t i = 0, res = 0;
-    uint32_t val = 0;
+  uint32_t i = 0, res = 0;
+  uint32_t val = 0;
 
-    if (inputstr[0] == '0' && (inputstr[1] == 'x' || inputstr[1] == 'X'))
+  if (inputstr[0] == '0' && (inputstr[1] == 'x' || inputstr[1] == 'X'))
+  {
+    if (inputstr[2] == '\0')
     {
-        if (inputstr[2] == '\0')
-        {
-            return 0;
-        }
-        for (i = 2; i < 11; i++)
-        {
-            if (inputstr[i] == '\0')
-            {
-                *intnum = val;
-                /* return 1; */
-                res = 1;
-                break;
-            }
-            if (ISVALIDHEX(inputstr[i]))
-            {
-                val = (val << 4) + CONVERTHEX(inputstr[i]);
-            }
-            else
-            {
-                /* return 0, Invalid input */
-                res = 0;
-                break;
-            }
-        }
-        /* over 8 digit hex --invalid */
-        if (i >= 11)
-        {
-            res = 0;
-        }
+      return 0;
     }
-    else /* max 10-digit decimal input */
+    for (i = 2; i < 11; i++)
     {
-        for (i = 0; i < 11; i++)
-        {
-            if (inputstr[i] == '\0')
-            {
-                *intnum = val;
-                /* return 1 */
-                res = 1;
-                break;
-            }
-            else if ((inputstr[i] == 'k' || inputstr[i] == 'K') && (i > 0))
-            {
-                val = val << 10;
-                *intnum = val;
-                res = 1;
-                break;
-            }
-            else if ((inputstr[i] == 'm' || inputstr[i] == 'M') && (i > 0))
-            {
-                val = val << 20;
-                *intnum = val;
-                res = 1;
-                break;
-            }
-            else if (ISVALIDDEC(inputstr[i]))
-            {
-                val = val * 10 + CONVERTDEC(inputstr[i]);
-            }
-            else
-            {
-                /* return 0, Invalid input */
-                res = 0;
-                break;
-            }
-        }
-        /* Over 10 digit decimal --invalid */
-        if (i >= 11)
-        {
-            res = 0;
-        }
+      if (inputstr[i] == '\0')
+      {
+        *intnum = val;
+        /* return 1; */
+        res = 1;
+        break;
+      }
+      if (ISVALIDHEX(inputstr[i]))
+      {
+        val = (val << 4) + CONVERTHEX(inputstr[i]);
+      }
+      else
+      {
+        /* return 0, Invalid input */
+        res = 0;
+        break;
+      }
     }
+    /* over 8 digit hex --invalid */
+    if (i >= 11)
+    {
+      res = 0;
+    }
+  }
+  else /* max 10-digit decimal input */
+  {
+    for (i = 0;i < 11;i++)
+    {
+      if (inputstr[i] == '\0')
+      {
+        *intnum = val;
+        /* return 1 */
+        res = 1;
+        break;
+      }
+      else if ((inputstr[i] == 'k' || inputstr[i] == 'K') && (i > 0))
+      {
+        val = val << 10;
+        *intnum = val;
+        res = 1;
+        break;
+      }
+      else if ((inputstr[i] == 'm' || inputstr[i] == 'M') && (i > 0))
+      {
+        val = val << 20;
+        *intnum = val;
+        res = 1;
+        break;
+      }
+      else if (ISVALIDDEC(inputstr[i]))
+      {
+        val = val * 10 + CONVERTDEC(inputstr[i]);
+      }
+      else
+      {
+        /* return 0, Invalid input */
+        res = 0;
+        break;
+      }
+    }
+    /* Over 10 digit decimal --invalid */
+    if (i >= 11)
+    {
+      res = 0;
+    }
+  }
 
-    return res;
+  return res;
 }
 /**
   * @brief  Receive byte from sender
@@ -145,18 +145,18 @@
   * @retval 0: Byte received
   *         -1: Timeout
   */
-int32_t Receive_Byte (uint8_t *c, uint32_t timeout)
+ int32_t Receive_Byte (uint8_t *c, uint32_t timeout)
 {
-    while (timeout-- > 0)
+  while (timeout-- > 0)
+  {
+    if (SerialKeyPressed(c) == 1)//如果收到串口数据
     {
-        if (SerialKeyPressed(c) == 1)//如果收到串口数据
-        {
-            //	Serial0_PutString("接受成功");
-            return 0;
-        }
+		//	Serial0_PutString("接受成功");
+      return 0;
     }
-    //	Serial0_PutString("接受失败");
-    return -1;
+  }
+		//	Serial0_PutString("接受失败");
+  return -1;
 }
 
 /**
@@ -164,40 +164,40 @@
   * @param  c: Character
   * @retval 0: Byte sent
   */
-uint32_t Send_Byte (uint8_t c)
+ uint32_t Send_Byte (uint8_t c)
 {
-    SerialPutChar(c);
-    return 0;
+  SerialPutChar(c);
+  return 0;
 }
 
 /**
   * @brief  Update CRC16 for input byte
-  * @param  CRC input value
+  * @param  CRC input value 
   * @param  input byte
   * @retval Updated CRC value
   */
 uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte)
 {
-    uint32_t crc = crcIn;
-    uint32_t in = byte|0x100;
+  uint32_t crc = crcIn;
+  uint32_t in = byte|0x100;
 
-    do
+  do
+  {
+    crc <<= 1;
+    in <<= 1;
+
+    if(in&0x100)
     {
-        crc <<= 1;
-        in <<= 1;
+      ++crc;
+    }
+    
+    if(crc&0x10000)
+    {
+      crc ^= 0x1021;
+    }
+ } while(!(in&0x10000));
 
-        if(in&0x100)
-        {
-            ++crc;
-        }
-
-        if(crc&0x10000)
-        {
-            crc ^= 0x1021;
-        }
-    } while(!(in&0x10000));
-
-    return (crc&0xffffu);
+ return (crc&0xffffu);
 }
 
 /**
@@ -208,17 +208,17 @@
   */
 uint16_t Cal_CRC16(const uint8_t* data, uint32_t size)
 {
-    uint32_t crc = 0;
-    const uint8_t* dataEnd = data+size;
+  uint32_t crc = 0;
+  const uint8_t* dataEnd = data+size;
+  
+  while(data<dataEnd)
+  {
+    crc = UpdateCRC16(crc,*data++);
+  }
+  crc = UpdateCRC16(crc,0);
+  crc = UpdateCRC16(crc,0);
 
-    while(data<dataEnd)
-    {
-        crc = UpdateCRC16(crc,*data++);
-    }
-    crc = UpdateCRC16(crc,0);
-    crc = UpdateCRC16(crc,0);
-
-    return (crc&0xffffu);
+  return (crc&0xffffu);
 }
 
 /**
@@ -229,15 +229,15 @@
   */
 uint8_t CalChecksum(const uint8_t* data, uint32_t size)
 {
-    uint32_t sum = 0;
-    const uint8_t* dataEnd = data+size;
+  uint32_t sum = 0;
+  const uint8_t* dataEnd = data+size;
+ 
+  while(data < dataEnd)
+  {
+    sum += *data++;
+  }
 
-    while(data < dataEnd)
-    {
-        sum += *data++;
-    }
-
-    return (sum&0xffu);
+ return (sum&0xffu);
 }
 
 /**
@@ -256,73 +256,73 @@
 uint8_t c;
 static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout)
 {
-    uint16_t packet_size, computedcrc;
-
-    *length = 0;
-    if (Receive_Byte(&c, timeout) != 0)//返回0成功收取数据,-1为没收到数据
-    {
-        return -1;
-    }
-    switch (c)
-    {
+  uint16_t packet_size, computedcrc;
+  
+  *length = 0;
+  if (Receive_Byte(&c, timeout) != 0)//返回0成功收取数据,-1为没收到数据
+  {
+    return -1;
+  }
+  switch (c)
+  {
     case SOH:
-        packet_size = PACKET_SIZE;
-        break;
+      packet_size = PACKET_SIZE;
+      break;
     case STX:
-        packet_size = PACKET_1K_SIZE;
-        break;
+      packet_size = PACKET_1K_SIZE;
+      break;
     case EOT:
-        return 0;
+      return 0;
     case CA:
-        if ((Receive_Byte(&c, timeout) == 0) && (c == CA))
-        {
-            *length = -1;
-            return 0;
-        }
-        else
-        {
-            return -1;
-        }
+      if ((Receive_Byte(&c, timeout) == 0) && (c == CA))
+      {
+        *length = -1;
+        return 0;
+      }
+      else
+      {
+        return -1;
+      }
     case ABORT1:
     case ABORT2:
-        return 1;
+      return 1;
     default:
-        return -1;
-    }
-    *data = c;//放到1024+5字节的包里面
-    for (i2 = 1; i2 < (packet_size + PACKET_OVERHEAD); i2 ++)
+      return -1;
+  }
+  *data = c;//放到1024+5字节的包里面
+  for (i2 = 1; i2 < (packet_size + PACKET_OVERHEAD); i2 ++)
+  {
+    if (Receive_Byte(data + i2, timeout) != 0)//不断的接收1024字节放入
     {
-        if (Receive_Byte(data + i2, timeout) != 0)//不断的接收1024字节放入
-        {
-            return -1;
-        }
+      return -1;
     }
-    //检测序号补码是是否正确
-    if (data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff))
-    {
+  }
+	//检测序号补码是是否正确
+  if (data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff))
+  {
+		
+    return 1;
+  }
+	if(current_seqno==data[PACKET_SEQNO_INDEX]||c==SOH)
+	{
+		current_seqno++;
+	}else{
+		return 1;
+	}
 
-        return 1;
-    }
-    if(current_seqno==data[PACKET_SEQNO_INDEX]||c==SOH)
-    {
-        current_seqno++;
-    } else {
-        return 1;
-    }
+  /* Compute the CRC */
+  computedcrc = Cal_CRC16(&data[PACKET_HEADER], (uint32_t)packet_size);//计算CRC16码
+  /* Check that received CRC match the already computed CRC value
+     data[packet_size+3]<<8) | data[packet_size+4] contains the received CRC 
+     computedcrc contains the computed CRC value */
+  if (computedcrc != (uint16_t)((data[packet_size+3]<<8) | data[packet_size+4]))//检测CRC16校验码
+  {
+    /* CRC error */
+    return 1;
+  }
 
-    /* Compute the CRC */
-    computedcrc = Cal_CRC16(&data[PACKET_HEADER], (uint32_t)packet_size);//计算CRC16码
-    /* Check that received CRC match the already computed CRC value
-       data[packet_size+3]<<8) | data[packet_size+4] contains the received CRC
-       computedcrc contains the computed CRC value */
-    if (computedcrc != (uint16_t)((data[packet_size+3]<<8) | data[packet_size+4]))//检测CRC16校验码
-    {
-        /* CRC error */
-        return 1;
-    }
-
-    *length = packet_size;
-    return 0;
+  *length = packet_size;
+  return 0;
 }
 
 /**
@@ -332,111 +332,111 @@
   */
 extern volatile unsigned long time32_reset;
 uint8_t packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD], file_size[FILE_SIZE_LENGTH], *file_ptr, *buf_ptr;	//1024 + 5
-uint8_t bufferOut[16]= {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
+uint8_t bufferOut[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
 uint8_t *BufferIn;
 int32_t i, j, packet_length, session_done, file_done, packets_received, errors, session_begin, size = 0;
 uint32_t flashdestination, ramsource,tempaddress;
 int32_t Ymodem_Receive (uint8_t *buf)
-{
+{  
 
-    aesDecInit();//AES解密初始化
-    /* Initialize flashdestination variable */
-    flashdestination = APP_CONFIG_APPLICATION_ADDRESS; //APP代码的起始地址,APP_CONFIG_APPLICATION_ADDRESS = 0x8005000,可在target界面根据情况设置
+	aesDecInit();//AES解密初始化
+  /* Initialize flashdestination variable */
+  flashdestination = APP_CONFIG_APPLICATION_ADDRESS; //APP代码的起始地址,APP_CONFIG_APPLICATION_ADDRESS = 0x8005000,可在target界面根据情况设置
     current_seqno=0;                                       //这些都在ymodem.h里面的宏进行设置
-    flash_seqno=2;
-    for (session_done = 0, errors = 0, session_begin = 0; ;)//死循环直至文件数据包全部发送完成
+  flash_seqno=2;
+  for (session_done = 0, errors = 0, session_begin = 0; ;)//死循环直至文件数据包全部发送完成
+  {
+    for (packets_received = 0, file_done = 0, buf_ptr = buf; ;)
     {
-        for (packets_received = 0, file_done = 0, buf_ptr = buf; ;)
-        {
-
-            switch (Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT))
-            {
-            case 0://成功接收到1K
-                errors = 0;
-                switch (packet_length)
+			
+      switch (Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT))
+      {
+        case 0://成功接收到1K
+          errors = 0;
+          switch (packet_length)
+          {
+            /* Abort by sender */
+            case - 1:  //接收失败
+              Send_Byte(ACK);  //回复
+              return 0;
+            /* End of transmission */
+            case 0:
+              Send_Byte(ACK);//回复
+              file_done = 1;
+              break;
+            /* Normal packet */
+            default:   //接收成功
+              if ((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff))
+              {//序号00(文件名)
+                Send_Byte(NAK);
+								
+              }
+              else
+              {
+                if (packets_received == 0)//文件名(首包)
                 {
-                    /* Abort by sender */
-                case - 1:  //接收失败
-                    Send_Byte(ACK);  //回复
-                    return 0;
-                    /* End of transmission */
-                case 0:
-                    Send_Byte(ACK);//回复
-                    file_done = 1;
-                    break;
-                    /* Normal packet */
-                default:   //接收成功
-                    if ((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff))
-                    {   //序号00(文件名)
-                        Send_Byte(NAK);
-
-                    }
-                    else
+                  /* Filename packet */
+                  if (packet_data[PACKET_HEADER] != 0)//文件名字
+                  {
+                    /* Filename packet has valid data */
+                    for (i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);)
                     {
-                        if (packets_received == 0)//文件名(首包)
-                        {
-                            /* Filename packet */
-                            if (packet_data[PACKET_HEADER] != 0)//文件名字
-                            {
-                                /* Filename packet has valid data */
-                                for (i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);)
-                                {
-                                    FileName[i++] = *file_ptr++;//保存文件名
-                                }
-                                FileName[i++] = '\0';//字符串形式
-                                for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < (FILE_SIZE_LENGTH - 1));)
-                                {
-                                    file_size[i++] = *file_ptr++;//文件大小
-                                }
-                                file_size[i++] = '\0';
-                                Str2Int(file_size, &size);//Convert a string to an integer
+                      FileName[i++] = *file_ptr++;//保存文件名
+                    }
+                    FileName[i++] = '\0';//字符串形式
+                    for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < (FILE_SIZE_LENGTH - 1));)
+                    {
+                      file_size[i++] = *file_ptr++;//文件大小
+                    }
+                    file_size[i++] = '\0';
+                    Str2Int(file_size, &size);//Convert a string to an integer
 
-                                /* Test the size of the image to be sent */
-                                /* Image size is greater than Flash size */
-                                if (size > (APP_CONFIG_APPLICATION_SIZE + 1))
-                                {
-                                    /* End session */
-                                    Send_Byte(CA);
-                                    Send_Byte(CA);
-                                    return -1;
-                                }
-                                /* erase user application area */
+                    /* Test the size of the image to be sent */
+                    /* Image size is greater than Flash size */
+                    if (size > (APP_CONFIG_APPLICATION_SIZE + 1))
+                    {
+                      /* End session */
+                      Send_Byte(CA);
+                      Send_Byte(CA);
+                      return -1;
+                    }
+                    /* erase user application area */
 //                    Flash_Init();
 //                    Flash_Erase(APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);MK8000 修改
-                                flash_erase(FLASH_ID0, APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);//擦除APP
-                                Send_Byte(ACK);
-                                Send_Byte(CRC16);
-                            }
-                            /* Filename packet is empty, end session */
-                            else
-                            {
-                                Send_Byte(ACK);
-                                file_done = 1;
-                                session_done = 1;
-                                break;
-                            }
-                        }
-                        /* Data packet */
-                        else  //文件信息保存完后开始接收数据
-                        {
-                            memcpy(buf_ptr, packet_data + PACKET_HEADER, packet_length);
-
-                            /*----------------------------------------------------------------------------------------------*/
-                            BufferIn=buf;
-                            for (j = 0; j < packet_length; j += 16) //每次解密16字节
-                            {
-                                //解密数据包
-                                aesDecrypt(BufferIn,bufferOut); //由于参数使用的是指针,所以解密后依旧存在buf里面
-                                BufferIn+=16;
-                            }
-                            /*----------------------------------------------------------------------------------------------*/
-
-
-                            /* Write received data in Flash */                                   //这个size参数是自己加进入的,便于判断文件传输完成
+										flash_erase(FLASH_ID0, APP_CONFIG_APPLICATION_ADDRESS, APP_CONFIG_APPLICATION_SIZE);//擦除APP
+                    Send_Byte(ACK);
+                    Send_Byte(CRC16);
+                  }
+                  /* Filename packet is empty, end session */
+                  else
+                  {
+                    Send_Byte(ACK);
+                    file_done = 1;
+                    session_done = 1;
+                    break;
+                  }
+                }
+                /* Data packet */
+                else  //文件信息保存完后开始接收数据
+                {
+                  memcpy(buf_ptr, packet_data + PACKET_HEADER, packet_length);
+									
+									/*----------------------------------------------------------------------------------------------*/
+									BufferIn=buf;
+									for (j = 0; j < packet_length; j += 16) //每次解密16字节
+									{
+										//解密数据包
+										aesDecrypt(BufferIn,bufferOut); //由于参数使用的是指针,所以解密后依旧存在buf里面
+										BufferIn+=16;
+									}
+									/*----------------------------------------------------------------------------------------------*/
+								
+                  
+                  /* Write received data in Flash */                                   //这个size参数是自己加进入的,便于判断文件传输完成 
 //                  if (Flash_Write(flashdestination, buf, packet_length)  == 0&&(flashdestination==tempaddress||tempaddress>size)) MK8000修改
 //                  {
 //                      flashdestination += packet_length;
-//                      //写入FLASH
+//                      //写入FLASH  
 //                    Send_Byte(ACK);
 //					flash_seqno++;
 //                    time32_reset = 0;
@@ -448,60 +448,60 @@
 //                    Send_Byte(CA);
 //                    return -2;
 //                  }
-                            ramsource = (uint32_t)buf;
-                            tempaddress=APP_CONFIG_APPLICATION_ADDRESS+(current_seqno-1)*0x400;
-                            if(flash_write_nbytes(FLASH_ID0,flashdestination, buf, packet_length)== 0&&(flashdestination==tempaddress||tempaddress>size))
-                            {
-                                flashdestination += packet_length;
-                                //写入FLASH
-                                Send_Byte(ACK);
-                                flash_seqno++;
-                                time32_reset = 0;
-                            }
-                            else
-                            {
-                                /* End session */
-                                Send_Byte(CA);
-                                Send_Byte(CA);
-                                return -2;
-                            }
-                        }
-                        packets_received ++;
-                        session_begin = 1;
-                    }
-                }
-                break;
-            case 1:
-                Send_Byte(CA);
-                Send_Byte(CA);
-                return -3;
-            default://检验错误
-                if (session_begin > 0)
-                {
-                    errors ++;
-                }
-                if (errors > MAX_ERRORS)
-                {
+									ramsource = (uint32_t)buf;
+                  tempaddress=APP_CONFIG_APPLICATION_ADDRESS+(current_seqno-1)*0x400;
+									if(flash_write_nbytes(FLASH_ID0,flashdestination, buf, packet_length)== 0&&(flashdestination==tempaddress||tempaddress>size))
+									{
+									flashdestination += packet_length;
+                      //写入FLASH  
+                    Send_Byte(ACK);
+										flash_seqno++;
+                    time32_reset = 0;
+									}
+									else
+									{
+									 /* End session */
                     Send_Byte(CA);
                     Send_Byte(CA);
-                    return 0;
+                    return -2;
+									}
                 }
-
-                Send_Byte(CRC16); //发送校验值
-                break;
-            }
-
-            if (file_done != 0)
-            {
-                break;
-            }
-        }
-        if (session_done != 0) //文件发送完成
-        {
-            break;
-        }
+                packets_received ++;
+                session_begin = 1;
+              }
+          }
+          break;
+        case 1:
+          Send_Byte(CA);
+          Send_Byte(CA);
+          return -3;
+        default://检验错误
+          if (session_begin > 0)
+          {
+            errors ++;
+          }
+          if (errors > MAX_ERRORS)
+          {
+            Send_Byte(CA);
+            Send_Byte(CA);
+            return 0;
+          }
+				
+          Send_Byte(CRC16); //发送校验值
+          break;
+      }
+			
+      if (file_done != 0)
+      {
+        break;
+      }
     }
-    return (int32_t)size;
+    if (session_done != 0) //文件发送完成
+    {
+      break;
+    }
+  }
+  return (int32_t)size;
 }
 
 /**
@@ -511,7 +511,7 @@
   */
 int32_t Ymodem_CheckResponse(uint8_t c)
 {
-    return 0;
+  return 0;
 }
 
 /**
@@ -521,32 +521,32 @@
   */
 void Ymodem_PrepareIntialPacket(uint8_t *data, const uint8_t* fileName, uint32_t *length)
 {
-    uint16_t i, j;
-    uint8_t file_ptr[10];
+  uint16_t i, j;
+  uint8_t file_ptr[10];
+  
+  /* Make first three packet */
+  data[0] = SOH;
+  data[1] = 0x00;
+  data[2] = 0xff;
+  
+  /* Filename packet has valid data */
+  for (i = 0; (fileName[i] != '\0') && (i < FILE_NAME_LENGTH);i++)
+  {
+     data[i + PACKET_HEADER] = fileName[i];
+  }
 
-    /* Make first three packet */
-    data[0] = SOH;
-    data[1] = 0x00;
-    data[2] = 0xff;
-
-    /* Filename packet has valid data */
-    for (i = 0; (fileName[i] != '\0') && (i < FILE_NAME_LENGTH); i++)
-    {
-        data[i + PACKET_HEADER] = fileName[i];
-    }
-
-    data[i + PACKET_HEADER] = 0x00;
-
-    Int2Str (file_ptr, *length);
-    for (j =0, i = i + PACKET_HEADER + 1; file_ptr[j] != '\0' ; )
-    {
-        data[i++] = file_ptr[j++];
-    }
-
-    for (j = i; j < PACKET_SIZE + PACKET_HEADER; j++)
-    {
-        data[j] = 0;
-    }
+  data[i + PACKET_HEADER] = 0x00;
+  
+  Int2Str (file_ptr, *length);
+  for (j =0, i = i + PACKET_HEADER + 1; file_ptr[j] != '\0' ; )
+  {
+     data[i++] = file_ptr[j++];
+  }
+  
+  for (j = i; j < PACKET_SIZE + PACKET_HEADER; j++)
+  {
+    data[j] = 0;
+  }
 }
 
 /**
@@ -556,36 +556,36 @@
   */
 void Ymodem_PreparePacket(uint8_t *SourceBuf, uint8_t *data, uint8_t pktNo, uint32_t sizeBlk)
 {
-    uint16_t i, size, packetSize;
-    uint8_t* file_ptr;
-
-    /* Make first three packet */
-    packetSize = sizeBlk >= PACKET_1K_SIZE ? PACKET_1K_SIZE : PACKET_SIZE;
-    size = sizeBlk < packetSize ? sizeBlk :packetSize;
-    if (packetSize == PACKET_1K_SIZE)
+  uint16_t i, size, packetSize;
+  uint8_t* file_ptr;
+  
+  /* Make first three packet */
+  packetSize = sizeBlk >= PACKET_1K_SIZE ? PACKET_1K_SIZE : PACKET_SIZE;
+  size = sizeBlk < packetSize ? sizeBlk :packetSize;
+  if (packetSize == PACKET_1K_SIZE)
+  {
+     data[0] = STX;
+  }
+  else
+  {
+     data[0] = SOH;
+  }
+  data[1] = pktNo;
+  data[2] = (~pktNo);
+  file_ptr = SourceBuf;
+  
+  /* Filename packet has valid data */
+  for (i = PACKET_HEADER; i < size + PACKET_HEADER;i++)
+  {
+     data[i] = *file_ptr++;
+  }
+  if ( size  <= packetSize)
+  {
+    for (i = size + PACKET_HEADER; i < packetSize + PACKET_HEADER; i++)
     {
-        data[0] = STX;
+      data[i] = 0x1A; /* EOF (0x1A) or 0x00 */
     }
-    else
-    {
-        data[0] = SOH;
-    }
-    data[1] = pktNo;
-    data[2] = (~pktNo);
-    file_ptr = SourceBuf;
-
-    /* Filename packet has valid data */
-    for (i = PACKET_HEADER; i < size + PACKET_HEADER; i++)
-    {
-        data[i] = *file_ptr++;
-    }
-    if ( size  <= packetSize)
-    {
-        for (i = size + PACKET_HEADER; i < packetSize + PACKET_HEADER; i++)
-        {
-            data[i] = 0x1A; /* EOF (0x1A) or 0x00 */
-        }
-    }
+  }
 }
 
 /**
@@ -596,13 +596,13 @@
   */
 void Ymodem_SendPacket(uint8_t *data, uint16_t length)
 {
-    uint16_t i;
-    i = 0;
-    while (i < length)
-    {
-        Send_Byte(data[i]);
-        i++;
-    }
+  uint16_t i;
+  i = 0;
+  while (i < length)
+  {
+    Send_Byte(data[i]);
+    i++;
+  }
 }
 
 /**
@@ -626,234 +626,234 @@
 };
 uint8_t Ymodem_Transmit (uint8_t *buf, const uint8_t* sendFileName, uint32_t sizeFile)
 {
-    uint8_t packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD];
-    uint8_t FileName[FILE_NAME_LENGTH];
-    uint8_t *buf_ptr, tempCheckSum ;
-    uint16_t tempCRC, blkNumber;
-    uint8_t receivedC[2], CRC16_F = 0, i;
-    uint32_t errors = 0, ackReceived = 0, size = 0, pktSize;
+  uint8_t packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD];
+  uint8_t FileName[FILE_NAME_LENGTH];
+  uint8_t *buf_ptr, tempCheckSum ;
+  uint16_t tempCRC, blkNumber;
+  uint8_t receivedC[2], CRC16_F = 0, i;
+  uint32_t errors = 0, ackReceived = 0, size = 0, pktSize;
 
-    for (i = 0; i < (FILE_NAME_LENGTH - 1); i++)
+  for (i = 0; i < (FILE_NAME_LENGTH - 1); i++)
+  {
+    FileName[i] = sendFileName[i];
+  }
+  CRC16_F = 1;
+  
+  /* Prepare first block */
+  Ymodem_PrepareIntialPacket(&packet_data[0], FileName, &sizeFile);
+  
+  do 
+  {
+    /* Send Packet */
+    Ymodem_SendPacket(packet_data, PACKET_SIZE + PACKET_HEADER);
+    
+    /* Send CRC or Check Sum based on CRC16_F */
+    if (CRC16_F)
     {
-        FileName[i] = sendFileName[i];
+       tempCRC = Cal_CRC16(&packet_data[3], PACKET_SIZE);
+       Send_Byte(tempCRC >> 8);
+       Send_Byte(tempCRC & 0xFF);
     }
-    CRC16_F = 1;
-
-    /* Prepare first block */
-    Ymodem_PrepareIntialPacket(&packet_data[0], FileName, &sizeFile);
-
-    do
+    else
     {
-        /* Send Packet */
-        Ymodem_SendPacket(packet_data, PACKET_SIZE + PACKET_HEADER);
-
-        /* Send CRC or Check Sum based on CRC16_F */
-        if (CRC16_F)
-        {
-            tempCRC = Cal_CRC16(&packet_data[3], PACKET_SIZE);
-            Send_Byte(tempCRC >> 8);
-            Send_Byte(tempCRC & 0xFF);
-        }
-        else
-        {
-            tempCheckSum = CalChecksum (&packet_data[3], PACKET_SIZE);
-            Send_Byte(tempCheckSum);
-        }
-
-        /* Wait for Ack and 'C' */
-        if (Receive_Byte(&receivedC[0], 1000000) == 0)
-        {
-            if (receivedC[0] == ACK)
-            {
-                /* Packet transfered correctly */
-                ackReceived = 1;
-            }
-        }
-        else
-        {
-            errors++;
-        }
-    } while (!ackReceived && (errors < 0x0A));//校验错误重发
-
-    if (errors >=  0x0A)
-    {
-        return errors;
+       tempCheckSum = CalChecksum (&packet_data[3], PACKET_SIZE);
+       Send_Byte(tempCheckSum);
     }
-    buf_ptr = buf;
-    size = sizeFile;
-    blkNumber = 0x01;
-
-    /* Here 1024 bytes package is used to send the packets */
-    while (size)
+  
+    /* Wait for Ack and 'C' */
+    if (Receive_Byte(&receivedC[0], 1000000) == 0)  
     {
-        /* Prepare next packet */
-        Ymodem_PreparePacket(buf_ptr, &packet_data[0], blkNumber, size);
-        ackReceived = 0;
-        receivedC[0]= 0;
-        errors = 0;
-        do
-        {
-            /* Send next packet */
-            if (size >= PACKET_1K_SIZE)
-            {
-                pktSize = PACKET_1K_SIZE;
-
-            }
-            else
-            {
-                pktSize = PACKET_SIZE;
-            }
-            Ymodem_SendPacket(packet_data, pktSize + PACKET_HEADER);
-            /* Send CRC or Check Sum based on CRC16_F */
-            if (CRC16_F)
-            {
-                tempCRC = Cal_CRC16(&packet_data[3], pktSize);
-                Send_Byte(tempCRC >> 8);
-                Send_Byte(tempCRC & 0xFF);
-            }
-            else
-            {
-                tempCheckSum = CalChecksum (&packet_data[3], pktSize);
-                Send_Byte(tempCheckSum);
-            }
-
-            /* Wait for Ack */
-            if (Receive_Byte(&receivedC[0], 1000000) == 0)
-            {   if (receivedC[0] == ACK)
-                {
-                    ackReceived = 1;
-                    if (size > pktSize)
-                    {
-                        buf_ptr += pktSize;
-                        size -= pktSize;
-                        if (blkNumber == (APP_CONFIG_APPLICATION_SIZE/1024))
-                        {
-                            return 0xFF; /*  error */
-                        }
-                        else
-                        {
-                            blkNumber++;
-                        }
-                    }
-                    else
-                    {
-                        buf_ptr += pktSize;
-                        size = 0;
-                    }
-                }
-            }
-            else
-            {
-                errors++;
-            }
-        } while(!ackReceived && (errors < 0x0A));
-
-        /* Resend packet if NAK  for a count of 10 else end of commuincation */
-        if (errors >=  0x0A)
-        {
-            return errors;
-        }
-
+      if (receivedC[0] == ACK)
+      { 
+        /* Packet transfered correctly */
+        ackReceived = 1;
+      }
     }
+    else
+    {
+        errors++;
+    }
+  }while (!ackReceived && (errors < 0x0A));//校验错误重发
+  
+  if (errors >=  0x0A)
+  {
+    return errors;
+  }
+  buf_ptr = buf;
+  size = sizeFile;
+  blkNumber = 0x01;
+
+  /* Here 1024 bytes package is used to send the packets */
+  while (size)
+  {
+    /* Prepare next packet */
+    Ymodem_PreparePacket(buf_ptr, &packet_data[0], blkNumber, size);
     ackReceived = 0;
-    receivedC[0] = 0x00;
-    receivedC[1] = 0x00;
+    receivedC[0]= 0;
     errors = 0;
     do
     {
-        Send_Byte(EOT);
-        /* Send (EOT); */
-        /* Wait for Ack */
-        //receivedC[0] = (uint16_t)(USART1->DR & (uint16_t)0x01FF); MK8000修改
-        receivedC[0]= (uint16_t)(uart_handle[1].base->RX_DATA&(uint16_t)0x01FF);
-        if (receivedC[0] == ACK)
+      /* Send next packet */
+      if (size >= PACKET_1K_SIZE)
+      {
+        pktSize = PACKET_1K_SIZE;
+       
+      }
+      else
+      {
+        pktSize = PACKET_SIZE;
+      }
+      Ymodem_SendPacket(packet_data, pktSize + PACKET_HEADER);
+      /* Send CRC or Check Sum based on CRC16_F */
+      if (CRC16_F)
+      {
+         tempCRC = Cal_CRC16(&packet_data[3], pktSize);
+         Send_Byte(tempCRC >> 8);
+         Send_Byte(tempCRC & 0xFF);
+      }
+      else
+      {
+        tempCheckSum = CalChecksum (&packet_data[3], pktSize);
+        Send_Byte(tempCheckSum);
+      }
+      
+      /* Wait for Ack */
+      if (Receive_Byte(&receivedC[0], 1000000) == 0)  
+      {    if (receivedC[0] == ACK)
+      {
+        ackReceived = 1;  
+        if (size > pktSize)
         {
-            ackReceived = 1;
-        }
-
-        else
-        {
-            errors++;
-        }
-        /* Clear Overrun flag of the USART2 */
-        //__HAL_UART_CLEAR_OREFLAG(&huart1);  MK8000修改
-        // USART_ClearFlag(USART1, UART_FLAG_ORE);
-    } while (!ackReceived && (errors < 0x0A));
-
-    if (errors >=  0x0A)
-    {
-        return errors;
-    }
-
-    /* Last packet preparation */
-    ackReceived = 0;
-    receivedC[0] = 0x00;
-    receivedC[1] = 0x00;
-    errors = 0;
-
-    packet_data[0] = SOH;
-    packet_data[1] = 0;
-    packet_data [2] = 0xFF;
-
-    for (i = PACKET_HEADER; i < (PACKET_SIZE + PACKET_HEADER); i++)
-    {
-        packet_data [i] = 0x00;
-    }
-
-    do
-    {
-        /* Send Packet */
-        Ymodem_SendPacket(packet_data, PACKET_SIZE + PACKET_HEADER);
-
-        /* Send CRC or Check Sum based on CRC16_F */
-        tempCRC = Cal_CRC16(&packet_data[3], PACKET_SIZE);
-        Send_Byte(tempCRC >> 8);
-        Send_Byte(tempCRC & 0xFF);
-
-        /* Wait for Ack and 'C' */
-        if (Receive_Byte(&receivedC[1], 1000000) == 0)
-        {
-            if (receivedC[1] == ACK)
-            {
-                /* Packet transfered correctly */
-                ackReceived = 1;
-            }
+           buf_ptr += pktSize;  
+           size -= pktSize;
+           if (blkNumber == (APP_CONFIG_APPLICATION_SIZE/1024))
+           {
+             return 0xFF; /*  error */
+           }
+           else
+           {
+              blkNumber++;
+           }
         }
         else
         {
-            errors++;
+           buf_ptr += pktSize;
+           size = 0;
         }
-    } while (!ackReceived && (errors < 0x0A));
-
-    /* Resend packet if NAK  for a count of 10  else end of commuincation */
+      }
+      }
+      else
+      {
+        errors++;
+      }
+    }while(!ackReceived && (errors < 0x0A));
+    
+    /* Resend packet if NAK  for a count of 10 else end of commuincation */
     if (errors >=  0x0A)
     {
-        return errors;
+      return errors;
     }
-    receivedC[0] = 0x00;
-    do
+    
+  }
+  ackReceived = 0;
+  receivedC[0] = 0x00;
+  receivedC[1] = 0x00;
+  errors = 0;
+  do 
+  { 
+    Send_Byte(EOT);   
+    /* Send (EOT); */
+    /* Wait for Ack */
+    //receivedC[0] = (uint16_t)(USART1->DR & (uint16_t)0x01FF); MK8000修改
+		receivedC[0]= (uint16_t)(uart_handle[1].base->RX_DATA&(uint16_t)0x01FF);
+    if (receivedC[0] == ACK)
     {
-        Send_Byte(EOT);
-        /* Send (EOT); */
-        /* Wait for Ack */
-        if ((Receive_Byte(&receivedC[0], 1000000) == 0)  && receivedC[0] == ACK)
-        {
-            ackReceived = 1;
-        }
-
-        else
-        {
-            errors++;
-        }
-        /* Clear Overrun flag of the USART2 */
-        // __HAL_UART_CLEAR_OREFLAG(&huart1); MK8000修改
-    } while (!ackReceived && (errors < 0x0A));
-
-    if (errors >=  0x0A)
+      ackReceived = 1;
+      }
+    
+    else
     {
-        return errors;
+      errors++;
     }
-    return 0; /* file trasmitted successfully */
+    /* Clear Overrun flag of the USART2 */
+		//__HAL_UART_CLEAR_OREFLAG(&huart1);  MK8000修改
+   // USART_ClearFlag(USART1, UART_FLAG_ORE);
+  }while (!ackReceived && (errors < 0x0A));
+    
+  if (errors >=  0x0A)
+  {
+    return errors;
+  }
+  
+  /* Last packet preparation */
+  ackReceived = 0;
+  receivedC[0] = 0x00;
+  receivedC[1] = 0x00;
+  errors = 0;
+
+  packet_data[0] = SOH;
+  packet_data[1] = 0;
+  packet_data [2] = 0xFF;
+
+  for (i = PACKET_HEADER; i < (PACKET_SIZE + PACKET_HEADER); i++)
+  {
+     packet_data [i] = 0x00;
+  }
+  
+  do 
+  {
+    /* Send Packet */
+    Ymodem_SendPacket(packet_data, PACKET_SIZE + PACKET_HEADER);
+
+    /* Send CRC or Check Sum based on CRC16_F */
+    tempCRC = Cal_CRC16(&packet_data[3], PACKET_SIZE);
+    Send_Byte(tempCRC >> 8);
+    Send_Byte(tempCRC & 0xFF);
+  
+    /* Wait for Ack and 'C' */
+    if (Receive_Byte(&receivedC[1], 1000000) == 0)  
+    {
+      if (receivedC[1] == ACK)
+      { 
+        /* Packet transfered correctly */
+        ackReceived = 1;
+      }
+    }
+    else
+    {
+      errors++;
+    }
+  }while (!ackReceived && (errors < 0x0A));
+  
+  /* Resend packet if NAK  for a count of 10  else end of commuincation */
+  if (errors >=  0x0A)
+  {
+    return errors;
+  }  
+  receivedC[0] = 0x00;
+  do 
+  { 
+    Send_Byte(EOT);   
+    /* Send (EOT); */
+    /* Wait for Ack */
+    if ((Receive_Byte(&receivedC[0], 1000000) == 0)  && receivedC[0] == ACK)
+    {
+      ackReceived = 1;  
+    }
+    
+    else
+    {
+      errors++;
+    }
+    /* Clear Overrun flag of the USART2 */
+   // __HAL_UART_CLEAR_OREFLAG(&huart1); MK8000修改
+  }while (!ackReceived && (errors < 0x0A));
+    
+  if (errors >=  0x0A)
+  {
+    return errors;
+  }
+  return 0; /* file trasmitted successfully */
 }
 
 /**

--
Gitblit v1.9.3