0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

关于STM32的这几个寄存器, 你知道吗?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-06 15:19 次阅读

今天分享几点小知识,希望对你有帮助!

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连接芯片,直接读取,可以看到容量信息

2

UID寄存器

之前有人问我,可以通过STM32的UID来加密吗?这个肯定是可以的。

但又问了我一个问题,我不希望读取全部(96位),可以只读取部分寄存器来作为标识吗?读取的部分会不会重复?

STM32的UID唯一标识符适用于:

用来作为序列号。

用来作为密码,在编写闪存时,将此唯一标识与软件加解密算法结合使用,提高代码在闪存存储器内的安全性。

用来激活带安全机制的自举过程。

STM32的UID共有96位(32x 3)。所有,就有朋友,我是否可以只读取其中某一部分来作为唯一识别?

这个问题,严格来说,不可以。但如果不是特别严格,还是可以。因为这个UID是通过晶元、分批等来进行编号的。如果你买同一批次,你会发现那个编号可能连续。

我之前曾读取过几块生产的板卡(购买得_MCU是同一批次),芯片的UID是连续的,感兴趣的可以试试。

所以,通过读取部分UID来作为标识,只能说不严格的情况是可以的。

3

寄存器偏移地址

现在还有许多初学的朋友在学习底层的一些知识,比如前面就有朋友想自己通过寄存器来编程,但是却不知道什么是寄存器基地址,什么是寄存器偏移地址。

1.基地址

每一个片内外设都有一个对应的基地址,而且是由厂商决定我们不能修改。如下图:

在程序中,你会发现和上面对应的代码:

2.偏移地址

偏移地址就是在基地址基础上偏移(一般是以4字节增加),比如TIM定时器的偏移地址:

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

关于基地址和偏移地址,不管是标准外设库还是HAL库,都是上面所示那种基地址+偏移的方法实现。

还是之前多次在文章中提到的,想要了解寄存器原理,或者通过寄存器来实现的朋友,最好参考“标准外设库”例程。HAL库封装的相对复杂,不适合研究最底层寄存器。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5030

    浏览量

    117733
  • FlaSh
    +关注

    关注

    10

    文章

    1550

    浏览量

    146646
  • STM32
    +关注

    关注

    2239

    文章

    10672

    浏览量

    348768
