娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年10月29日(星期二)

正在發(fā)生

2021年10月29日 | stm32專題二十八:讀寫內(nèi)部Flash

發(fā)布者:清新天空 來(lái)源: eefocus關(guān)鍵字:stm32  讀寫內(nèi)部Flash 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

內(nèi)部Flash       

       STM32芯片內(nèi)部有一個(gè)FLASH存儲(chǔ)器,主要用于存儲(chǔ)代碼。我們?cè)陔娔X上編寫好應(yīng)用程序后,使用下載器把編譯后的代碼文件燒錄到該內(nèi)部FLASH中,由于FLASH存儲(chǔ)器的內(nèi)容在掉電后不會(huì)丟失,芯片重新上電復(fù)位后,內(nèi)核可從內(nèi)部FLASH中加載代碼并運(yùn)行。


       除了使用外部的工具(如下載器)讀寫內(nèi)部FLASH外,STM32芯片在運(yùn)行的時(shí)候,也能對(duì)自身的內(nèi)部FLASH進(jìn)行讀寫,因此,若內(nèi)部FLASH存儲(chǔ)了應(yīng)用程序后還有剩余的空間,我們可以把它像外部SPI-FLASH那樣利用起來(lái),存儲(chǔ)一些程序運(yùn)行時(shí)產(chǎn)生的需要掉電保存的數(shù)據(jù)。


       由于訪問(wèn)內(nèi)部FLASH的速度要比外部的SPI-FLASH快得多,所以在緊急狀態(tài)下常常會(huì)使用內(nèi)部FLASH存儲(chǔ)關(guān)鍵記錄;為了防止應(yīng)用程序被抄襲,有的應(yīng)用會(huì)禁止讀寫內(nèi)部FLASH中的內(nèi)容,或者在第一次運(yùn)行時(shí)計(jì)算加密信息并記錄到某些區(qū)域,然后刪除自身的部分加密代碼,這些應(yīng)用都涉及到內(nèi)部FLASH的操作。


如圖所示為內(nèi)部Flash結(jié)構(gòu)(大容量):

主要功能描述:


主存儲(chǔ)器中保存了我們燒寫到Flash中的程序;

啟動(dòng)程序代碼(系統(tǒng)存儲(chǔ)區(qū)):是用戶不能訪問(wèn)的區(qū)域,它在芯片出廠時(shí)已經(jīng)固化了啟動(dòng)代碼,它負(fù)責(zé)實(shí)現(xiàn)串口、USB以及CAN等ISP燒錄功能;

用戶選擇字節(jié)(選項(xiàng)字節(jié)):選項(xiàng)字節(jié)用于配置FLASH的讀寫保護(hù)、待機(jī)/停機(jī)復(fù)位、軟件/硬件看門狗等功能;

主存儲(chǔ)器:


       通常我們說(shuō)STM32內(nèi)部FLASH的時(shí)候,都是指這個(gè)主存儲(chǔ)器區(qū)域,它是存儲(chǔ)用戶應(yīng)用程序的空間,芯片型號(hào)說(shuō)明中的256K FLASH、512K FLASH都是指這個(gè)區(qū)域的大小。


        主存儲(chǔ)器分為256頁(yè),每頁(yè)大小為2KB,共512KB。這個(gè)分頁(yè)的概念,實(shí)質(zhì)就是FLASH存儲(chǔ)器的扇區(qū),與其它FLASH一樣,在寫入數(shù)據(jù)前,要先按頁(yè)(扇區(qū))擦除。


對(duì)內(nèi)部Flash的寫入過(guò)程:


1 解鎖:


閃存編程手冊(cè)說(shuō)明:

操作過(guò)程:

操作的寄存器

2 頁(yè)擦除:


閃存編程手冊(cè)說(shuō)明:

執(zhí)行流程:

具體的實(shí)現(xiàn)過(guò)程:

涉及到的寄存器:

還有不常使用的全片擦除(防止破解):

