历史上的今天
今天是:2025年01月31日(星期五)
2021年01月31日 | 关于STM32的这几个寄存器,你知道吗?
2021-01-31 来源:eefocus
1Flash容量寄存器
这个问题是之前有人问过,说:我的芯片被抹掉,看不清了,我怎么知道这块芯片容量大小?
解决办法:
1.通过读寄存器
在STM32的“参考手册”中有Flash size data register这么一个寄存器(一般在手册最后),明确写了寄存器的基地址。
提示:不同芯片型号,可能这个寄存器地址不同。比如F103的基地址为:0x1FFFF7E0。

是一个16位的数值,出厂写入,程序只能读取。读取方法很简单,可以如下:
uint16_t Flash_size;
Flash_size = *(uint16_t *)0x1FFFF7E0;
说到这里,可以参看我之前分享的一篇文章《你的STM32芯片FLASH容量真如ST官方选型手册那样吗?》
2.通过STM32 ST-LINK Utility直接读取
通过ST-Link连接芯片,直接读取,可以看到容量信息:
2UID寄存器
之前有人问我,可以通过STM32的UID来加密吗? 这个肯定是可以的。
但又问了我一个问题,我不希望读取全部(96位),可以只读取部分寄存器来作为标识吗?读取的部分会不会重复?
STM32的UID唯一标识符适用于:
用来作为序列号。
用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。
用来激活带安全机制的自举过程。
STM32的UID共有96位(32 x 3)。所有,就有朋友,我是否可以只读取其中某一部分来作为唯一识别?
这个问题,严格来说,不可以。但如果不是特别严格,还是可以。因为这个UID是通过晶元、分批等来进行编号的。如果你买同一批次,你会发现那个编号可能连续。


我之前曾读取过几块生产的板卡(购买得_MCU是同一批次),芯片的UID是连续的,感兴趣的可以试试。
所以,通过读取部分UID来作为标识,只能说不严格的情况是可以的。
3寄存器偏移地址
现在还有许多初学的朋友在学习底层的一些知识,比如前面就有朋友想自己通过寄存器来编程,但是却不知道什么是寄存器基地址,什么是寄存器偏移地址。
1.基地址
每一个片内外设都有一个对应的基地址,而且是由厂商决定我们不能修改。如下图:
在程序中,你会发现和上面对应的代码:
2.偏移地址
偏移地址就是在基地址基础上偏移(一般是以4字节增加),比如TIM定时器的偏移地址:

同样,在程序中对应的代码通过结构体实现偏移:

关于基地址和偏移地址,不管是标准外设库还是HAL库,都是上面所示那种基地址+偏移的方法实现。
还是之前多次在文章中提到的,想要了解寄存器原理,或者通过寄存器来实现的朋友,最好参考“标准外设库”例程。HAL库封装的相对复杂,不适合研究最底层寄存器。
史海拾趣
|
ARM(Advanced RISC Machines)是微处理器行业的一家知名企业,设计了大量高性能、廉价、耗能低的RISC处理器、相关技术及软 件。ARM架构是面向低预算市场设计的第一款RISC微处理器,基本是32位单片机的行业标准,它提供一系列内核、体系扩展、微处 ...… 查看全部问答> |
|
VxWorks中的select问题(谁有使用select来收发Tcp或Udp数据) while(true){ assert(errno==0);//这里取错误号等于0 int ret=select(nfds+1,&readFs,NULL,NULL,&timeOut); if( ret>0 ){ assert(errno==0x3d0002);//这里必然 ...… 查看全部问答> |
|
最超值的NRF905-CC11000-红外线综合开发板JASK2000 最超值的NRF905-CC11000-红外线综合开发板JASK2000 JASK2000开发系统 集成当前433频段最主流无线收IC :NRF905 ,CC1100及红外收发器,相信掌握这3款无线收发器原理及应用对大家在无线应用开发领域奠定扎实基础.我公司提供全面技术支 ...… 查看全部问答> |
|
请问一下,我用W880I在UDP模式下发短信(不支持TEXT模式),输入了AT+CMGS之后,在提示符下输入了类似下面的信息: at+cmgs=21 > 089168XXXXXXXXXXXX11000D91683118405057F000000006C8329BFD0E01 X部分为我的手机号码+F,经过两两对换的 但 ...… 查看全部问答> |
|
请教一个关于Tornado Target Server的问题 在启动一个Target 的时候出现这样一个错误“not enough memory to store the object file” 提示没有足够的内存存储这么大的符号表文件,把memory cache 设置的很大也没有用。 这个不知道有没有人遇到过,不知道是如何解决的?… 查看全部问答> |




