STM32 ID (转)
STM32唯一ID(Unique Device ID)的读取方法 (转)
每一个STM32微控制器都自带一个96位的唯一ID,也就是Unique Device ID或称为UID,这个唯一ID在任何情况下都是唯一的且不允许修改。
在开发过程中,可能需要用到这个UID,比如博主最近在研究的UAVCAN中就用到了UID。那么,这96位ID怎么读取呢?可以以字节(8位)为单位读取,也可以以半字(16位)或者全字(32位)读取。这里需要注意的是UID的首地址问题,因为不同型号的STM32芯片的首地址可能不同。在网上搜索后发现,STM32F103系列MCU的UID首地址是0x1ffff7e8,而STM32F207/STM32F40X系列MCU的UID首地址是0x1fff7a10。由于博主用的芯片型号是STM32F407,这里就贴出实测通过的STM32F407的UID读取代码,是以字节为单位读取的。STM32F103系列只需要把首地址修改为0x1ffff7e8即可。
更新:又查了下其他系列的芯片的UID首地址,F3系列的UID是0x1ffff7ac,F7系列的UID是0x1ff0f420

#define STM32_UNIQUE_ID_SIZE 12
u8 stm32_uniqueId[STM32_UNIQUE_ID_SIZE] = {0};
u8* readStm32UniqueID(void)
{
vu8* addr = (vu8*)(0x1fff7a10); //UID首地址
for(u8 i = 0; i < STM32_UNIQUE_ID_SIZE; ++i)
{
u8 id= *addr;
stm32_uniqueId[i] = id;
++addr;
}
return stm32_uniqueId;
}

STM32 ID (转)的更多相关文章
- STM32全球唯一ID读取方法
产品唯一的身份标识非常适合:● 用来作为序列号(例如USB字符序列号或者其他的终端应用)● 用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性.● 用来激 ...
- STM32之CAN ---CAN ID过滤器分析
1 前言 在CAN协议里,报文的标识符不代表节点的地址,而是跟报文的内容相关的.因此,发送者以广播的形式把报文发送给所有的接收者.节点在接收报文时,根据标识符(CAN ID)的值决定软件是否需要该 ...
- 如何获取STM32 MCU的唯一ID
前段时间由于应用需要对产品授权进行限制,所以研究了一下有关STM32 MCU的唯一ID的资料,并最终利用它实现了我们的目标. 1.基本描述 在STM32的全系列MCU中均有一个96位的唯一设备标识符. ...
- 如何获取STM32 MCU的唯一ID及应用(转)
源: 如何获取STM32 MCU的唯一ID
- STM32的FLASH ID加密
#define FLASH_ID_OFFSET 30000 //任意定义一个数 //把地址直接减去或者加上一个数是不要程序中直接出现这个地址 volatile u32 Flash_ID_addr ...
- STM32唯一的ID
请看如下程序: /*------------------------------------------------------------------------------------------ ...
- Read UNIQUE ID and flash size method for stm32
/* 读取stm32的unique id 与 flash size */ /* func: unsigned int Read_UniqueID_Byte(unsigned char offset) ...
- 获取单片机唯一id(stm32获取单片机唯一id)
stm32唯一id: 不同型号的stm32单片机,id不在同一地址上!具体地址可以通过用户手册中的Device electronic signature>Unique device ID reg ...
- STM32唯一身份识别ID(器件电子签名)的读取以及芯片Flash大小读取
每个STM32有一个独立的ID,这个ID可以用来: 产品唯一的身份标识的作用: ● 用来作为序列号(例如USB字符序列号或者其他的终端应用): ● 用来作为密码,在编写闪存时,将此唯一 ...
随机推荐
- Web前端开发工具
WebStorm: dreamweaver; Hbuilder: sublime text: 前端神器brackets.
- 2019强网杯部分misc&web
0x01 前言 前两天菜鸡+x和几个大哥算是正式参加了一次ctf的线上赛,也是第一次参加这种比赛(前一段时间巨佬也给了我们一个西班牙的比赛,不过不算是正式参赛,做题的时候,比赛已经结束了),没想到出师 ...
- CF1227C Messy
思路: 构造题.首先把字符串变成“(((((...)))))”的样子,再根据k的取值变成“()()()...((...))”的样子即可. 实现: #include <bits/stdc++.h& ...
- 洛谷 题解 UVA1151 【买还是建 Buy or Build】
[题意] 平面上有\(n(n<=1000)\)个点,你的任务是让所有n个点联通.为此,你可以新建一些边,费用等于两个端点的欧几里得距离平方.另外还有\(q(q<=8)\)个套餐可以购买,如 ...
- 开源定时任务框架Quartz(一)
简介 Quartz是OpenSymphony开源组织的一个开源项目,定时任务框架,纯Java语言实现,最新版本为2.3.0. 设计模式 Quartz中使用的设计模式如下: 1.Builder模式 2. ...
- windows和linux环境下使用google的glog日志库
一.概述 glog是google推出的一款轻量级c++开源日志框架,源码在github上,目前最新release版本是v0.3.5. githut地址:https://github.com/googl ...
- Task执行多次
项目中,曾经出现过启动时数据库连接数瞬间增大,当时并没有注意该问题. 后期,由于Task任务多次执行,才着手查看这个问题,经排查,由于tomcat中webapp配置多次,导致webapp被扫描多次(配 ...
- 怎样理解数组的空元素empty与undefined的区别
数组的空元素empty表示空位, 它不是一种数据类型, 而是由于人为修改arr.length 或者写入时多写了逗号造成的. var arr = [1,2,3,4,,,5]; arr.length; a ...
- Java锁的升级策略 偏向锁 轻量级锁 重量级锁
这三种锁是指锁的状态,并且是专门针对Synchronized关键字.JDK 1.6 为了减少"重量级锁"的性能消耗,引入了"偏向锁"和"轻量级锁&qu ...
- (十六)SpringBoot之使用 Caching- - EhCache
一.案例 1.1 引入maven依赖 <!-- caching --> <dependency> <groupId>org.springframework.boot ...