3 寫入數(shù)據(jù):


擦除完畢后即可寫入數(shù)據(jù),寫入數(shù)據(jù)的過(guò)程并不是僅僅使用指針向地址賦值,賦值前還還需要配置一系列的寄存器,步驟如下:


檢查 FLASH_SR 中的 BSY 位,以確認(rèn)當(dāng)前未執(zhí)行任何其它的內(nèi)部 Flash 操作;

將 FLASH_CR 寄存器中的 “激活編程寄存器位 PG” 置 1;

向指定的 FLASH 存儲(chǔ)器地址執(zhí)行數(shù)據(jù)寫入操作,每次只能以 16位的方式寫入;

等待 BSY 位被清零時(shí),表示寫入完成;

閃存編程手冊(cè)中的描述:

操作內(nèi)部Flash的庫(kù)函數(shù)


解鎖 + 上鎖


void FLASH_Unlock(void)

{

  /* Authorize the FPEC of Bank1 Access */

  FLASH->KEYR = FLASH_KEY1;

  FLASH->KEYR = FLASH_KEY2;

}

void FLASH_Lock(void)

{

  /* Set the Lock Bit to lock the FPEC and the CR of  Bank1 */

  FLASH->CR |= CR_LOCK_Set;

}

擦除扇區(qū)


/**

  * @brief  Erases a specified FLASH page.

  * @note   This function can be used for all STM32F10x devices.

  * @param  Page_Address: The page address to be erased.

  * @retval FLASH Status: The returned value can be: FLASH_BUSY, FLASH_ERROR_PG,

  *         FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT.

  */

FLASH_Status FLASH_ErasePage(uint32_t Page_Address)

{

  FLASH_Status status = FLASH_COMPLETE;

 

  /* 等待上一次操作完成 */

  status = FLASH_WaitForLastOperation(EraseTimeout);

  

  if(status == FLASH_COMPLETE)

  { 

    /* 準(zhǔn)備擦除頁(yè) */

    FLASH->CR|= CR_PER_Set;

    FLASH->AR = Page_Address; 

    FLASH->CR|= CR_STRT_Set;

    

    /* 等待操作完成 */

    status = FLASH_WaitForLastOperation(EraseTimeout);

    

    /* 禁用頁(yè)擦除 */

    FLASH->CR &= CR_PER_Reset;

  }

 

  return status;

}

閃存編程(一次必須寫入16位)


/**

  * @brief  Programs a half word at a specified address.

  * @note   This function can be used for all STM32F10x devices.

  * @param  Address: specifies the address to be programmed.

  * @param  Data: specifies the data to be programmed.

  * @retval FLASH Status: The returned value can be: FLASH_ERROR_PG,

  *         FLASH_ERROR_WRP, FLASH_COMPLETE or FLASH_TIMEOUT. 

  */

FLASH_Status FLASH_ProgramHalfWord(uint32_t Address, uint16_t Data)

{

  FLASH_Status status = FLASH_COMPLETE;

 

  /* Wait for last operation to be completed */

  status = FLASH_WaitForLastOperation(ProgramTimeout);

  

  if(status == FLASH_COMPLETE)

  {

    /* if the previous operation is completed, proceed to program the new data */

    FLASH->CR |= CR_PG_Set;

  

    /* 把地址參數(shù)強(qiáng)制轉(zhuǎn)換為指針,再通過(guò)指針操作寫入數(shù)據(jù) */

    *(__IO uint16_t*)Address = Data;

 

    /* Wait for last operation to be completed */

    status = FLASH_WaitForLastOperation(ProgramTimeout);

    

    /* Disable the PG Bit */

    FLASH->CR &= CR_PG_Reset;

  } 

  

  /* Return the Program Status */

  return status;

}

實(shí)驗(yàn):讀寫內(nèi)部Flash


/**

  * @brief  InternalFlash_Test,對(duì)內(nèi)部FLASH進(jìn)行讀寫測(cè)試

  * @param  None

  * @retval None

  */

