資源簡介
stm32f030 IAP在線升級參考代碼,原創
代碼片段和文件信息
#include?“stmflash.h“
//用戶根據自己的需要設置
#define?STM32_FLASH_SIZE??32????????????//所選STM32的FLASH容量大小(單位為K)
#define?STM32_FLASH_WREN??1
static?uint16?iHAL_STMFLASH_ReadHalfWord(uint32?faddr);
static?void?iHAL_STMFLASH_Write_NoCheck(uint32?WriteAddr?const?uint16?*pBuffer?uint16?NumToWrite);
//讀取指定地址的半字(16位數據)
//faddr:讀地址(此地址必須為2的倍數!!)
//返回值:對應數據.
static?uint16?iHAL_STMFLASH_ReadHalfWord(uint32?faddr)
{
????return?*(vu16*)faddr;
}
#if?STM32_FLASH_WREN????//如果使能了寫???
//不檢查的寫入
//WriteAddr:起始地址
//pBuffer:數據指針
//NumToWrite:半字(16位)數
static?void?iHAL_STMFLASH_Write_NoCheck(uint32?WriteAddr?const?uint16?*pBuffer?uint16?NumToWrite)
{
????uint16?i;
????for(i?=?0;?i?????{
????????FLASH_ProgramHalfWord(WriteAddr?pBuffer[i]);
????????WriteAddr?+=?2;?//地址增加2.
????}
}
#if?STM32_FLASH_SIZE<256
#define?STM_SECTOR_SIZE?1024?//字節
#else
#define?STM_SECTOR_SIZE?2048
#endif
//uint16?STMFLASH_BUF[STM_SECTOR_SIZE?/?2];?//最多是2K字節
uint8?STMFLASH_BUF[STM_SECTOR_SIZE];
#warning?“沒有掉電保護機制,如果該page內有代碼,就會出問題!“
//從指定地址開始寫入指定長度的數據
//WriteAddr:起始地址(此地址必須為2的倍數!!)
//pBuffer:數據指針
//NumToWrite:半字(16位)數(就是要寫入的16位數據的個數.)
void?JTHAL_STMFLASH_Write(uint32?WriteAddr?const?uint16?*pBuffer?uint16?NumToWrite)
{
????uint32?secpos;????//扇區地址
????uint16?secoff;????//扇區內偏移地址(16位字計算)
????uint16?secremain;?//扇區內剩余地址(16位字計算)
????uint16?i;
????uint32?offaddr;???//去掉0X08000000后的地址
????uint16?*pBuff?=?(uint16?*)STMFLASH_BUF;
????
????if(WriteAddr?se?||?(WriteAddr?>=?(JTSTM32_FLASH_base?+?1024?*?STM32_FLASH_SIZE)))
????????return;?//非法地址
????????
????FLASH_Unlock();?????????????????????//解鎖
????offaddr?=?WriteAddr?-?JTSTM32_FLASH_base;?//實際偏移地址.
????secpos?=?offaddr?/?STM_SECTOR_SIZE;?????//扇區地址??0~127?for?STM32F103RBT6
????secoff?=?(offaddr?%?STM_SECTOR_SIZE)?/?2;?//在扇區內的偏移(2個字節為基本單位.)
????secremain?=?STM_SECTOR_SIZE?/?2?-?secoff;?//扇區剩余空間大小
????if(NumToWrite?<=?secremain)
????????secremain?=?NumToWrite;?//不大于該扇區范圍
????????
????while(1)
????{
????????JTHAL_STMFLASH_Read(secpos?*?STM_SECTOR_SIZE?+?JTSTM32_FLASH_base?pBuff?STM_SECTOR_SIZE?/?2);?//讀出整個扇區的內容
????????for(i?=?0;?i?????????{
????????????if(pBuff[secoff?+?i]?!=?0XFFFF)break;?//需要擦除
????????}
????????if(i?????????{
????????????FLASH_ErasePage(secpos?*?STM_SECTOR_SIZE?+?JTSTM32_FLASH_base);?//擦除這個扇區
????????????for(i?=?0;?i?????????????{
????????????????pBuff[i?+?secoff]?=?pBuffer[i];
????????????}
????????????iHAL_STMFLASH_Write_NoCheck(secpos?*?STM_SECTOR_SIZE?+?JTSTM32_FLASH_base?pBuff?STM_SECTOR_SIZE?/?2);?//寫入整個扇區
????????}
????????else
????????????iHAL_STMFLASH_Write_NoCheck(WriteAddr?pBuffer?secremain);?//寫已經擦除了的直接寫入扇區剩余區間.
????????if(NumToWrite?==?secremain)
????????????break;?//寫入結束了
????????else//寫入未結束
????????{
????????????secpos++;???????????????//扇區地址增1
????????????secoff?=?0;?????????????//偏移位置為0
????????????pBuffer?+=?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????1120??2017-02-12?19:11??IAP_STM32F030\CORE\arm_common_tables.h
?????文件?????240326??2017-02-12?19:11??IAP_STM32F030\CORE\arm_math.h
?????文件??????31948??2017-02-12?19:11??IAP_STM32F030\CORE\core_cm0.h
?????文件??????15691??2017-02-12?19:11??IAP_STM32F030\CORE\core_cmFunc.h
?????文件??????16108??2017-02-12?19:11??IAP_STM32F030\CORE\core_cmInstr.h
?????文件??????10644??2017-02-12?19:11??IAP_STM32F030\CORE\startup_stm32f0xx.s
?????文件???????1067??2017-04-20?22:11??IAP_STM32F030\HAL\jt_typedef.h
?????文件???????4078??2017-04-20?10:31??IAP_STM32F030\HAL\stmflash.c
?????文件????????750??2017-04-20?10:31??IAP_STM32F030\HAL\stmflash.h
????.......????139562??2017-04-20?22:12??IAP_STM32F030\Project\IAP_Stm32f030.uvguix.Administrator
????.......?????18075??2017-04-20?22:10??IAP_STM32F030\Project\IAP_Stm32f030.uvoptx
????.......?????17983??2017-04-20?22:12??IAP_STM32F030\Project\IAP_Stm32f030.uvprojx
?????文件??????31035??2017-04-20?22:12??IAP_STM32F030\Project\startup_stm32f0xx.lst
?????文件??????38887??2017-04-20?22:12??IAP_STM32F030\Project\STM32F030.map
?????文件??????19520??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_adc.h
?????文件??????12353??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_cec.h
?????文件??????10385??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_comp.h
?????文件???????3680??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_crc.h
?????文件???????7138??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_dac.h
?????文件???????3892??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_dbgmcu.h
?????文件??????14207??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_dma.h
?????文件???????8617??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_exti.h
?????文件??????10957??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_flash.h
?????文件??????13174??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_gpio.h
?????文件??????18136??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_i2c.h
?????文件???????4531??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_iwdg.h
?????文件???????4413??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_misc.h
?????文件???????5909??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_pwr.h
?????文件??????20615??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_rcc.h
?????文件??????35039??2017-02-12?19:11??IAP_STM32F030\STM32F03x_FWLib\inc\stm32f0xx_rtc.h
............此處省略124個文件信息
評論
共有 條評論
相關資源
- 組態王驅動開發包3.0.0.7(中文)
- 用python編寫的移動彩信的發送程序
- SSM+Shiro+redis實現單點登陸
- WPE三件套(WPE+CCP+E2G)冰楓修改版
- TCL-S1916 ,1924交換機管理程序
- 飛思卡爾單片機MC9S12XS12G128驅動(硬件
- VNCX
- 多窗口后臺鼠標連點器
- jstl-api-1.2和jstl-impl-1.2
- 精美千年登陸器(自動更新).rar
- Crystal Impact Match!2.1.3 試用延長
- CASS9.1最新S4數據及驅動+ET199數據及驅
- 使用選擇性重傳協議實現UDP可靠通信
- 一個超簡單的企業管理系統(帶ACCE
- 實現小波變換例子 upcoef 函數
- 類pascal語言編譯器(編譯原理實驗)
- DELPHI與西門子200PLC的串口通信實例
- mybatis連接oracle實例
- 單片機和adc0809數字電壓表
- 信號估計DOAmusicespritcapon
- PIC單片機完成的電子密碼鎖
- B/S 網上訂餐系統
- BCG幫助手冊,完整版_修正
- Labview與CH372CH375的通信測試
- 基于MFC擴展CListCtrl子項顯示圖片并疊
- VMware65_SLP_DeLLSLIC2.1
- 單片機、ADC0808809設計簡易數字電壓表
- 基于MIPS指令集的32位CPU設計與Verilog語
- 28335CAN調試程序
- NE555電路應用原理圖及PCB