今天分享幾點(diǎn)小知識(shí),希望對(duì)你有幫助!
1Flash容量寄存器
這個(gè)問(wèn)題是之前有人問(wèn)過(guò),說(shuō):我的芯片被抹掉,看不清了,我怎么知道這塊芯片容量大???
解決辦法:
1.通過(guò)讀寄存器
在STM32的“參考手冊(cè)”中有Flash size data register這么一個(gè)寄存器(一般在手冊(cè)最后),明確寫(xiě)了寄存器的基地址。
提示:不同芯片型號(hào),可能這個(gè)寄存器地址不同。比如F103的基地址為:0x1FFFF7E0。
是一個(gè)16位的數(shù)值,出廠寫(xiě)入,程序只能讀取。讀取方法很簡(jiǎn)單,可以如下:
uint16_t Flash_size;
Flash_size = *(uint16_t *)0x1FFFF7E0;
說(shuō)到這里,可以參看我之前分享的一篇文章《你的STM32芯片F(xiàn)LASH容量真如ST官方選型手冊(cè)那樣嗎?》
2.通過(guò)STM32 ST-LINK Utility直接讀取
通過(guò)ST-Link連接芯片,直接讀取,可以看到容量信息:
2
UID寄存器
之前有人問(wèn)我,可以通過(guò)STM32的UID來(lái)加密嗎?這個(gè)肯定是可以的。
但又問(wèn)了我一個(gè)問(wèn)題,我不希望讀取全部(96位),可以只讀取部分寄存器來(lái)作為標(biāo)識(shí)嗎?讀取的部分會(huì)不會(huì)重復(fù)?
STM32的UID唯一標(biāo)識(shí)符適用于:
用來(lái)作為序列號(hào)。
用來(lái)作為密碼,在編寫(xiě)閃存時(shí),將此唯一標(biāo)識(shí)與軟件加解密算法結(jié)合使用,提高代碼在閃存存儲(chǔ)器內(nèi)的安全性。
用來(lái)激活帶安全機(jī)制的自舉過(guò)程。
STM32的UID共有96位(32x 3)。所有,就有朋友,我是否可以只讀取其中某一部分來(lái)作為唯一識(shí)別?
這個(gè)問(wèn)題,嚴(yán)格來(lái)說(shuō),不可以。但如果不是特別嚴(yán)格,還是可以。因?yàn)檫@個(gè)UID是通過(guò)晶元、分批等來(lái)進(jìn)行編號(hào)的。如果你買(mǎi)同一批次,你會(huì)發(fā)現(xiàn)那個(gè)編號(hào)可能連續(xù)。
我之前曾讀取過(guò)幾塊生產(chǎn)的板卡(購(gòu)買(mǎi)得_MCU是同一批次),芯片的UID是連續(xù)的,感興趣的可以試試。
所以,通過(guò)讀取部分UID來(lái)作為標(biāo)識(shí),只能說(shuō)不嚴(yán)格的情況是可以的。
3
寄存器偏移地址
現(xiàn)在還有許多初學(xué)的朋友在學(xué)習(xí)底層的一些知識(shí),比如前面就有朋友想自己通過(guò)寄存器來(lái)編程,但是卻不知道什么是寄存器基地址,什么是寄存器偏移地址。
1.基地址
每一個(gè)片內(nèi)外設(shè)都有一個(gè)對(duì)應(yīng)的基地址,而且是由廠商決定我們不能修改。如下圖:
在程序中,你會(huì)發(fā)現(xiàn)和上面對(duì)應(yīng)的代碼:
2.偏移地址
偏移地址就是在基地址基礎(chǔ)上偏移(一般是以4字節(jié)增加),比如TIM定時(shí)器的偏移地址:
同樣,在程序中對(duì)應(yīng)的代碼通過(guò)結(jié)構(gòu)體實(shí)現(xiàn)偏移:
關(guān)于基地址和偏移地址,不管是標(biāo)準(zhǔn)外設(shè)庫(kù)還是HAL庫(kù),都是上面所示那種基地址+偏移的方法實(shí)現(xiàn)。
還是之前多次在文章中提到的,想要了解寄存器原理,或者通過(guò)寄存器來(lái)實(shí)現(xiàn)的朋友,最好參考“標(biāo)準(zhǔn)外設(shè)庫(kù)”例程。HAL庫(kù)封裝的相對(duì)復(fù)雜,不適合研究最底層寄存器。
-
寄存器
+關(guān)注
關(guān)注
31文章
5250瀏覽量
119192 -
FlaSh
+關(guān)注
關(guān)注
10文章
1598瀏覽量
147331 -
STM32
+關(guān)注
關(guān)注
2257文章
10828瀏覽量
352432
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論