HEX文件和BIN文件转换

IAP升级:

利用hex文件对单片机进行升级,首先需要将hex文件转化成bin文件,本文记录如何将hex文件转化为bin文件(自用,读者若有需要自行查阅)


问题描述

hex文件的组成:

HEX文件和BIN文件转换_第1张图片

 如图hex的第一行数据以“:”开始,02代表0x2,表示携带两个字节的数据,后面的04,代表记录的是程序的起始地址,用法:(0x0802<<16)|0x0000,也就是说我的程序起始地址是0x0802 0000.

hex的第二行数据同样以“:”开始,然后是10,代表0x10,说明本行携带16个字节的数据,后面的4个连续的字符0000代表的是数据存放的偏移地址,根据基地址可以得到本行数据字节的存放起始地址为0x0802 0000。地址字符之后的00,是代表本行是用来记录数据的。

知道了hex文件每行数据各个部分的含义之后,我们开始对hex文件进行处理,首先要知道hex文件是由字符串组成的,每个字符都可在ASCII码表查找到,以312D0208372D02083D2D020800000000为例,代表的数据就是0x31 0x2d 0x02 0x08.............,那么我们需要做的就是将字符数字和字母转换为16进制的数字,例如字符1,对应ASCII码为49,那么就将字符1的ASCII码-0x30,就得到了真正的数字1;

特别需要注意的是,两个字符表示一个字节,靠前的那个字符在高4位。

u8 Asc2Hex(char *str)
{
  u8 buf[2], temp8, i;

  for (i = 0; i < 2; i++)
  {
    if (*str >= 0x30 && *str <= 0x39)
    {
      buf[i] = *str - 0x30;
    }
    else if (*str >= 'A' && *str <= 'F')
    {
      buf[i] = *str - 'A' + 0x0a;
    }

    str++;
  }

  temp8 = ((buf[0] << 4) & 0xf0) + (buf[1] & 0x0f);
  return temp8;
}

你可能感兴趣的:(单片机,嵌入式硬件,c语言,stm32,mcu)