1. 程式人生 > >STM32F407開發板的HTTP模式IAP遠端升級之新建模板

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通,至此模板搭建完成

參考資料: