STM32F7xx —— 96位唯一ID

版权声明:原创不易,转载请注明出处:http://blog.csdn.net/wqx521 https://blog.csdn.net/a1314521531/article/details/86615401

                           STM32F7xx —— 96位唯一ID

// 配置单片机型号 对外只有这个宏CONFIG_SYSTEM_HARDWARE_TYPE
#define  CONFIG_SYSTEM_HARDWARE_TYPE  SOC_TYPE_STM32F7

// SOC类型
typedef enum
{
  SOC_TYPE_STM32F0,
  SOC_TYPE_STM32F1,
  SOC_TYPE_STM32F2,
  SOC_TYPE_STM32F3,
  SOC_TYPE_STM32F4,
  SOC_TYPE_STM32F7,
  SOC_TYPE_STM32L0,
  SOC_TYPE_STM32L1,
  SOC_TYPE_STM32L4,
  SOC_TYPE_STM32H7,
} soc_type_t;

#define SOC_STM32F0_ID_ADDR   0x1FFFF7AC
#define SOC_STM32F1_ID_ADDR   0x1FFFF7E8
#define SOC_STM32F2_ID_ADDR   0x1FFF7A10
#define SOC_STM32F3_ID_ADDR   0x1FFFF7AC
#define SOC_STM32F4_ID_ADDR   0x1FFF7A10
#define SOC_STM32F7_ID_ADDR   0x1FF0F420
#define SOC_STM32L0_ID_ADDR   0x1FF80050
#define SOC_STM32L1_ID_ADDR   0x1FF80050
#define SOC_STM32L4_ID_ADDR   0x1FFF7590
#define SOC_STM32H7_ID_ADDR   0x1FF0F420

typedef struct
{
  uint8_t type;
  uint32_t addr;
} soc_id_t;

static const soc_id_t soc_id_entries[] =
{
  {SOC_TYPE_STM32F0, SOC_STM32F0_ID_ADDR},
  {SOC_TYPE_STM32F1, SOC_STM32F1_ID_ADDR},
  {SOC_TYPE_STM32F2, SOC_STM32F2_ID_ADDR},
  {SOC_TYPE_STM32F3, SOC_STM32F3_ID_ADDR},
  {SOC_TYPE_STM32F4, SOC_STM32F4_ID_ADDR},
  {SOC_TYPE_STM32F7, SOC_STM32F7_ID_ADDR},
  {SOC_TYPE_STM32L0, SOC_STM32L0_ID_ADDR},
  {SOC_TYPE_STM32L1, SOC_STM32L1_ID_ADDR},
  {SOC_TYPE_STM32L4, SOC_STM32L4_ID_ADDR},
  {SOC_TYPE_STM32H7, SOC_STM32H7_ID_ADDR},
};

void SocIDGet(uint32_t *id, soc_type_t type)
{
  uint8_t i;

  for(i = 0; i < sizeof(soc_id_entries) / sizeof(soc_id_entries[0]); ++i)
  {
    if(type == soc_id_entries[i].type)
    {
      id[0] = *(uint32_t *)(soc_id_entries[i].addr + 0);
      id[1] = *(uint32_t *)(soc_id_entries[i].addr + 4);
      id[2] = *(uint32_t *)(soc_id_entries[i].addr + 8);
			
      break;
    }
  }
}

猜你喜欢

转载自blog.csdn.net/a1314521531/article/details/86615401