在看本教程之前建议先看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周期处理函数。
|
MyMX1213: 这个没有用到PA8作为参考时钟,而是用PA1作为参考时钟输出。这个配置的时候已经设置了复用引脚了。 如果要用PA8作为参考时钟,则PA8设设置RCC_MCO。然后在时钟图 ...
MyMX1213: 这个没有用到PA8作为参考时钟,而是用PA1作为参考时钟输出。这个配置的时候已经设置了复用引脚了。 如果要用PA8作为参考时钟,则PA8设设置RCC_MCO。然后在时钟图 ...
我不怕: RMII模式,为什么上述文档中没有讲到PA8引脚的相关配置?