STM32F103 flash地址与数据存入时高低位的关系
這幾天做東西用到了stm32f103的內(nèi)置flash模擬eeprom,其中有個(gè)32位的數(shù)據(jù)需要存儲(chǔ),但是正點(diǎn)原子的例程并沒(méi)有給出直接存取32位數(shù)據(jù)的函數(shù),于是乎自己寫了個(gè)。
首先復(fù)習(xí)概念,在stm32f103中:
8比特(bit)=1字節(jié)(Byte)
4字節(jié)(Byte)=1字(Word)
存入32位數(shù)據(jù)**(錯(cuò)誤示范)**
void STMFLASH_WriteOneWord(u32 WriteAddr,u32 DataToWrite) {u16 temp16[2];temp16[0]=(u16)(DataToWrite>>16);temp16[1]=(u16)DataToWrite;STMFLASH_Write(WriteAddr,temp16,2); }原理很簡(jiǎn)單就是把傳入的32位數(shù)直接拆成高16位和低16位再由正點(diǎn)的函數(shù)存進(jìn)去。官方給的函數(shù)FLASH_Status FLASH_ProgramWord(uint32_t Address, uint32_t Data);實(shí)際也是把32位的數(shù)存了兩次16位。
接下來(lái)就是讀取了,那么問(wèn)題來(lái)了,正點(diǎn)原子給了讀半字的程序:
那我們讀一字(1 Word = 4 Byte = 32 bit)的時(shí)候能不能直接讀呢,或者像存的時(shí)候那樣分開讀再拼起來(lái)?
為了測(cè)試,先向地址addr=0x800F000+42中存入0xaa,再向地址addr=0x800F000+44中存入0x55,模擬了用上面的方法在addr=0x800F000+42處存入數(shù)據(jù)0x00aa0055。
首先是直接讀,程序如下簡(jiǎn)單粗暴:
這個(gè)方法得到的值是?5570730?,也就是?0x005500AA?,由此可知這種方法并不可行,順便得出了結(jié)論:stm32f103是低位優(yōu)先的硬件。(相關(guān)文章鏈接)
在這種條件下,有兩種方法解決這個(gè)問(wèn)題讓:
1.反著存 2.反著讀。我選擇1。
所以改動(dòng)存的函數(shù)為:
總結(jié)
以上是生活随笔為你收集整理的STM32F103 flash地址与数据存入时高低位的关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 触控板手势增强软件multitouch
- 下一篇: s00devs_Devs @ Home