找回密码
 注册
关于网站域名变更的通知
查看: 2178|回复: 9
打印 上一主题 下一主题

stm32F4 lwip+TCP Modbus 移植

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-1-30 13:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
stm32F4 lwip+TCP Modbus 移植; G1 U$ l2 S( O! \3 U
, C4 i# W  |2 T+ e; l2 _& R
) z2 Y0 ]- [! w* {( _
1、硬件+TCP协议栈: LAN8720+LWIP   例程可以参看原子的例程 UCOS+lwip例程- h! R. G6 X1 Q* L- Y
  2、开发环境:MDK511 5 Y1 t8 F9 A: Y* B

# {- K7 }2 E$ l8 w4 D# S& ~: ]3 o2 V" @1 u: D
第一步:需要编写一个文件porttcp.c  我下面附录会给,直接加入工程中
8 x2 S8 ?: x& P" e+ S+ C4 p+ q # F$ x9 F( f1 @/ z( I& ^' [6 X) B% ]
编译出现如下错误:& a- G3 ?2 Y& P

. r) [$ g# V! U) Q* X3 b; i9 }修改如下:, _0 l  n. C* j& m! i1 |
     在port.c文件中加入:
' N8 i8 B* r( k2 ^6 I0 j3 K
void
EnterCriticalSection(  )
{
        __ASM volatile("cpsid i");
}

0 x" ?! W* G8 |0 _( ~% X- F
void
ExitCriticalSection(  )
{
    __ASM volatile("cpsie i");
}
   在port.h文件中加入:
#define  vPortEnterCritical(  ) EnterCriticalSection( )
#define  vPortExitCritical(  ) ExitCriticalSection( )

  g1 I8 W( X! @( X7 `7 e" E& N
   在porteven.c中添加:
static eMBEventType eTCPQueuedEvent ;
static BOOL     xTCPEventInQueue= false;

$ O: G3 a- A& `3 ]
" G/ S8 R; M) c
BOOL
xMBTCPPortEventInit( void )
{
    xTCPEventInQueue = FALSE;
    return TRUE;
}
# |# c, W$ {+ r4 M. V
void
vMBTCPPortEventClose( void )
{
    xTCPEventInQueue = FALSE;
}
8 r6 ^. F" J' l. ^5 @) P
BOOL
xMBTCPPortEventPost( eMBEventType eEvent )
{
    xTCPEventInQueue = TRUE;
    eTCPQueuedEvent = eEvent;
                return TRUE;
}
3 Z0 |$ I2 @* t9 x
BOOL
xMBTCPPortEventGet( eMBEventType * eEvent )
{
& w; V, \5 ~/ t
        if( xTCPEventInQueue )
        {
                        *eEvent = eTCPQueuedEvent;
                        xTCPEventInQueue = FALSE;
                        return TRUE;
        }
        else
        {
                        return FALSE;
        }
}
) R1 ^& r$ @! K3 P% g* r- n. _
编译无错误。
第二步:将mb.c文件中的内容替换:(附录会给出)
编译还有4个错误:
在mbconfig.h中将#define MB_TCP_ENABLED                          (  0 )
改为:         #define MB_TCP_ENABLED                          (  1 )
编译无错误。
+ f0 @/ c6 f* T- z3 C
第三步:修改main函数
初始化加入: eMBTCPInit( TCP_SERVER_PORT );  
             eMBEnable( MB_TCP );

# [( V7 Y' k! }
# o2 ^0 _( U* {& d4 _
1 F9 a! I3 E( h$ B+ A1 ~" S9 w5 }, v/ P
在while循环中加入:   eMBPoll();
, j5 b1 L& ]0 k# {% K- I9 i: }. U' F
编译下载......

3 k) D# E' J4 n
先ping一下:

8 Q  u  a; y) M& u# G- x. p/ h
打开Modbus Poll设置如下:
以下是我定义的保持寄存器的值
u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0102,0x0304,0x0506,0x0708,0x1122,0x3344,0x5566,0x7799};
! ^9 ]7 E& \  A0 \& ?5 S; |& V

1 S6 X% a$ }2 Y( {6 y
$ S$ M, A, E6 X7 W
连接成功!返回如下:
此时,FreeModbus TCP移植成功!  TCP Modbus和Serial Modbus可独立工作,以下是Modbus RTU返回的数据:

& l+ C$ U+ r5 J* A# _' e/ p

' S* b! L! ~/ R! ?1 r& d& R0 G8 B& J
下载:
3 D9 X) f- v  f7 k' P* }
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

2#
发表于 2019-1-30 14:56 | 只看该作者
不错,谢谢楼主分享

该用户从未签到

3#
发表于 2019-3-18 15:59 | 只看该作者
不错,谢谢楼主分享
: j* F7 W( I8 f, Y

该用户从未签到

5#
发表于 2019-4-24 15:53 | 只看该作者
感谢楼主分享. n, @# ^5 g& x8 O8 o/ C

该用户从未签到

6#
发表于 2019-7-2 13:46 | 只看该作者
十分的感谢,太需要了

该用户从未签到

7#
发表于 2019-12-17 09:06 | 只看该作者
好好好好好好

该用户从未签到

8#
发表于 2019-12-30 13:42 | 只看该作者
好,正在做这事
$ Y" \+ }& m- }) |

该用户从未签到

9#
发表于 2020-2-26 08:54 | 只看该作者
下载来学习下!请大佬指教下
( T! g4 i- x" J1 @2 y! I( k

该用户从未签到

10#
发表于 2020-8-17 18:02 | 只看该作者
谢谢分享

“来自电巢APP”

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-1 16:22 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表