15-STM32F103RCT6的FLASH寫入

STM32F103RCT6的FLASH寫入

1.


//*******************************固件升級地址信息******************************//
#define STM32_FLASH_BASE 	0x08000000	//固件起始地址
#define FLASH_APP_ADDR  	0x08005000 	//APP開始地址
#define FLASH_PARA_ADDR 	0x0803C000	//固件關鍵信息參數
#define FLASH_INFO_ADDR 	0x0803F000	//固件升級信息參數
#define STM_SECTOR_SIZE		2048				//頁大小
#define STM32_FLASH_SIZE 	128					//總頁數u16 stm32_flash_buf[STM_SECTOR_SIZE/2]={0x00};					//用于FLASH寫操作,注意字節對齊,最多是2K字節
/*FLASH讀出函數*****************************************************************************/
u8 STMFLASH_Read_Byte(u32 faddr)
{return *(u8*)faddr; 
}
/*FLASH寫入函數*****************************************************************************/
void STMFLASH_Write_NoCheck(u32 WriteAddr,u16 *pBuffer,u16 num_byte)   
{ 			 		 u16 i;for(i=0;i<num_byte;i++){FLASH_ProgramHalfWord(WriteAddr,pBuffer[i]);WriteAddr+=2;//地址增加2.}  
} 
/*FLASH寫入函數*****************************************************************************/
void STMFLASH_Write(u32 WriteAddr,u8 *pBuffer,u16 num_byte)//寫多少個字節	
{u16 i;u16 sec_num;	   	//一共需要寫入多少扇區u16 sec_off; 			//最后一包數據個數 ////if((WriteAddr!=FLASH_INFO_ADDR)&&(WriteAddr!=FLASH_APP_ADDR)&&(WriteAddr!=FLASH_PARA_ADDR))return;//非法地址sec_num=(num_byte/STM_SECTOR_SIZE);sec_off=(num_byte%STM_SECTOR_SIZE);FLASH_Unlock();						//解鎖//printf("SSSSS");////if(WriteAddr==FLASH_APP_ADDR)//寫APP數據{//擦除固件區域for(i=0;i<116;i++){FLASH_ErasePage((i+10)*STM_SECTOR_SIZE+STM32_FLASH_BASE);//擦除APP空間扇區}//寫數據到flashfor(i=0;i<sec_num;i++){memset((u8*)stm32_flash_buf,0xFF,sizeof(stm32_flash_buf));//數據緩存buffMem_Copy((u8*)stm32_flash_buf,&pBuffer[i*STM_SECTOR_SIZE],STM_SECTOR_SIZE);//復制數據STMFLASH_Write_NoCheck((FLASH_APP_ADDR+i*STM_SECTOR_SIZE),stm32_flash_buf,STM_SECTOR_SIZE/2);} 	if(sec_off){memset((u8*)stm32_flash_buf,0xFF,sizeof(stm32_flash_buf));//數據緩存buffMem_Copy((u8*)stm32_flash_buf,&pBuffer[sec_num*STM_SECTOR_SIZE],sec_off);//復制數據STMFLASH_Write_NoCheck((FLASH_APP_ADDR+i*STM_SECTOR_SIZE),stm32_flash_buf,STM_SECTOR_SIZE/2);}}else if(WriteAddr==FLASH_INFO_ADDR)//寫固件信息{FLASH_ErasePage(FLASH_INFO_ADDR);//擦除這個扇區,這個是固件信息的空間memset((u8*)stm32_flash_buf,0xFF,sizeof(stm32_flash_buf));Mem_Copy((u8*)stm32_flash_buf,pBuffer,sec_off);STMFLASH_Write_NoCheck(FLASH_INFO_ADDR,stm32_flash_buf,STM_SECTOR_SIZE/2);}else if(WriteAddr==FLASH_PARA_ADDR)//寫固件信息{FLASH_ErasePage(FLASH_PARA_ADDR);//擦除這個扇區,這個是固件信息的空間memset((u8*)stm32_flash_buf,0xFF,sizeof(stm32_flash_buf));Mem_Copy((u8*)stm32_flash_buf,pBuffer,sec_off);STMFLASH_Write_NoCheck(FLASH_PARA_ADDR,stm32_flash_buf,STM_SECTOR_SIZE/2);}FLASH_Lock();//上鎖
}
/*FLASH讀出函數*****************************************************************************/
void STMFLASH_Read(u32 ReadAddr,u8 *pBuffer,u16 num_byte)   	
{u16 i;for(i=0;i<num_byte;i++){pBuffer[i]=STMFLASH_Read_Byte(ReadAddr);//讀取2個字節.ReadAddr+=1;//偏移.	}
}
/*內存復制函數******************************************************************************/
void Mem_Copy(u8 * date1,u8 * date2,u16 len)
{u16 i;for(i=0;i<len;i++){date1[i]=date2[i];}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89214.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89214.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89214.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PPO:近端策略優化算法

溫馨提示&#xff1a; 本篇文章已同步至"AI專題精講" PPO&#xff1a;近端策略優化算法 摘要 我們提出了一類新的用于強化學習的 policy gradient 方法&#xff0c;該方法在與環境交互以采樣數據和使用隨機梯度上升優化一個“代理”目標函數之間交替進行。與標準的…

數據結構的算法分析與線性表<1>

一、算法分析&#xff1a; 由于語句執行一次的實際所需時間與機器的軟硬件有關&#xff0c;則算法分析是針對語句執行次數&#xff0c;而非執行時間。 時間復雜度 計算時間復雜度&#xff1a; 常量階 如果算法中的n是固定的&#xff0c;或者說n是常數&#xff0c;或者時間復雜…

esp32使用ESP-IDF在Linux下的升級步驟,和遇到的坑Traceback (most recent call last):,及解決

因為之前使用的是ESP-IDF5.3版本。而5.3版本又不支持ESP32P4。而V5.4版本開始正式對P4的支持。所以我把ESP-IDF 升級到V5.4.2的release版本。 一、升級版本&#xff1a;【根據樂鑫官方的方式升級】ESP-IDF 版本簡介 - ESP32-P4 - — ESP-IDF 編程指南 v5.4.2 文檔 更新至一個穩…

【算法】貪心算法:最大數C++

文章目錄前言題目解析算法原理字典序代碼示例策略證明前言 題目的鏈接&#xff0c;大家可以先試著去做一下再來看一下思路。179. 最大數 - 力扣&#xff08;LeetCode&#xff09; 題目解析 還是老樣子&#xff0c;把題目讀懂&#xff0c;畫出有用信息。 認真看示例&#xff0…

網絡安全職業指南:探索網絡安全領域的各種角色

本文旨在為對網絡安全領域感興趣的粉絲讀者提供一份全面的職業指南。我們將探討網絡安全領域中各種不同的職業角色&#xff0c;包括其職責、所需技能以及職業發展路徑&#xff0c;幫助你了解網絡安全領域的職業選擇&#xff0c;并為你的職業規劃提供參考。網絡安全職業概覽 身處…

Design Vision:顯示扇入/扇出邏輯

相關閱讀 Design Visionhttps://blog.csdn.net/weixin_45791458/category_13006970.html?spm1001.2014.3001.5482 在使用Design Vision中查看示意圖時&#xff0c;可以在示意圖中查看所選單元(Cell)、引腳(Pin)、端口(Port)或線網(Net)的扇入/扇出邏輯。用戶可以在當前激活的…

13.7 Meta LLaMA2-Chat核心技術突破:三重強化學習實現91.4%安全評分,超越ChatGPT的對話模型架構全解析

Meta LLaMA2-Chat核心技術突破:三重強化學習實現91.4%安全評分,超越ChatGPT的對話模型架構全解析 指令微調模型:LLaMA2-Chat 技術深度解析 LLaMA2-Chat 作為 Meta 推出的對話優化大模型,其技術實現展現了大模型對齊(Alignment)領域的前沿突破。與基礎版 LLaMA2 相比,該…

二維仿射變換筆記

二維仿射變換筆記 1. 數學基礎 1.1 變換矩陣 二維仿射變換使用3x3的齊次坐標矩陣表示: [a b tx] [c d ty] [0 0 1 ]其中: [a b; c d] 是線性變換部分,表示旋轉、縮放和錯切[tx; ty] 是平移部分最后一行 [0 0 1] 是齊次坐標的固定形式1.2 基本變換 1.2.1 平移變換 將點…

創建自定義Dataset類與多分類問題實戰

codes 文章目錄&#x1f31f; 6 多分類問題與卷積模型的優化&#x1f9e9; 6.1 創建自定義Dataset類?? 數據集特點&#xff1a;&#x1f511; 關鍵實現步驟&#xff1a;&#x1f6e0;? 自定義Dataset類實現&#x1f4ca; 數據集劃分與可視化&#x1f9e0; 6.2 基礎卷積模型&…

用vue自定義指令設置頁面權限

1.按鈕權限處理/*** v-hasPermi 按鈕權限處理*/import store from /storeexport default {inserted(el, binding, vnode) {const { value } bindingconst all_permission "*:*:*";const permissions store.getters && store.getters.permissionsif (value…

JPA / Hibernate

1. JPA 和 Hibernate 有什么區別&#xff1f;JPA 是 Java 官方提出的一套 ORM 規范&#xff0c;它只定義了實體映射、關系管理、查詢接口等標準&#xff0c;不包含具體實現。Hibernate 是對 JPA 規范的最常用實現&#xff0c;提供了完整的 ORM 功能&#xff0c;并擴展了許多 JP…

kibana顯示未準備就緒

kibana顯示未準備就緒 最近在研究新版本的ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;棧時遇到了一個問題&#xff1a;雖然服務器本身能夠訪問ELK服務&#xff0c;但通過瀏覽器嘗試訪問時卻無法成功。這里我將分享一些可能的排查步驟和解決方案。連接es的地址…

語音對話秒譯 + 視頻懸浮字 + 相機即拍即譯:ViiTor 如何破局跨語言場景?

在跨語言信息獲取場景中&#xff0c;語言壁壘常導致效率降低。ViiTor Translate 試圖通過 “場景化功能布局” &#xff0c;覆蓋 語音、視頻、圖像、文本 四大維度翻譯需求。以下基于產品功能展示&#xff0c;拆解其核心能力&#xff1a; 1. 實時語音對話翻譯&#xff1a;打破交…

國內第一梯隊終端安全產品解析:技術與場景實踐

國內終端安全市場的第一梯隊產品&#xff0c;通常具備技術領先性、場景覆蓋度和規模化落地能力。結合 2025 年最新行業動態與實戰案例&#xff0c;以下從技術架構、核心能力和典型應用三個維度&#xff0c;解析當前市場的頭部產品及其差異化價值。一、技術架構與市場格局國內終…

FTP 備份,一種更安全的備份方式

備份數據后最重要的任務是確保備份安全存儲&#xff0c;最好是異地存儲。您可以通過物理方式將備份介質&#xff08;例如磁帶和 CD/DVD&#xff09;移動到異地位置。這是一個乏味、耗時、不方便且不可靠的方式。更簡單的解決方案是通過 FTP 備份到保存在異地的服務器。什么是 F…

理解 HTTP POST 請求中的 json 和 data 參數

在使用 Python 發送 HTTP POST 請求時&#xff08;無論是使用 requests 還是 aiohttp&#xff09;&#xff0c;json 和 data 參數有明確的區別和使用場景。理解這些區別對正確構建請求至關重要。關鍵區別特性json 參數data 參數內容類型自動設置為 application/json需要手動設置…

C#反射機制與Activator.CreateInstance

本文僅作為參考大佬們文章的總結。 反射是C#和.NET框架中一項強大的功能&#xff0c;允許程序在運行時檢查、創建和操作類型、方法、屬性等元數據。作為反射機制的核心組件&#xff0c;Activator.CreateInstance提供了動態實例化對象的靈活方式。本文將全面剖析C#反射的原理、…

Linux的用戶和用戶組與權限解析、環境變量說明與配置、sudo配置解析和使用

一、Linux的用戶及用戶組與權限 1.1、Linux的用戶和用戶組內容介紹 Linux的用戶角色分類序號Linux的用戶角色說明1超級用戶擁有對系統的最高管理權限&#xff0c;可執行任意操作&#xff0c;默認是root用戶2普通用戶只能對自己目錄下的文件進行訪問和修改&#xff0c;具有登錄系…

圖解LeetCode:79遞歸實現單詞搜索

網格 (board): 單詞搜索 中等 給定一個 m x n 二維字符網格 board 和一個字符串單詞 word 。如果 word 存在于網格中&#xff0c;返回 true &#xff1b;否則&#xff0c;返回 false 。 單詞必須按照字母順序&#xff0c;通過相鄰的單元格內的字母構成&#xff0c;其中“相鄰”…

2025 R3CTF

文章目錄EvalgelistSilent Profit&#xff08;復現&#xff09;Evalgelist <?phpif (isset($_GET[input])) {echo <div class"output">;$filtered str_replace([$, (, ), , ", "", "", ":", "/", "!&…