STM32
直播中

陈游斗

7年用户 1133经验值
擅长:控制/MCU
私信 关注
[问答]

怎样通过以太网+LWIP协议栈实现远程升级stm32f407开发板呢

LAN8720与DP83848有哪些区别?
怎样通过以太网+LWIP协议栈实现远程升级STM32f407开发板呢?

回帖(1)

蔡婷

2021-10-21 15:06:34
  使用工具
  STM32F407ZGT6正点原子探索者开发板
  STM32CubeMX:版本V4.27.0
  STM32CubeF4 Firmware Package V1.21.0 / 23-February-2018
  官方例程:D:STM32CubeRepositorySTM32Cube_FW_F4_V1.21.0ProjectsSTM324xG_EVALApplicationsLwIPLwIP_IAP
  项目中用到了远程升级(IAP)功能,即通过以太网设备+LWIP协议栈实现远程升级stm32f407开发板。官方提供的例程中,开发板使用的PHY设备是DP83848,与实验室开发板使用的LAN8720有着一些不同,DP83848是MII接口的,而LAN8720使用的是RMII接口,这两种协议的具体区别读者可以参考其他资料。
  STM32F407开发板的HTTP模式IAP远程升级之官方例程移植
  STM32F407开发板的HTTP模式IAP远程升级之新建模板
  准备工作
  一。新建以太网工程模板
  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 zorbrn”);
  }
  /******************************************************************************
  * 描述 : 应用程序
  * 参数 : 无
  * 返回 : 无
  ******************************************************************************/
  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通,至此模板搭建完成
  
  
举报

更多回帖

发帖
×
20
完善资料,
赚取积分