STM32F407開發板的HTTP模式IAP遠端升級之官方例程移植
阿新 • • 發佈:2018-12-12
關於遠端升級的模板建立,可以參考下面的博文
接上文為止,已經建立好了一個可以ping通的乙太網工程模板,接下來進行官方例程LWIP_IAP中的iap_http模式的移植
官方例程位置
- D:\STM32Cube\Repository\STM32Cube_FW_F4_V1.21.0\Projects\STM324xG_EVAL\Applications\LwIP\LwIP_IAP
一.移植步驟
1.將官方例程中的Src資料夾下的flash_if.c,fsdata.c,httpserver.c複製到我們自己建立的工程資料夾的Src資料夾下
將flash_if.c和httpserver.c新增到keil工程中的Gourps中
2.將官方例程中的Inc資料夾下的flash_if.h,fsdata.h,httpserver.h複製到我們自己建立的工程資料夾的Inc資料夾下
3.在app.c中新增如下程式碼
4.此時編譯,出現了以下錯誤
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'd:\Keil_v5\ARM\ARMCC\Bin' Build target 'teach_http_iap' compiling flash_if.c... ..\Src\flash_if.c(57): error: #20: identifier "USER_FLASH_LAST_PAGE_ADDRESS" is undefined if (FlashAddress <= (uint32_t) USER_FLASH_LAST_PAGE_ADDRESS) ..\Src\flash_if.c(91): error: #20: identifier "USER_FLASH_END_ADDRESS" is undefined for (i = 0; (i < DataLength) && (*FlashAddress <= (USER_FLASH_END_ADDRESS-4)); i++) ..\Src\flash_if.c: 0 warnings, 2 errors compiling httpserver.c... ..\Src\httpserver.c(40): error: #5: cannot open source input file "lcd_log.h": No such file or directory #include "lcd_log.h" ..\Src\httpserver.c: 0 warnings, 1 error compiling app.c... ..\user\app\app.c(28): warning: #223-D: function "IAP_httpd_init" declared implicitly IAP_httpd_init(); ..\user\app\app.c: 1 warning, 0 errors "teach_http_iap\teach_http_iap.axf" - 3 Error(s), 1 Warning(s). Target not created. Build Time Elapsed: 00:00:02
解決方法:
1.在flash_if.h中新增
//起始地址
#define USER_FLASH_FIRST_PAGE_ADDRESS 0x08020000 /* Only as example see comment */
#define USER_FLASH_LAST_PAGE_ADDRESS 0x080E0000
//結束地址
#define USER_FLASH_END_ADDRESS FLASH_END
2.註釋掉httpserver.c中的如下程式碼
再次編譯,出現錯誤
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'd:\Keil_v5\ARM\ARMCC\Bin' Build target 'teach_http_iap' compiling httpserver.c... linking... teach_http_iap\teach_http_iap.axf: Error: L6218E: Undefined symbol IAP_httpd_init (referred from app.o). Not enough information to list image symbols. Not enough information to list load addresses in the image map. Finished: 2 information, 0 warning and 1 error messages. "teach_http_iap\teach_http_iap.axf" - 1 Error(s), 0 Warning(s). Target not created. Build Time Elapsed: 00:00:02
解決方法:在main.h的76行新增如下程式碼
#define USE_IAP_HTTP /* enable IAP using HTTP */
再次編譯,出現錯誤
*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'd:\Keil_v5\ARM\ARMCC\Bin'
Build target 'teach_http_iap'
compiling httpserver.c...
..\Src\httpserver.c(210): error: #20: identifier "LOGIN_SIZE" is undefined
char *data, *ptr, filename[40], login[LOGIN_SIZE];
..\Src\httpserver.c(273): error: #20: identifier "USERID" is undefined
sprintf((char *)login,"username=%s&password=%s",USERID,PASSWORD);
..\Src\httpserver.c(273): error: #20: identifier "PASSWORD" is undefined
sprintf((char *)login,"username=%s&password=%s",USERID,PASSWORD);
..\Src\httpserver.c(210): warning: #550-D: variable "filename" was set but never used
char *data, *ptr, filename[40], login[LOGIN_SIZE];
..\Src\httpserver.c: 1 warning, 3 errors
"teach_http_iap\teach_http_iap.axf" - 3 Error(s), 1 Warning(s).
Target not created.
Build Time Elapsed: 00:00:02
解決方法:
在main.h的第77行新增如下程式碼
#define USERID "user"
#define PASSWORD "stm32"
#define LOGIN_SIZE (15+ sizeof(USERID) + sizeof(PASSWORD))
在app.c的第19行新增
#include "httpserver.h"
再次編譯執行,沒有錯誤。將程式下載到開發板,斷電重啟(如果在下載時選擇Reset and run,download to flash則不需要)
二.程式測試
開啟IE瀏覽器(必須使用IE),輸入192.168.1.120,出現下面的頁面
輸入使用者名稱user,密碼stm32,點選login
上傳bin檔案即可升級成功。
按鍵升級還未寫在博文中,有空再寫