• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

怎么读取STM32的唯一ID号

南巷白龙 2019-05-06 浏览量:2216
怎么读取STM32的唯一ID号
0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 在STM32的全系列MCU中均有一个96位的唯一设备标识符,STM32各个系列的ID地址如下:
    ID.png

    唯一ID是一个96位的信息串,所以按字读取就是3个字,按半字读取就是6个,按字节读取就是12个。本质上没有区别,在这里我们按字读取。

    fun.png

    • 发布于 2019-05-06
    • 举报
    • 评论 0
    • 5
    • 0

其他答案 数量:9
  • 以STM32f103为例:

    STM32的UID是保存在0x1FFFF7E8 0x1FFFF7EC 0x1FFFF7F0 这三个寄存器中,这个三个寄存器只能读,不能写

    11.jpg

    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 1
    • 0

  • 在不同的库中方法不同,如果是采样HAL库,则十分简单


    /@@**
      * @brief Return the unique device identifier (UID based on 96 bits)
      * @param UID: pointer to 3 words array.
      * @retval Device identifier
      */

    void HAL_GetUID(uint32_t *UID) {

    UID[0] = (uint32_t)(READ_REG(*((uint32_t *)UID_base)));

    UID[1] = (uint32_t)(READ_REG(*((uint32_t *)(UID_base + 4U))));

    UID[2] = (uint32_t)(READ_REG(*((uint32_t *)(UID_base + 8U))));

    }

    // 其中UID_base是由宏定义 设置的,不同的芯片不同,是定义在 stm32XXXXXX.h文件中的,其中XXXXXX就是具体芯片型号啦,一般项目中都会include的。


    //比如下面就是对于SMT32F103C8T6为例的

    #define UID_base              0x1FFFF7E8U    /@@*!< Unique device ID register base address */

    uint32_t uid[3];

    HAL_GetUID(uid);

    就这样就把UID读取到 uid数组中了。


    如果采用标准库,就是去读取寄存器值,还是利用那个地址

    uint32_t *id = (uint32_t *)0x1FFFF7E8; // 这个地址查手册获取这里也是SMT32F103C8T6为例

    for(int8_t i = 0; i < 3; i++) {

        printf("%x \r\n" id[i]);

    }



    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果是f1系列的那么读取flash地址为0x1ffff7e8到0x1ffff7f3的内容就可以了,不同芯片读取地址不同,见手册
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 每一个STM32微控制器都自带一个96位的唯一ID,可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。这里需要注意的是UID的首地址问题,因为不同型号的STM32芯片的首地址可能不同。
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 不同系列的MCU存放的地址有些区别,具体可以查看数据手册。
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32中F0,F1,F4F7中保存唯一ID的地址都不一样。但是数据长度都一样,都是96位的数据信息。

    找到芯片是哪个系列,找到保存ID的起始寄存器地址,然后连续读取3个字信息,这就是唯一的ID。

    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接读ID的地址啊,就是和平常取数据是一样的,但具体取值的地址需要从手册中查询出来。96位信息,可以分成3次读取uint32_t值。
    • 发布于2019-05-06
    • 举报
    • 评论 0
    • 0
    • 0

  • 从手册查查你的芯片 id 寄存器地址,直接用指针指向他读出来
    • 发布于2019-05-07
    • 举报
    • 评论 0
    • 0
    • 0

  • STM32的唯一ID储存在一个指定的位置,此处的数据只能读,不能写,这个ID共96位的,起始地址为

    0x1FFFF7E8U

    后面连续96个字节,然后这里每次需要读32个字节​

    • 发布于2019-05-17
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

怎么读取STM32的唯一ID号