基于STM32F407+W5500的freemodbus tcp移植与实现

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

环境:STM32CUBEMX6.6.1  MDK532 freemodbus1.6


首先是创建能驱动W5500的工程

主要用到硬件为SPI UART  

SPI速度建议不要太快,SPI1可以设置到40M,但是没必要这么快。

导出工程

添加fputc重定义


找到W5500官方例子

参考例程WIZnet W5500/W5300-官方代理商

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处理流程


                
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值