环境:STM32CUBEMX6.6.1 MDK532 freemodbus1.6
首先是创建能驱动W5500的工程
主要用到硬件为SPI UART

SPI速度建议不要太快,SPI1可以设置到40M,但是没必要这么快。
导出工程
添加fputc重定义
找到W5500官方例子
freemodbus tcp需要用到的是TCP server例子
将Ethernet文件夹拷入刚才建好的工程
添加C文件,添加头文件路径

我这里同时用到了HTTP SERVER,没用到可以不加
驱动主要修改是在w5500.conf
添加reset控制引脚,cs控制引脚
还有SPI发送函数
uint8_t SPI_SendByte(uint8_t byte)
{
uint8_t rxbyte=0;
uint8_t SPITimeout =200;
while(__HAL_SPI_GET_FLAG(&hspi1,SPI_FLAG_TXE)==RESET)
{
if((SPITimeout--)==0)
HAL_SPI_ErrorCallback(&hspi1);
return 0;
}
HAL_SPI_TransmitReceive(&hspi1,&byte,&rxbyte,1,100);
return rxbyte;
}
将例子中定时器初始化和中断屏蔽掉,没有用到动态IP分配就不需要定时器中断
然后主函数参考例子,添加函数do_tcp_server();
照葫芦画瓢就行
然后下载固件,连上自己的电脑或者路由器,这里要保证在同一个网段,就是IP地址前面三个数是一样才行,电脑IP可以用ipconfig查看

直连电脑就看上面的地址,我这里没连上,显示的断开
如果连的路由器,就看下面这个,设置W5500的IP为192.168.8.x
可以从串口1看到W5500初始化是否完成,初始化正确的话会正常显示MAC和IP为你设置的值
然后随便找一个TCP测试工具,我这里用的是sscom,输入IP和端口,测试一下官方的回环例子即可。
移植freemodbus
GitHub - cwalter-at/freemodbus: BSD licensed MODBUS RTU/ASCII and TCP slave
下载最新软件包,提取出这些文件,新建一个目录freemodbus


修改porttcp.c里的这几个函数,添加各类接口,添加poll处理流程

本文详细介绍了如何在STM32CUBEMX环境中配置W5500以驱动SPIUART,移植并集成Freemodbus TCP服务器,实现基础MODBUS功能如输入/输出/线圈操作。通过步骤指导,包括设置SPI速度、添加C文件、驱动修改和主函数调整。

3426

被折叠的 条评论
为什么被折叠?