int InternalFlash_Test(void)

{

uint32_t EraseCounter = 0x00; //記錄要擦除多少頁(yè)

uint32_t Address = 0x00; //記錄寫入的地址

uint32_t Data = 0x3210ABCD; //記錄寫入的數(shù)據(jù)

uint32_t NbrOfPage = 0x00; //記錄寫入多少頁(yè)

FLASH_Status FLASHStatus = FLASH_COMPLETE; //記錄每次擦除的結(jié)果

TestStatus MemoryProgramStatus = PASSED;//記錄整個(gè)測(cè)試結(jié)果

 

  /* 解鎖 */

  FLASH_Unlock();

 

  /* 計(jì)算要擦除多少頁(yè) */

  NbrOfPage = (WRITE_END_ADDR - WRITE_START_ADDR) / FLASH_PAGE_SIZE;

 

  /* 清空所有標(biāo)志位 */

  FLASH_ClearFlag(FLASH_FLAG_EOP | FLASH_FLAG_PGERR | FLASH_FLAG_WRPRTERR);

 

  /* 按頁(yè)擦除*/

  for(EraseCounter = 0; (EraseCounter < NbrOfPage) && (FLASHStatus == FLASH_COMPLETE); EraseCounter++)

  {

    FLASHStatus = FLASH_ErasePage(WRITE_START_ADDR + (FLASH_PAGE_SIZE * EraseCounter));

  

}

  

  /* 向內(nèi)部FLASH寫入數(shù)據(jù) */

  Address = WRITE_START_ADDR;

 

  while((Address < WRITE_END_ADDR) && (FLASHStatus == FLASH_COMPLETE))

  {

    FLASHStatus = FLASH_ProgramWord(Address, Data);

    Address = Address + 4;

  }

 

  FLASH_Lock();

  

  /* 檢查寫入的數(shù)據(jù)是否正確 */

  Address = WRITE_START_ADDR;

 

  while((Address < WRITE_END_ADDR) && (MemoryProgramStatus != FAILED))

  {

    if((*(__IO uint32_t*) Address) != Data)

    {

      MemoryProgramStatus = FAILED;

    }

    Address += 4;

  }

return MemoryProgramStatus;

}


主要流程:

實(shí)驗(yàn)結(jié)果:

關(guān)鍵字:stm32  讀寫內(nèi)部Flash 引用地址:stm32專題二十八:讀寫內(nèi)部Flash

上一篇:stm32專題二十七:MPU6050 驅(qū)動(dòng)程序
下一篇:stm32專題二十九:Flash 讀寫保護(hù)

推薦閱讀

