STM32HAL内部识别码,全球唯一识别码,UID读取

HAL库好就好在都封装好了,我们只需要调取API都搞定了。

  uint32_t UIDw[3];
  uint32_t HalVersion  = HAL_GetHalVersion();
  uint32_t REVID       = HAL_GetREVID();
  uint32_t DEVID       = HAL_GetDEVID();
  UIDw[0]              = HAL_GetUIDw0();
  UIDw[1]              = HAL_GetUIDw1();
  UIDw[2]              = HAL_GetUIDw2();

在文件stm32l1xx_hal.c可找到需要的函数。

/**
  * @brief Return the HAL revision
  * @retval version: 0xXYZR (8bits for each decimal, R for RC)
  */
uint32_t HAL_GetHalVersion(void)
{
  return __STM32L1xx_HAL_VERSION;
}

以上图为例,__STM32L1xx_HAL_VERSION是宏定义

/**
 * @brief STM32L1xx HAL Driver version number
   */
#define __STM32L1xx_HAL_VERSION_MAIN   (0x01) /*!< [31:24] main version */
#define __STM32L1xx_HAL_VERSION_SUB1   (0x04) /*!< [23:16] sub1 version */
#define __STM32L1xx_HAL_VERSION_SUB2   (0x00) /*!< [15:8]  sub2 version */
#define __STM32L1xx_HAL_VERSION_RC     (0x00) /*!< [7:0]  release candidate */
#define __STM32L1xx_HAL_VERSION         ((__STM32L1xx_HAL_VERSION_MAIN << 24)\
                                        |(__STM32L1xx_HAL_VERSION_SUB1 << 16)\
                                        |(__STM32L1xx_HAL_VERSION_SUB2 << 8 )\
                                        |(__STM32L1xx_HAL_VERSION_RC))

好像这个没什么用,咱们改这个没意义。那我们直接看UID。

/**
  * @brief  Return the first word of the unique device identifier (UID based on 96 bits)
  * @retval Device identifier 31:0 bits
  */
uint32_t HAL_GetUIDw0(void)
{
  return(READ_REG(*((uint32_t *)UID_BASE)));
}

UID_BASE是地址

#define UID_BASE              (0x1FF80050UL)                  /*!< Unique device ID register base address for Cat.1 and Cat.2 devices */

这几个函数实际上就是读地址内的数据。实验完毕。

你可能感兴趣的:(STM32HAL内部识别码,全球唯一识别码,UID读取)