STM32F407开发板的HTTP模式IAP远程升级之新建模板

版权声明:本文为原创文章,转载请注明出处 https://blog.csdn.net/wbdxz/article/details/82857641

使用工具

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

参考资料:

猜你喜欢

转载自blog.csdn.net/wbdxz/article/details/82857641