我國(guó)學(xué)者研發(fā)出液態(tài)金屬驅(qū)動(dòng)機(jī)器人中國(guó)科學(xué)技術(shù)大學(xué)設(shè)計(jì)了基于鎵基室溫液態(tài)金屬的新型機(jī)器人驅(qū)動(dòng)器,首次實(shí)現(xiàn)了液態(tài)金屬驅(qū)動(dòng)的功能性輪式移動(dòng)機(jī)器人。該成果日前發(fā)表在《先進(jìn)材料》雜志上。研究人員設(shè)計(jì)了一種具有超疏水表面的極輕半封閉輪式結(jié)構(gòu),將液態(tài)金屬液滴限制在狹長(zhǎng)的輪體內(nèi)部;通過(guò)巧妙設(shè)計(jì)的隨動(dòng)微型電極支架施加外部電場(chǎng)驅(qū)動(dòng)輪體內(nèi)液態(tài)金屬運(yùn)動(dòng)...
特斯拉今年能否完成 36 萬(wàn)輛電動(dòng)汽車的交付目標(biāo),上海工廠的表現(xiàn)是關(guān)鍵。  特斯拉上周四發(fā)布了 2019 年第三季度財(cái)報(bào),營(yíng)收為 63.03 億美元,較去年同期的 68.24 億美元下滑 9%。歸屬于普通股股東的凈利潤(rùn)為 1.43 億美元,較去年同期的凈利潤(rùn) 3.11 億美元下滑 54%。  第三季度,特斯拉實(shí)現(xiàn)盈利令華爾街分析師大感意外。但更加令人印象深...
在上周的“1024小鵬汽車智能日”活動(dòng)上,幾乎所有人都把當(dāng)天的焦點(diǎn)放在了即將在XPILOT 3.0上開(kāi)放的NGP高速自主導(dǎo)航駕駛功能上。尤其是那段NGP和特斯拉NOA的實(shí)測(cè)對(duì)比視頻里,小鵬P7的表現(xiàn)的確明顯優(yōu)于特斯拉。但如果近期你有關(guān)注特斯拉重寫FSD代碼的各種消息,相信你也會(huì)被它在測(cè)試中的表現(xiàn)感到驚訝。作為這次活動(dòng)的參與者之一,我想和大家分享一下自己的...
近日, SmartKem公司宣布和來(lái)自中國(guó)臺(tái)灣的錸寶科技簽訂了一項(xiàng)聯(lián)合開(kāi)發(fā)協(xié)議。作為一家前沿科技公司,SmartKem公司一直致力于通過(guò)其革命性有機(jī)半導(dǎo)體平臺(tái)助力新一代顯示器的設(shè)計(jì)開(kāi)發(fā),進(jìn)而重塑整個(gè)電子世界。另一方面,錸寶科技則是PMOLED顯示器的開(kāi)發(fā)商。根據(jù)該協(xié)議,雙方將合作生產(chǎn)全彩色AMOLED顯示器。 錸寶科技的首席執(zhí)行官D.C. Wang評(píng)論說(shuō):“我們很...

史海拾趣

問(wèn)答坊 | AI 解惑

語(yǔ)音控制小車

本帖最后由 paulhyde 于 2014-9-15 08:59 編輯 1.1 功能簡(jiǎn)介 語(yǔ)音控制小車是凌陽(yáng)科技教育推廣中心推出的基于凌陽(yáng) 16 位單片機(jī) SPCE061A 的典型應(yīng)用,在產(chǎn)品 設(shè)計(jì)上充分利用了 SPCE061A的眾多資源,打破了傳統(tǒng)教學(xué)中單片機(jī)學(xué)習(xí)枯燥和低效的現(xiàn)狀 ...…

查看全部問(wèn)答∨

關(guān)于EVC通過(guò)ActiveSync在線調(diào)試目標(biāo)板的問(wèn)題

我想我的開(kāi)發(fā)板應(yīng)該已經(jīng)和ActiveSync成功通訊上了,因?yàn)槲铱梢酝ㄟ^(guò)ActiveSync看到目標(biāo)板上的文件,并且可以將文件COPY進(jìn)去,但我還是無(wú)法用EVC在線調(diào)試,每次都會(huì)出現(xiàn)SERVER IS STARTED然后出現(xiàn)CONNECTING的進(jìn)程條并不停的等待. 問(wèn)題困擾我好長(zhǎng)時(shí)間了, ...…

查看全部問(wèn)答∨

尋創(chuàng)業(yè)加盟

方向是嵌入式視頻產(chǎn)品,已有團(tuán)隊(duì)和市場(chǎng),需底層/硬件精通的軟件人員加盟。 在深圳。有意發(fā)郵件 wyx999@gmail.com…

查看全部問(wèn)答∨

仿真可以,脫機(jī)運(yùn)行出錯(cuò)!

5416的USB的接口設(shè)備,在連接仿真器的情況下,識(shí)別成功,傳輸數(shù)據(jù)也成功 但是BOOT后單獨(dú)上電系統(tǒng)就無(wú)法識(shí)別了,BOOT應(yīng)該是成功了,我在多處都加了閃燈程序也運(yùn)行了,應(yīng)該是DSP寫描述符時(shí)候出錯(cuò)了,主機(jī)得到的描述符不對(duì),所以枚舉失敗 奇怪的是把 ...…

