今天分享幾點小知識,希望對你有幫助!
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庫封裝的相對復雜,不適合研究最底層寄存器。
-
寄存器
+關注
關注
31文章
5424瀏覽量
123508 -
FlaSh
+關注
關注
10文章
1668瀏覽量
151070 -
STM32
+關注
關注
2290文章
11018瀏覽量
362672
發布評論請先 登錄
STM32的幾種開發方式,你都知道嗎?(可下載)
dac161p997這幾個寄存器全配置為0,當發生錯誤時,dac161p997會不會依據錯誤的數據進行輸出?
接口的控制與狀態寄存器什么作用
寄存器間接尋址和寄存器尋址的區別
通用寄存器是什么意思
寄存器的類型和作用
寄存器故障分析
寄存器是什么意思?寄存器是如何構成的?

評論