收藏 人收藏

    评论

    相关推荐

    C语言玩转单片机的寄存器操作技巧

    由于寄存器中有时会有连续几个寄存器位用于控制某个功能,现假设我们需要把寄存器的某几个连续位清零,且其它位不变,代码如下。
    发表于 03-07 11:36 318次阅读

    CPU的6个主要寄存器

    CPU寄存器是中央处理器内的组成部分,是有限存贮容量的高速存贮部件。寄存器是CPU内部的元件,包括通用寄存器、专用寄存器和控制寄存器
    的头像 发表于 02-03 15:15 1126次阅读

    个人对STM32 SysTick的总结(寄存器操作)

    一、概述:SysTick是一个简单的递减24位计数器。如果你不需要再应用程序中嵌入操作系统,SysTick可以作为简单的延时和产生周期性的中断。状态控制寄存器的第0位可以使能计数器,当前值寄存器随着
    的头像 发表于 01-06 08:00 414次阅读
    个人对<b class='flag-5'>STM32</b> SysTick的总结(<b class='flag-5'>寄存器</b>操作)

    请问AENERGY、 RAENERGY、VAENERGY这几个寄存器到底功率寄存器还是能量寄存器

    反复看了几次datasheet ,现在都不明白AENERGY、 RAENERGY、VAENERGY 这几个寄存器是功率寄存器还是能量寄存器了。 Datasheet中: AENERG
    发表于 12-27 07:16

    寄存器阵列低功耗设计方案

    寄存器写操作的时候会改变寄存器内容,需要时钟锁入新的数据。但是,对寄存器进行读操作的时候,寄存器内容不改变,寄存器不需要时钟。这个特点工具是
    的头像 发表于 12-08 11:19 296次阅读
    <b class='flag-5'>寄存器</b>阵列低功耗设计方案

    寄存器查看器的功能和使用

    对于搞嵌入式底层开发的软件或者硬件工程师来说,经常会涉及到查看芯片手册,比如某个芯片的串口控制器的寄存器值,需要知道这个值对应寄存器的哪些位,微软计算器的程序员模式虽然可以查看寄存器
    的头像 发表于 11-28 12:26 820次阅读
    <b class='flag-5'>寄存器</b>查看器的功能和使用

    pcb菲林是什么?这5个作用你知道吗

    pcb菲林是什么?这5个作用你知道吗
    的头像 发表于 11-22 11:14 2984次阅读

    CPSR寄存器和APSR寄存器的组成

    程序状态寄存器的作用就是反映处理器的状态信息。在程序运行期间我们可以通过查看程序状态寄存器的状态位来进行程序的分支跳转处理,或者我们可以设置程序状态寄存器的模式位来改变处理器的运行模式,或者我们可以设置程序状态
    的头像 发表于 10-20 11:38 1798次阅读
    CPSR<b class='flag-5'>寄存器</b>和APSR<b class='flag-5'>寄存器</b>的组成

    SoC芯片上的寄存器设计与验证

    就像芯片本身一样,SoC上的CSR设计也沿用了层级设计的方法。从最底层往上,寄存器可以被分为以下几个层级。
    的头像 发表于 10-20 10:39 509次阅读
    SoC芯片上的<b class='flag-5'>寄存器</b>设计与验证

    STM32 CAN接收/发送错误寄存器如何清零?

    STM32 CAN接收/发送错误寄存器如何清零?  CAN总线是一种常用的串行总线,其具有高可靠性、高速率、容错能力强等特点,广泛应用于汽车电子、制造业自动化、工程控制等领域。在CAN总线的标准
    的头像 发表于 09-14 14:22 2806次阅读

    寄存器是什么?怎么操作寄存器点亮LED灯?

    寄存器,是集成电路中非常重要的一种存储单元,通常由触发器组成。在集成电路设计中,寄存器可分为电路内部使用的寄存器和充当内外部接口的寄存器这两类。
    的头像 发表于 07-21 16:59 2977次阅读
    <b class='flag-5'>寄存器</b>是什么?怎么操作<b class='flag-5'>寄存器</b>点亮LED灯?

    寄存器是什么 掌握使用寄存器做设计需要注意的事项

    既然RTL是以寄存器行为为基础,那么就必须先了解寄存器是什么,并且掌握使用寄存器做设计需要注意的事项。
    的头像 发表于 07-13 15:38 879次阅读
    <b class='flag-5'>寄存器</b>是什么 掌握使用<b class='flag-5'>寄存器</b>做设计需要注意的事项

    操作BASEPRI特殊功能寄存器时无效解决方法(上)

    里写这几个数字中的任意一个时,发现BASEPRI的数字始终是0,没有任何效果。 我们知道,通过配置BASEPRI寄存器非0值来给系统中的中断响应设置门槛,当中断优先级低于某个级别时将不会得到CPU的响应执行,也就是说只有中断优先
    的头像 发表于 06-21 16:04 862次阅读
    操作BASEPRI特殊功能<b class='flag-5'>寄存器</b>时无效解决方法(上)

    Cortex-M3入门指南(二):寄存器

    第一行是偏移地址。偏移地址指明了这个寄存器相对于外设寄存器区段的位置,从起始地址表中我们可以知道 GPIOA 寄存器区段的起始地址是 0x4001_0800,而 GPIO_BSRR 的
    的头像 发表于 05-31 17:36 1066次阅读
    Cortex-M3入门指南(二):<b class='flag-5'>寄存器</b>

    车载芯片安全寄存器的布局设计

    我们知道在车载芯片的数字实现中,常用的安全机制有安全寄存器(Safety Register),所以识别出关键路径上失效风险高的寄存器(也就是热点寄存器)就非常重要,需要EDA工具重点发
    的头像 发表于 05-22 10:25 945次阅读
    车载芯片安全<b class='flag-5'>寄存器</b>的布局设计