当前位置:首页 > 技术 > Cortex-M3 > 正文内容

STM32CubeMX系列教程27:ETH

watrt3年前 (2017-12-17)Cortex-M35440
在看本教程之前建议先看ST官方关于ETH的培训视频。本章不打算详细讲解LwIP协议栈,
本章只是介绍如何通过STM32CubeMX软件生成初始化程序,并移植官方固件库里面的示例程序。

        本章程序在LCD滚动显示字符工程的基础上修改,复制工程修改文件夹名。打开STM32cubeMX的工程文件重新配置,ETH选择RMII模式,使能LWIP。




ETH 参数不作修改为默认设置。





LWIP General配置不作修改,为默认配置。



All LwIP Options中,TCP_QUEUE_OOSEQ选项为Disabled,否则编译会提示错误。



开启ETH中断,优先级为默认。



生成报告以及初始化代码,编译程序。应用层多出下面三个文件。



其中ethernetif.c文件包括ETH管脚初始化,寄存器参数初始化,以及底层驱动接口等函数。
lwip.c为LWIP协议栈初始化文件,通过DHCP获取IP或者设置静态IP。本实验中DHCP选择设置为使能,故有路由器动态分配IP地址。



下载一下应用程序解压并添加到工作目录中。这些文件移植ST官方固件库示例程序。
STM32Cube_FW_F7_V1.3.0\Projects\STM32756G_EVAL\Applications\LwIP\LwIP_HTTP_Server_Raw



文件中包含这些文件,其中fsdata文件为网站的数据文件,不需添加到工程中,
fs.c文件类似一个文件系统,包含打开文件,读取文件等操作,读取fsdata中的数据。
httpd.c为静态网页处理程序文件。
httpd_cgi_ssi.c为动态网页处理程序文件。

在main函数中添加初始化程序,初始化LCD,HTTP。

  /* USER CODE BEGIN 2 */
    /* Initialize the SDRAM */
#ifdef USE_LCD
 
  /* Initialize the LCD */
  BSP_LCD_Init();
   
  /* Clear the LCD Background layer */
  BSP_LCD_SetLayerVisible(1,DISABLE);
   
  /* Set LCD Foreground Layer  */
  BSP_LCD_SelectLayer(0);
   
  BSP_LCD_SetFont(&LCD_DEFAULT_FONT);
   
  /* Initialize LCD Log module */
  LCD_LOG_Init();
   
  /* Show Header and Footer texts */
  LCD_LOG_SetHeader((uint8_t *)"Webserver Application Raw API");
  LCD_LOG_SetFooter((uint8_t *)"WaveShare Open7XXI-C board");
   
  LCD_UsrLog ("  State: Ethernet Initialization ...\n");
 
#endif
     
  /* Http webserver Init */
  httpd_init();
 
  /* Notify user about the netwoek interface config */
  User_notification(&gnetif);
  /* USER CODE END 2 */

其中User_notification()输出当前网络接口配置的函数。判断是否通过DHCP获取IP地址。如果不能动态IP地址则设置静态IP。在mxconstants.h常量头文件中添加如下宏定义设置IP地址以及网关等。

/* USER CODE BEGIN Private defines */
#define USE_LCD        /* enable LCD  */  
#define USE_DHCP       /* enable DHCP, if disabled static address is used */
  
/*Static IP ADDRESS: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */
#define IP_ADDR0   (uint8_t) 192
#define IP_ADDR1   (uint8_t) 168
#define IP_ADDR2   (uint8_t) 1
#define IP_ADDR3   (uint8_t) 110
    
/*NETMASK*/
#define NETMASK_ADDR0   (uint8_t) 255
#define NETMASK_ADDR1   (uint8_t) 255
#define NETMASK_ADDR2   (uint8_t) 255
#define NETMASK_ADDR3   (uint8_t) 0
 
/*Gateway Address*/
#define GW_ADDR0   (uint8_t) 192
#define GW_ADDR1   (uint8_t) 168
#define GW_ADDR2   (uint8_t) 1
#define GW_ADDR3   (uint8_t) 1 
/* USER CODE END Private defines */

在while循环中添加LWIP处理任务函数以及DHCP周期处理函数。

/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
  MX_LWIP_Process();
  #ifdef USE_DHCP
  /* handle periodic timers for DHCP */
  DHCP_Periodic_Handle(&gnetif);
      #endif 
}
/* USER CODE END 3 */

最后导入外部变量以及添加头文件。

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
extern struct netif gnetif;
/* USER CODE END PV */

/* USER CODE BEGIN Includes */
#include "stm32746g_sdram.h"
#include "stm32746g_LCD.h"
#include "lcd_log.h"
#include "app_ethernet.h"
#include "httpd.h"
/* USER CODE END Includes */



最后编译程序,并下载到开发板,将DP83848 Ethernet Board接入Open746I-C的ETH接口并接上网线,网线另一端连接到和电脑统一局域网,或者和电脑直接相连。打开LCD上显示的IP地址。如下为显示页面:





标签: stm32C++
分享给朋友:

相关文章

STM32CubeMX系列教程24:STemWim移植

STM32CubeMX系列教程24:STemWim移植

摘要:本章教程带领大家移植StmemWin 5.22到STM32的LDTC接口控制的RGB接口屏幕。(注:本章只针对STM32芯片F7,F4系列带LDTC接口控制的RGB屏幕,对F1系列通过FMC控制的带控制器的屏幕不适用)一、STemWin 简介        emWin是segger公司出一种高效的而图形用户界面,是我们能够摆脱处理器和显示控制器而更专注于GUI的设计。uCGUI是segger公司授权Micrum公司推出的,uCOS操作系统也是这个公司...

STM32CubeMX系列教程3:基本定时器

STM32CubeMX系列教程3:基本定时器

这一章我们在前一章GPIO的工程修改。复制GPIO的工程,修改文件夹名。点击打开STM32cubeMX的工程文件重新配置。开启定时器TIM3,选择内部时钟。定时器就相当于单片机的闹钟,下面我们以基本定时器为例简单介绍一下定时器。从上图我们可以看到,基本定时器主要由下面三个寄存器组成。计数器寄存器 (TIMx_CNT)预分频器寄存器 (TIMx_PSC)自动重载寄存器 (TIMx_ARR)计数器寄存器 (TIMx_CNT)存储的是当前的计数值。预分频器&nb...

STM32CubeMX系列教程9:内部集成电路(I2C)

STM32CubeMX系列教程9:内部集成电路(I2C)

1.I2C总线简介        I2C(Inter-Integrated Circuit ,内部集成电路)总线是一种由飞利浦Philip公司开发的串行总线。是两条串行的总线,它由一根数据线(SDA)和一根 时钟线(SDL)组成。I2C总线上可以接多个I2C设备,每个器件都有一个唯一的地址识别。同一时间只能有一个主设备,其他为从设备。通常MCU作为主设备控制,外设作为从设备。2.I2C硬件电路    &nb...

STM32CubeMX系列教程1:GPIO

STM32CubeMX系列教程1:GPIO

打开STM32CubeMX新建工程,选择STMF746IGT6芯片。选择外部高速晶振(HSE).根据Open746I-C开发板原理图(原理图可在微雪电子网站上下载),选择按键和LED引脚PA0,PG2,PG3,PD4,PD5,PD11为按键输入管脚,选择GPIO_INPUT模式。PB6,PB7,PH4,PI8为LED输出控制管脚,选择GPIO_OUTPUT模式。点击Clock Configuration配置系统时钟为216M最高速度。点击Configuration->GPIO配置管脚。五向...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。