STM32F407開發板的HTTP模式IAP遠端升級之新建模板
使用工具
- STM32F407ZGT6正點原子探索者開發板
- STM32CubeMX:版本V4.27.0
- STM32CubeF4 Firmware Package V1.21.0 / 23-February-2018
- 官方例程:D:\STM32Cube\Repository\STM32Cube_FW_F4_V1.21.0\Projects\STM324xG_EVAL\Applications\LwIP\LwIP_IAP
專案中用到了遠端升級(IAP)功能,即通過乙太網裝置+LWIP協議棧實現遠端升級stm32f407開發板。官方提供的例程中,開發板使用的PHY裝置是DP83848,與實驗室開發板使用的LAN8720有著一些不同,DP83848是MII介面的,而LAN8720使用的是RMII介面,這兩種協議的具體區別讀者可以參考其他資料。
準備工作
一.新建乙太網工程模板
1.開啟STM32CubeMX,點選New Project
2.選擇STM32F407ZG晶片,雙擊即可開啟配置介面
3.Pinout配置
選擇PHY介面
選擇LWIP
選擇外部晶振
選擇燒寫方式和時基
選擇串列埠1
新增BUTTON_WAKEUP按鈕引腳(進入升級模式時使用)
根據LAN8720原理圖修改下列引腳
ETH_TX_EN -> PG11
ETH_TXD0 -> PG13
ETH_TXD1 -> PG14
PD3配置成GPIO輸出(LAN8720A的硬體復位引腳)
4.Clock Configuratoin
出現下圖提示,點選Yes即可
修改一下紅框所示的引數
3.Configuration配置
串列埠1配置
乙太網配置
LWIP配置
取消DHCP,使用靜態IP,方便測試
GPIO設定
PD3為PHY輸入引腳,設定高,LAN8720正常工作
PA0設定,修改User Label,作為進入升級模式的判定按鍵引腳(輸入模式)
5.生成工程
每個外設生成單獨的配置檔案
二.除錯串列埠輸出
以下程式碼加入到usart.c中
/******************************************************************************
* 描述 : 重定向c庫函式printf到串列埠
* 引數 : 無
* 返回 : HAL_OK = 0x00U
HAL_ERROR = 0x01U
HAL_BUSY = 0x02U
HAL_TIMEOUT = 0x03U
******************************************************************************/
int fputc(int ch, FILE *f)
{
return HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
}
三.建立app檔案
在工程資料夾下新建一個名為user的資料夾,在user資料夾下新建一個名為app的資料夾
在keil工程中新建一個名為user/app的group(如果出現keil卡死的情況,就先建立一個名為user的group,然後再將其改成user/app即可)
新建app.c檔案,儲存到資料夾user/app資料夾下,並將app.c新增到user/app的group中
app.c如下
/**
*****************************************************************************
* @file app.c
* @author Zorb
* @version V1.0.0
* @date 2018-09-04
* @brief 應用的實現
*****************************************************************************
* @history
*
* 1. Date:2018-09-04
* Author:Zorb
* Modification:建立檔案
*
*****************************************************************************
*/
#include "app.h"
/******************************************************************************
* 描述 : 應用的初始化
* 引數 : 無
* 返回 : 無
******************************************************************************/
void App_init(void)
{
printf("hello zorb\r\n");
}
/******************************************************************************
* 描述 : 應用程式
* 引數 : 無
* 返回 : 無
******************************************************************************/
void App_process(void)
{
}
/******************************** END OF FILE ********************************/
新建app.h,儲存到user/app資料夾中,並將其路徑新增到keil的include路徑中
app.h如下
/**
*****************************************************************************
* @file app.h
* @author Zorb
* @version V1.0.0
* @date 2018-09-04
* @brief 應用的標頭檔案
*****************************************************************************
* @history
*
* 1. Date:2018-09-04
* Author:Zorb
* Modification:建立檔案
*
*****************************************************************************
*/
#ifndef __APP_H__
#define __APP_H__
#ifdef __cplusplus
extern "C" {
#endif
#include "stm32f4xx_hal.h"
/* 應用的初始化 */
void App_init(void);
/* 應用程式 */
void App_process(void);
#ifdef __cplusplus
}
#endif
#endif /* __APP_H__ */
/******************************** END OF FILE ********************************/
在main.c中新增一下程式碼
此時將程式下載至開發板,執行ping命令,成功ping通,至此模板搭建完成
參考資料: