STM32F407+LAN8720移植Lwip和freeModbus实现MODBUS TCP
【STM32F407+LAN8720移植Lwip和freeModbus实现MODBUS TCP】Lwip和FreeModbus的移植这里补多说,大家下载我移植好的工程文件自己学习即可,主要说一下注意点一、初始化
初始化主要调用下面这两个函数,用来指定端口和使能TCP连接
eMBTCPInit(502 );
eMBEnable(MB_TCP);
二、关键函数的实现
/**
*****************************************************************************
* @Name: 操作输入寄存器
*
* @Brief: 对应功能码0x04 -> eMBFuncReadInputRegister
*
* @Input: *pucRegBuffer:数据缓冲区,响应主机用
*usAddress:寄存器地址
*usNRegs:操作寄存器个数
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegInputCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs )/**
*****************************************************************************
* @Name: 操作保持寄存器
*
* @Brief: 对应功能码0x06 -> eMBFuncWriteHoldingRegister
*0x16 -> eMBFuncWriteMultipleHoldingRegister
*0x03 -> eMBFuncReadHoldingRegister
*0x23 -> eMBFuncReadWriteMultipleHoldingRegister
*
* @Input: *pucRegBuffer:数据缓冲区,响应主机用
*usAddress:寄存器地址
*usNRegs:操作寄存器个数
*eMode:功能码
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegHoldingCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNRegs, eMBRegisterMode eMode )/**
*****************************************************************************
* @Name: 操作线圈
*
* @Brief: 对应功能码0x01 -> eMBFuncReadCoils
*0x05 -> eMBFuncWriteCoil
*0x15 -> 写多个线圈 eMBFuncWriteMultipleCoils
*
* @Input: *pucRegBuffer:数据缓冲区,响应主机用
*usAddress:寄存器地址
*usNRegs:操作寄存器个数
*eMode:功能码
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegCoilsCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNCoils, eMBRegisterMode eMode )/**
*****************************************************************************
* @Name: 操作离散寄存器
*
* @Brief: 对应功能码0x02 -> eMBFuncReadDiscreteInputs
*
* @Input: *pucRegBuffer:数据缓冲区,响应主机用
*usAddress:寄存器地址
*usNRegs:操作寄存器个数
*
* @Output : none
*
* @Return : Modbus状态信息
*****************************************************************************
**/
eMBErrorCode eMBRegDiscreteCB( UCHAR * pucRegBuffer, USHORT usAddress, USHORT usNDiscrete )
{
三、( void )eMBPoll( );
这个函数要在一个循环中调用,用来处理和发送数据
while(1)
{
LED0 = !LED0;
( void )eMBPoll();
OSTimeDlyHMSM(0,0,0,500);
//延时500ms
}
工程文件
推荐阅读
- 三宝成功抢救大宝中国干细胞组,另一例脐血造血干细胞移植
- LUA|单片机脚本语言移植lua到stm32MDK
- linux移植过程出现“can't open /dev/tq2440_serial0: No such file or directory”
- PC/SC在android上的移植
- S905X|S905X 7.1 RTC_AM1805 移植 F&Q
- linux|【原创】ARM LINUX 外部RTC实时时钟驱动移植(RX8025)
- Felven在职场|Zynq-Linux移植学习笔记之44-linux下watchdog示例
- 不同平台下移植x264
- rk3128 平台rk818电源管理驱动移植
- 安卓5.1源码 lcd驱动移植