• stm32+lwip(一):使用STM32CubeMX生成项目


    我是卓波,很高兴你来看我的博客。

    系列文章:

    stm32+lwip(一):使用STM32CubeMX生成项目

    stm32+lwip(二):UDP测试

    stm32+lwip(三):TCP测试

    stm32+lwip(四):网页服务器测试

    stm32+lwip(五):以太网帧发送测试

    STM32CubeMX是一个图形化的配置工具,根据用户配置可以生成相应的代码,可以帮助开发人员摆脱部分底层开发的烦恼。

    一、工程配置

    本项目使用stm32407开发板,phy芯片为LAN8720A,硬件原理图如下:

     

    根据原理图,STM32CubeMX配置如下:

     

    1:选择外部晶振

     

    2:选择烧写方式和时基

     

    3:选择调试串口

     

    4:选择PHY接口

     

    5:选择LWIP

     

    6:配置时钟

     

    7:调试串口配置

     

    8:以太网配置

    PHY地址根据PHYAD0管脚的配置决定:

     

     

    PHY芯片设置,需根据LAN8720A的芯片手册来配置:

     

    9:LWIP配置

    为了方便调试,使用静态IP,同时使能UDPTCP模块

     

    10:生成工程

    将工程使用的堆栈调大点

     

    每个外设单独形成文件

     

    二、调试串口输出

    在生成的uart.c文件中增加以下代码:

     1 /******************************************************************************
     2  * 描述  : 重定向c库函数printf到串口
     3  * 参数  : 无
     4  * 返回  : HAL_OK       = 0x00U
     5            HAL_ERROR    = 0x01U
     6            HAL_BUSY     = 0x02U
     7            HAL_TIMEOUT  = 0x03U
     8 ******************************************************************************/
     9 int fputc(int ch, FILE *f)
    10 {
    11     return HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
    12 }

    然后就可以使用printf函数将调试信息通过串口打印出来。

    三、PHY芯片复位

    在以太网初始化后,增加PHY芯片复位代码

     

    1 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_RESET);
    2 HAL_Delay(50);
    3 HAL_GPIO_WritePin(ETH_RESET_GPIO_Port, ETH_RESET_Pin, GPIO_PIN_SET); 

    四、创建app文件

     1 /**
     2   *****************************************************************************
     3   * @file    app.c
     4   * @author  Zorb
     5   * @version V1.0.0
     6   * @date    2018-09-04
     7   * @brief   应用的实现
     8   *****************************************************************************
     9   * @history
    10   *
    11   * 1. Date:2018-09-04
    12   *    Author:Zorb
    13   *    Modification:建立文件
    14   *
    15   *****************************************************************************
    16   */
    17 
    18 #include "app.h"
    19 
    20 /******************************************************************************
    21  * 描述  : 应用的初始化
    22  * 参数  : 无
    23  * 返回  : 无
    24 ******************************************************************************/
    25 void App_init(void)
    26 {
    27     printf("hello zorb
    ");
    28 }
    29 
    30 /******************************************************************************
    31  * 描述  : 应用程序
    32  * 参数  : 无
    33  * 返回  : 无
    34 ******************************************************************************/
    35 void App_process(void)
    36 {
    37 
    38 }
    39 
    40 /******************************** END OF FILE ********************************/

    main.c中增加以下代码

     

    MX_LWIP_Process()的功能说明: 

    /**
     * ----------------------------------------------------------------------
     * Function given to help user to continue LwIP Initialization
     * Up to user to complete or change this function ...
     * Up to user to call this function in main.c in while (1) of main(void) 
     *-----------------------------------------------------------------------
     * Read a received packet from the Ethernet buffers 
     * Send it to the lwIP stack for handling
     * Handle timeouts if LWIP_TIMERS is set and without RTOS
     * Handle the llink status if LWIP_NETIF_LINK_CALLBACK is set and without RTOS 
     */

    添加好app文件后,后续app初始化代码写在App_init()里边,app应用代码写在App_process()

    需要注意的是,本工程没有使用任务系统,因此App_process()里边代码不能阻塞。

    五、ping测试

    经过上面的工作,基于stm32lwip工程已经搭建完成,在电脑上面ping一下:

     

    现在已经ping通了,撒花。

    六、最后

    STM32CubeMX真的很方便,简简单单配置一下,就可以生成我们想要的工程。减少了开发者对底层驱动开发的时间,让开发者更好地将时间投入到应用开发。

    github:https://github.com/54zorb/stm32-lwip

    版权所有,转载请打赏哟

    如果你喜欢我的文章,可以通过微信扫一扫给我打赏哟

  • 相关阅读:
    过程作为黑箱抽象——《计算机程序的构造和解释》
    过程与它们所产生的计算——《计算机程序的构造和解释》
    重构手法(四)之在对象之间搬移特性
    重构手法(三)之简化条件表达式
    重构手法(二)之简化函数调用
    重构手法(一)之重新组织函数
    代码的坏味道
    泛型算法(二十三)之排列算法
    泛型算法(二十二)之集合操作算法
    泛型算法(二十一)之比较算法
  • 原文地址:https://www.cnblogs.com/54zorb/p/9608066.html
Copyright © 2020-2023  润新知