前言
IAP 是 In Application Programing 的首字母縮寫,在應用編程,即在程序運行的過程中進行編程(升級程序, 更新固件)。IAP 是用戶自己的程序在運行過程中對 Flash 部分區域進行燒寫,目的是為了在產品發布后可以方便地通過 預留的通信口對產品中的固件程序進行更新升級。
1
功能實現
IAP 功能的實現,一般將程序分為兩個部分,即:Bootloader 和 APP。Bootloader 程序用于上電時判斷程 序是進入 IAP 升級流程還是進入 APP 應用程序執行過程。其一般放置在 FLASH 的開始部分,如下圖示:
![poYBAGLOYUGAVLeFAACGWYo6uzs871.jpg](https://file.elecfans.com/web2/M00/52/7A/poYBAGLOYUGAVLeFAACGWYo6uzs871.jpg)
CW32F030 的 Flash 起始地址為 0x00000000,劃分 0x00000000 ~ 0x00001FFFF 這 8Kbyte 的空間用于存放 Bootloader 程序,APP 的起始地址選擇為 0x00002000。
CW32F030 采用 ARM? Cortex?-M0+ 內核,具有向量表偏移寄存器 VTOR,故其從 Bootloader 中實現向 APP 中跳轉較為簡單,僅設置向量表偏移即可。
本應用中 Bootloader 采用 UART1 作為 IAP 的通訊接口,以 Ymodem 協議進行文件的傳輸。APP 程序通過 SYSTICK 定時器計時,并通過中斷的方式每 200ms 對口線 PB09 翻轉一次,驅動 LED1 閃爍。
2
Bootloader 程序設計
![poYBAGLOYUKAOAGDAAEzpeCU1qY977.jpg](https://file.elecfans.com/web2/M00/52/7A/poYBAGLOYUKAOAGDAAEzpeCU1qY977.jpg)
2.1參考代碼
![pYYBAGLOYUKAVYqAAAO0ZQvd4SY485.jpg](https://file.elecfans.com/web2/M00/53/16/pYYBAGLOYUKAVYqAAAO0ZQvd4SY485.jpg)
2.2程序編譯
以 MDK-ARM 為例,編譯時注意如下選項:
1. 設 置 Bootloader 程 序 的 起 始 地 址 和 占 用 ROM(FLASH) 空 間 的 大 小, 本 例 中 Bootloader 從 地 址 0x00000000 處執行,占用 7.46Kbyte 的空間,故分配 8Kbyte(size=0x2000)的 FLASH 空間保留給 bootloader。如下圖:
![pYYBAGLOYUKAOtpLAAKF0D-R1Ng999.jpg](https://file.elecfans.com/web2/M00/53/16/pYYBAGLOYUKAOtpLAAKF0D-R1Ng999.jpg)
2. 鏈接時,使用 IDE 的對話框配置,如下圖:
![pYYBAGLOYUKANeiFAAJ8a1Ti9YA549.jpg](https://file.elecfans.com/web2/M00/53/16/pYYBAGLOYUKANeiFAAJ8a1Ti9YA549.jpg)
3
APP 程序設計
APP 程序可以先按正常程序的設計流程進行設計和調試,等調試測試通過后,需要進行如下的修改:
1. 在對系統初始化時,修改中斷向量表的偏移地址
如下圖將 VECT_TAB_OFFSET 修改為 0x00002000,這個偏移量就是用戶的程序準備在 FLASH 中存放 的地址,本例設置為 0x00002000。這樣用戶程序的中斷向量表就被重定位到 0x00002000 處,與 ARM? Cortex?-M0+ 內核默認的中斷向量表地址 0x00000000 相區分。
![poYBAGLOYUKAXkIiAAREwL_-E4s168.jpg](https://file.elecfans.com/web2/M00/52/7A/poYBAGLOYUKAXkIiAAREwL_-E4s168.jpg)
2. 修改編譯配置
如下圖,START 填入的值,即為 APP 程序在 FLASH 中存放的起始地址,也是中斷向量表需要偏移的位置。
![poYBAGLOYUGANG7TAAPYVHqlDdE972.jpg](https://file.elecfans.com/web2/M00/52/7A/poYBAGLOYUGANG7TAAPYVHqlDdE972.jpg)
3. 鏈接時,使用 IDE 的對話框配置,如下圖:
![poYBAGLOYUKAftUDAAL4YZnk8ik402.jpg](https://file.elecfans.com/web2/M00/52/7A/poYBAGLOYUKAftUDAAL4YZnk8ik402.jpg)
4
演示
上 位 機 采 用 Windows 的 超 級 終 端, 設 置 串 口 波 特 率 為 115200bps,8 位 數 據 位,1 位 停 止 位。下 位 機 CW32F030C8T6 StarKit 復位后,按下 KEY1 后,超級終端將有如下顯示:
![pYYBAGLOYUKAfgKYAAERWANtxd8577.jpg](https://file.elecfans.com/web2/M00/53/16/pYYBAGLOYUKAfgKYAAERWANtxd8577.jpg)
屏幕不斷顯示字符“C”,提示下位機準備接受文件。選擇“傳送”-“發送文件”,如下圖:
![poYBAGLOYUKAZTLiAAGuifTIeME175.jpg](https://file.elecfans.com/web2/M00/52/7A/poYBAGLOYUKAZTLiAAGuifTIeME175.jpg)
在出現的對話框中選取用戶的 APP 文件,并將協議選擇為“Ymodem”,并點擊“發送”,如下圖:
![pYYBAGLOYUKAKB4VAAGdFA6pSto478.jpg](https://file.elecfans.com/web2/M00/53/16/pYYBAGLOYUKAKB4VAAGdFA6pSto478.jpg)
程序傳輸完成后,屏幕將有如下提示:
![pYYBAGLOYUKARpGGAAH4LZziwA8618.jpg](https://file.elecfans.com/web2/M00/53/16/pYYBAGLOYUKARpGGAAH4LZziwA8618.jpg)
此時,CW32F030C8T6 StarKit 板上的 LED1 將以 200ms 的間隔閃爍,說明用戶程序已正常運行。
-
微控制器
+關注
關注
48文章
7651瀏覽量
152124 -
單片機
+關注
關注
6043文章
44621瀏覽量
638625 -
mcu
+關注
關注
146文章
17324瀏覽量
352662 -
IAP
+關注
關注
2文章
164瀏覽量
24393
發布評論請先 登錄
相關推薦
基于CW32直流電機PID學習套件介紹
![基于<b class='flag-5'>CW</b>32直流電機PID學習套件介紹](https://file1.elecfans.com//web2/M00/FD/80/wKgaomaU182AFFBPAACiyt7Heeo06.webp)
武漢芯源半導體CW32F030K8T7在即熱式熱水器的應用介紹
武漢芯源半導體CW32F030系列單片機為即熱式熱水器的智能化提供理想選擇
![武漢芯源半導體<b class='flag-5'>CW32F030</b>系列單片機為即熱式熱水器的智能化提供理想選擇](https://file1.elecfans.com/web2/M00/EB/E7/wKgZomZgLiOAYIhHAAAtSEDNjyo003.png)
使用通用串口模塊下載CW32F030芯片的方法
![使用通用串口模塊下載<b class='flag-5'>CW32F030</b>芯片的方法](https://file1.elecfans.com//web2/M00/EB/92/wKgaomZZmMKAdR6MAABF1KgnUWY08.webp)
評論