Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
LWIP
NUCLEO-F767ZI
modbustcp
【NUCLEO-F767ZI】RT-Thread lwip的modbus-tcp
发布于 2021-05-31 08:10:10 浏览:1299
订阅该版
[tocm] [RT-Thread 入门学习笔记 - 目录](https://club.rt-thread.org/ask/article/3420.html) [【NUCLEO-F767ZI】RT-Thread 最小系统的搭建](https://club.rt-thread.org/ask/article/2757.html) [【NUCLEO-F767ZI】RT-Thread lwip的modbus-tcp](https://club.rt-thread.org/ask/article/2810.html) ## 前言 - NUCLEO-F767ZI 开发板,基于STM32F767ZI,板子上有以太网口,可以实现网络通信相关的功能 - RT-Thread的网络协议栈基于lwip,TCP、UDP等网络功能,可以快捷的搭建并验证 - RT-Thread有libmodbus软件包,可以实现Modbus主从机功能。 - 本次目标是实现Modbus-TCP从机,也就是TCP服务端。 ## 准备 - NUCLEO-F767ZI 移植RT-Thread最小系统,可以使用RT-Thread的NUCLEO-F767ZI BSP包,快速搭建。 - LWIP的配置使能,使用RT-Thread ENV工具,menuconfig配置  - 只是配置使能了LWIP等网络相关的选项,编译通过,发现没有任何的网络功能,这是因为,底层以太网驱动还需要使能与配置。 - NUCLEO-F767ZI 具备以太网的控制器,STM32的以太网控制器驱动相差不多。可以直接使用RT-Thread BSP包里STM32 默认的`drv_eth.c`。 - 使能`drv_eth.c`,只需要配置或指定以太网的PHY芯片型号即可。发现需要手动添加 `BSP_USING_ETH`  - 在board\Kconfig中,手动添加`BSP_USING_ETH`。 ```c config BSP_USING_ETH select PHY_USING_LAN8720A bool "Enable Ethernet" default n ```  - `scons --target=mdk5`,构建,然后编译,发现没有报错,下载到板子上,验证下功能。 - 首先需要确认板子lwip是否正常初始化,IP配置是手动还是自动,我使用普通的网线(非交叉直连),连接到路由器,所以,如果手动配置,需要保证与电脑的IP地址网段一致。  - 我手动配置静态的IP,不开启DHCP动态IP分配。  - 其实,使能以太网,需要根据硬件,配置相关的引脚,我用的BSP,已经配置好引脚了,在:`stm32f7xx_hal_msp.c`中, ```c /** * @brief ETH MSP Initialization * This function configures the hardware resources used in this example * @param heth: ETH handle pointer * @retval None */ void HAL_ETH_MspInit(ETH_HandleTypeDef* heth) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(heth->Instance==ETH) { /* USER CODE BEGIN ETH_MspInit 0 */ /* USER CODE END ETH_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_ETH_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); /**ETH GPIO Configuration PC1 ------> ETH_MDC PA1 ------> ETH_REF_CLK PA2 ------> ETH_MDIO PA7 ------> ETH_CRS_DV PC4 ------> ETH_RXD0 PC5 ------> ETH_RXD1 PB13 ------> ETH_TXD1 PG11 ------> ETH_TX_EN PG13 ------> ETH_TXD0 */ GPIO_InitStruct.Pin = RMII_MDC_Pin|RMII_RXD0_Pin|RMII_RXD1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); GPIO_InitStruct.Pin = RMII_REF_CLK_Pin|RMII_MDIO_Pin|RMII_CRS_DV_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = RMII_TXD1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(RMII_TXD1_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = RMII_TX_EN_Pin|RMII_TXD0_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF11_ETH; HAL_GPIO_Init(GPIOG, &GPIO_InitStruct); /* USER CODE BEGIN ETH_MspInit 1 */ /* USER CODE END ETH_MspInit 1 */ } } ``` - 编译后下载到板子上,使用ifconfig,查看网卡相关的信息,使用电脑ping开发板,发现ping通了。 - 开发板ping不同电脑,发现需要关闭电脑的【防火墙】  - 开发板ping了一下远程的IP,如【百度】的IP,发现可以ping通,但【域名】没有ping通,怀疑与DNS有关,后面再研究。 - ping通后,TCP/IP功能,基本正常了,接下来,把libmodbus软件包更新下来。   - 注意RT-Thread软件包的使用方法:配置使能后,需要手动更新软件包,使能的只是配置项。软件包代码,需要下载。 - pkgs --update可以更新下载软件包。 - 编译,运行,发现,modbus-tcp功能正常了,注意modbus-tcp的端口号,一般为502,例程里改为了1502,只要一致即可。    - OK,搭建流程初步完成,后面继续深入的研究。 ## 总结 - 虽然没有写什么代码,只是简单的配置,就可以使用lwip、modbus-tcp,不过,还是要认真的研究如何实现的,掌握原理与方法。 - RT-Thread 网络相关的软件包,比较的丰富,实现mqtt等高级的应用,非常的快捷。 - 通过不断的摸索、使用、总结,不断的深入研究物联网技术实现。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
张世争
学以致用
文章
131
回答
813
被采纳
177
关注TA
发私信
相关文章
1
RT-THREAD在STM32H747平台上移植lwip
2
{lwip}使能RT_LWIP_DHCP时可以获取到ip
3
stm32f103 LWIP 2.0.2 TCP收发问题
4
lwip2.1不重启修改IP
5
关于网络协议栈的测试
6
可否将LWIP升级到2.1.2 和 2.0.3?
7
socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
8
tcpclient 插拔网线问题?
9
两个tcpclient同时通讯可以吗?
10
SO_BINDTODEVICE 未定义该如何解决
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
10
个答案
3
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
lizimu
2
篇文章
9
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部