查看全部問(wèn)答∨

求助啊

手上有一塊老師的LPC1343的板子,課程設(shè)計(jì)老師要求做一個(gè)基于ARM cortex-m3的溫度檢測(cè)系統(tǒng),板子連下載線都沒(méi)有,我還不知道它是用什么下載的,現(xiàn)在只有一些單片機(jī)的基礎(chǔ),所以向用過(guò)LPC1343的高手們求助,加我Q:948740977…

查看全部問(wèn)答∨

用C55x的McBSP來(lái)發(fā)送幀數(shù)據(jù)

當(dāng)我把準(zhǔn)備好的64路數(shù)據(jù)用McBSP發(fā)送時(shí)為什么每個(gè)時(shí)隙的數(shù)據(jù)都一樣啊(就是每個(gè)時(shí)隙都發(fā)送自己和別的時(shí)隙的數(shù)據(jù))…

查看全部問(wèn)答∨

關(guān)于hc-06藍(lán)牙模塊與51單片機(jī)通訊問(wèn)題

最近在網(wǎng)上買了一個(gè)藍(lán)牙模塊,型號(hào)是hc-06,想用此與單片機(jī)通訊,即通過(guò)發(fā)信號(hào)給藍(lán)牙,然后經(jīng)藍(lán)牙的TX與RX與單片機(jī)TX與RX通訊。但是怎么調(diào)也調(diào)不好。說(shuō)明書上寫著藍(lán)牙的用法與普通的串口用法一樣。下面的程序通過(guò)單片機(jī)與電腦上的串口大師通訊是可 ...…

查看全部問(wèn)答∨

C6711DSP是不是沒(méi)有PLL這個(gè)模塊?

最近在用TI 的C6711DSK學(xué)習(xí),然后在TI的CSL庫(kù)文件中發(fā)現(xiàn)這個(gè)庫(kù)文件中定義C6711是沒(méi)有PLL這個(gè)模塊的。我想問(wèn)那C6711的時(shí)鐘該怎么配置呢? C6711DSK原理圖中時(shí)鐘部分的原理圖如下:…

查看全部問(wèn)答∨

問(wèn)一個(gè)關(guān)于ADC采樣交流電的初級(jí)問(wèn)題.

ADC是0 - 1.8V的,有交流電,頻率10~100Hz,電壓36V,不知道該怎么設(shè)計(jì)電路.平時(shí)沒(méi)做過(guò)ADC采樣這么高電壓和交流電.…

查看全部問(wèn)答∨

PCB線路板印刷常見(jiàn)的20種問(wèn)題

  在電路板絲網(wǎng)印刷過(guò)程中可以分為9個(gè)部分56個(gè)變量,這就要求大家有正確的操作程序或者就會(huì)出現(xiàn)以下現(xiàn)象。   網(wǎng)版不管怎樣拉,始終無(wú)法拉均勻,或者經(jīng)常出現(xiàn)爆裂。   網(wǎng)布與網(wǎng)框粘不牢固,干的慢,或者撕不掉。   網(wǎng)版上110網(wǎng)布容 ...…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 宁强县| 青海省| 迁西县| 仪陇县| 达孜县| 库伦旗| 淮安市| 安乡县| 岳普湖县| 许昌县| 沈阳市| 都安| 宜州市| 高阳县| 民县| 利川市| 尖扎县| 丹江口市| 民乐县| 连江县| 开江县| 哈密市| 龙南县| 玉树县| 扶绥县| 沽源县| 博乐市| 荆门市| 南通市| 宜都市| 蓬溪县| 旬阳县| 汝阳县| 罗山县| 思南县| 内乡县| 文成县| 罗山县| 河间市| 宜州市| 黄大仙区|