匿名
未登录
登录
丢石头百科
搜索
查看“STM32CubeMX系列教程27:ETH”的源代码
来自丢石头百科
名字空间
页面
讨论
更多
更多
页面选项
查看
查看源代码
历史
←
STM32CubeMX系列教程27:ETH
因为以下原因,您没有权限编辑本页:
您所请求的操作仅限于该用户组的用户使用:
用户
您可以查看与复制此页面的源代码。
在看本教程之前建议先看ST官方关于ETH的培训视频。本章不打算详细讲解LwIP协议栈, 本章只是介绍如何通过STM32CubeMX软件生成初始化程序,并移植官方固件库里面的示例程序。 http://www.stmcu.com.cn/videos.html 本章程序在LCD滚动显示字符工程的基础上修改,<b style="font-size: 14.4px; line-height: 1.5;"><b style="font-size: 14px;">复制工程修改文件夹名。<b><b style="font-size: 14px;">打开</b></b></b></b><b style="font-size: 14.4px; line-height: 1.5;"><b style="font-size: 14px;"><b><b style="font-size: 14px;">STM32cubeMX</b></b></b></b><b style="font-size: 14.4px; line-height: 1.5;"><b style="font-size: 14px;"><b><b style="font-size: 14px;">的工程文件重新配置,ETH选择RMII模式,使能LWIP。</b></b></b></b> <b style="font-size: 14.4px; line-height: 1.5;"><b style="font-size: 14px;"><b><b style="font-size: 14px;"> </b></b></b></b> [[File:175147rolilf0kloksk0kw.png]] ETH 参数不作修改为默认设置。 [[File:175147gm83pm53mj45m921.png]] [[File:175147fffyxxxh75rff87k.png]] LWIP General配置不作修改,为默认配置。 [[File:175148leee4z73rj8c87n7.png]] All LwIP Options中,TCP_QUEUE_OOSEQ选项为Disabled,否则编译会提示错误。 [[File:175148l7zqg7vrqm7g7vxi.png]] 开启ETH中断,优先级为默认。 [[File:175149t2uojwzlo2oljoh7.png]] <b style="font-family: 微软雅黑; font-size: 14px;"><b style="font-size: 14px;">生成报告以及初始化代码,编译程序。应用层多出下面三个文件。</b></b> [[File:175149yp3p8fw75di72wl1.png]] 其中ethernetif.c文件包括ETH管脚初始化,寄存器参数初始化,以及底层驱动接口等函数。 lwip.c为LWIP协议栈初始化文件,通过DHCP获取IP或者设置静态IP。本实验中DHCP选择设置为使能,故有路由器动态分配IP地址。 [[File:175149x63vg26iiagige8b.png]] 下载一下应用程序解压并添加到工作目录中。这些文件移植ST官方固件库示例程序。 STM32Cube_FW_F7_V1.3.0\Projects\STM32756G_EVAL\Applications\LwIP\LwIP_HTTP_Server_Raw <a class="attach" href="portal.php?mod=attachment&id=659" target="_blank">LwIP_HTTP_Server_Raw.zip [[File:175315mww9njc9w9cc3bcn.png]] 文件中包含这些文件,其中fsdata文件为网站的数据文件,不需添加到工程中, fs.c文件类似一个文件系统,包含打开文件,读取文件等操作,读取fsdata中的数据。 httpd.c为静态网页处理程序文件。 httpd_cgi_ssi.c为动态网页处理程序文件。 在main函数中添加初始化程序,初始化LCD,HTTP。 <syntaxhighlight lang="python"> /* 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 */</syntaxhighlight> 其中User_notification()输出当前网络接口配置的函数。判断是否通过DHCP获取IP地址。如果不能动态IP地址则设置静态IP。在mxconstants.h常量头文件中添加如下宏定义设置IP地址以及网关等。 <syntaxhighlight lang="python"> /* 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 */</syntaxhighlight> <syntaxhighlight lang="python"> </syntaxhighlight> 在while循环中添加LWIP处理任务函数以及DHCP周期处理函数。 <syntaxhighlight lang="python"> <syntaxhighlight lang="python"> /* 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 */ </syntaxhighlight> </syntaxhighlight>最后导入外部变量以及添加头文件。 <syntaxhighlight lang="python"> <code style="font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace !important; font-size: 1em !important; color: rgb(0, 130, 0) !important;">/* USER CODE BEGIN PV */</syntaxhighlight> <syntaxhighlight lang="python"> /* Private variables ---------------------------------------------------------*/</syntaxhighlight> <syntaxhighlight lang="python"> extern</syntaxhighlight> <syntaxhighlight lang="python"> struct</syntaxhighlight> <syntaxhighlight lang="python"> netif gnetif;</syntaxhighlight> <syntaxhighlight lang="python"> /* USER CODE END PV */</syntaxhighlight> <syntaxhighlight lang="python"> /* USER CODE BEGIN Includes */</syntaxhighlight> <syntaxhighlight lang="python"> #include "stm32746g_sdram.h"</syntaxhighlight> <syntaxhighlight lang="python"> #include "stm32746g_LCD.h"</syntaxhighlight> <syntaxhighlight lang="python"> #include "lcd_log.h"</syntaxhighlight> <syntaxhighlight lang="python"> #include "app_ethernet.h"</syntaxhighlight> <syntaxhighlight lang="python"> #include "httpd.h"</syntaxhighlight> <syntaxhighlight lang="python"> /* USER CODE END Includes */</syntaxhighlight> 最后编译程序,并下载到开发板,将DP83848 Ethernet Board接入Open746I-C的ETH接口并接上网线,网线另一端连接到和电脑统一局域网,或者和电脑直接相连。打开LCD上显示的IP地址。如下为显示页面:</code> <syntaxhighlight lang="python"> </syntaxhighlight> [[File:175150aett555rjcrteyfr.png]] <syntaxhighlight lang="python"> </syntaxhighlight>
返回至
STM32CubeMX系列教程27:ETH
。
导航
导航
首页
最近更改
随机页面
MediaWiki帮助
首页
首页
树莓派
主机
配件包
外壳
键鼠
电源
扩展板
显示屏
墨水屏
摄像模块
通信模块
继电器
电机驱动板
游戏机
产品分类
树莓派
Arduino
micro:bit
STM32
Espressif
WiFi模块
蓝牙模块
无线模块
LoRa模块
4G模块
GSM
GPRS
以太网
导航模块
北斗卫星
GPS
LCD
墨水屏
OLED
摄像头
USB模块
串口模块
RS232
RS485
CAN
传感器
温度模块
湿度模块
气压模块
继电器
电机模块
指纹模块
电平转换
音频模块
编程器
Wiki工具
Wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志