Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
LWIP
NUCLEO-F767ZI
modbustcp
【NUCLEO-F767ZI】RT-Thread lwip的modbus-tcp
发布于 2021-05-31 08:10:10 浏览:1232
订阅该版
[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配置 ![2021-05-31_074640.png](https://oss-club.rt-thread.org/uploads/20210531/9489c84e06ebbb0bff5c232d46b9de0e.png) - 只是配置使能了LWIP等网络相关的选项,编译通过,发现没有任何的网络功能,这是因为,底层以太网驱动还需要使能与配置。 - NUCLEO-F767ZI 具备以太网的控制器,STM32的以太网控制器驱动相差不多。可以直接使用RT-Thread BSP包里STM32 默认的`drv_eth.c`。 - 使能`drv_eth.c`,只需要配置或指定以太网的PHY芯片型号即可。发现需要手动添加 `BSP_USING_ETH` ![2021-05-12_080243.png](https://oss-club.rt-thread.org/uploads/20210531/1d60266eea53f62496217216cec39edc.png) - 在board\Kconfig中,手动添加`BSP_USING_ETH`。 ```c config BSP_USING_ETH select PHY_USING_LAN8720A bool "Enable Ethernet" default n ``` ![2021-05-29_114811.png](https://oss-club.rt-thread.org/uploads/20210531/f793639676e692fd29c73fe18104957e.png) - `scons --target=mdk5`,构建,然后编译,发现没有报错,下载到板子上,验证下功能。 - 首先需要确认板子lwip是否正常初始化,IP配置是手动还是自动,我使用普通的网线(非交叉直连),连接到路由器,所以,如果手动配置,需要保证与电脑的IP地址网段一致。 ![2021-05-29_115109.png](https://oss-club.rt-thread.org/uploads/20210531/261e1eda0cb5dc9fe9d73998f2c51095.png) - 我手动配置静态的IP,不开启DHCP动态IP分配。 ![2021-05-29_120042.png](https://oss-club.rt-thread.org/uploads/20210531/74b53ca00da927eb03276d49e052b850.png) - 其实,使能以太网,需要根据硬件,配置相关的引脚,我用的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不同电脑,发现需要关闭电脑的【防火墙】 ![2021-05-29_124539.png](https://oss-club.rt-thread.org/uploads/20210531/fa5ead75d50aabed10a1489a2f4d3c08.png) - 开发板ping了一下远程的IP,如【百度】的IP,发现可以ping通,但【域名】没有ping通,怀疑与DNS有关,后面再研究。 - ping通后,TCP/IP功能,基本正常了,接下来,把libmodbus软件包更新下来。 ![2021-05-31_080244.png](https://oss-club.rt-thread.org/uploads/20210531/a2ee63092806f8bb0aaf93ca2f6d954f.png) ![2021-05-31_080301.png](https://oss-club.rt-thread.org/uploads/20210531/82959ab151f12e94a6bec7dc607731e8.png) - 注意RT-Thread软件包的使用方法:配置使能后,需要手动更新软件包,使能的只是配置项。软件包代码,需要下载。 - pkgs --update可以更新下载软件包。 - 编译,运行,发现,modbus-tcp功能正常了,注意modbus-tcp的端口号,一般为502,例程里改为了1502,只要一致即可。 ![2021-05-29_133142.png](https://oss-club.rt-thread.org/uploads/20210531/f3a1e0cd2fc3f0d88db65899738dce52.png.webp) ![2021-05-29_133229.png](https://oss-club.rt-thread.org/uploads/20210531/c46bcb22462adbff86998c234dd84cea.png) ![2021-05-29_133248.png](https://oss-club.rt-thread.org/uploads/20210531/77407c073a548020fd9d28a377277d88.png) - OK,搭建流程初步完成,后面继续深入的研究。 ## 总结 - 虽然没有写什么代码,只是简单的配置,就可以使用lwip、modbus-tcp,不过,还是要认真的研究如何实现的,掌握原理与方法。 - RT-Thread 网络相关的软件包,比较的丰富,实现mqtt等高级的应用,非常的快捷。 - 通过不断的摸索、使用、总结,不断的深入研究物联网技术实现。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
张世争
学以致用
文章
131
回答
809
被采纳
175
关注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
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部