STM32 IAP+Ymodem功能實現(參考官方代碼)


IAP:在線升級代碼 ,通俗的講就是通過USART,IIC,或者SPI,USB等等,方式,在程序中升級程序,一般用在遠程升級,或者是在PCB板子都安裝到模具之后還需要升級代碼,這樣我們就需要,通過IAP的方式來升級。

軟件代碼托管碼雲地址:https://gitee.com/zyzp/stm32UartIAP

開發環境:MDK-V5,stm32cubeMx,SecureCRT8

硬件平台:stm32f103系列最小系統板,帶有swd仿真接口和串口1

1、從st的官方獲取到IAP的工程,http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32cube-expansion-packages/x-cube-iap-usart.html

一路拉到最下面

image

下不了怎么辦,自己想辦法,需要填姓名郵箱等等,完事,人家會給你的郵箱發一條郵件,里面是下載鏈接。點開后多等一會,畢竟是國外的網站,別等不及,連着重復的去點那個按鈕,沒用的,如果還是下載不了,那就找我吧,我這兒有下載好的,留言或者郵件我都會回你的。

2、下載完了,解壓之后點開里面有三個工程分別是l073,l469,f10的,根據需求自己選合適的,f10X的點開直接編譯就可以,但是l073,和l469的點開發現沒有庫文件,我的天啊,這怎么辦啊,哈哈,沒關系了,接着向下看吧,

3、我們現在打開stm32cubeMx,根據自己的需求生成一個帶串口和CRC的工程,沒有CRC直接帶串口就可以了,需要注意的幾個地方,時鍾配置,一定要根據自己實際的情況去配置時鍾,串口的位數,如果使用了校驗位,一定要在數據位多加1,8bit的數據位,1bit的校驗位,一定要設置9bit的數據位,唉,到處都是坑,好了,可以導出工程了,導出來之后,測試一下串口功能是不是有效的,main函數里面自己寫吧,實在不會,可以找我的。。。嘿嘿,完事之后備份一份這個代碼,一會app代碼也在這個里面寫。

4、好了,我們現在有一個屬於自己的帶有串口的工程了,接着打開之前從官方下載的工程,把里面的Inc和Src文件夾拷貝過來,拷貝到我們的自己工程的路徑下面,本來有的文件選擇跳過就可以,一定不要替換。

5、接下來給工程里面添加文件,把該添加的都添加進去,主要有common.c,ymodem.c,menu.c,flash_if.c,應該是就這四個文件了,好了編譯試試,哇,一大堆錯誤,別着急咱們一點一點的改,首先要改的是串口的句柄名稱,和crc的句柄名稱,可以改成統一的就可以,隨便,我配合你你配合我的,無所謂了,改完之后在common.h里面添加你的usart.h有文件,隨便你怎么,看你自己怎么添加咯,最后一點參考官方代碼修改你的main文件,順便把該有的錯誤都改了,完事下到MCU里面

6、現在我們來看看app代碼怎么寫,打開我們之前備份好的代碼,修改的幾個地方,看下面的截圖image

MDK里面點開魔術棒,修改Start的地址為你在之前的IAP代碼里面寫的地址,Size的大小是,你的全部地址,減去IAP代碼占有的大小。然后在main函數里面添加下面一句代碼,設置中斷的向量的地址,

  1. SCB->VTOR = FLASH_BASE | 0x4000; 

0x4000是你的IAP程序的大小

MDK里面如下設置,生成bin文件

image

7、生成之后,用超級終端或者SecureCRT8就可以燒錄了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM