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

stm32F4 lwip+TCP Modbus 移植

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
stm32F4 lwip+TCP Modbus 移植
/ P$ @  s8 O" ?' A' Y6 i! n4 P' q

' Y5 [( z7 \$ H1 K9 _, b4 d' n1、硬件+TCP协议栈: LAN8720+LWIP   例程可以参看原子的例程 UCOS+lwip例程( h3 k4 q; h' R$ [9 s  S7 z0 Q
  2、开发环境:MDK511 2 _2 G- l  y5 j1 ?: Q9 i4 h

1 i  c7 A; O. Y6 }: N# ]$ H: v' f/ u/ H5 W8 Y7 [2 w
第一步:需要编写一个文件porttcp.c  我下面附录会给,直接加入工程中/ h5 v8 F$ G( O+ B4 u, B
: `  X6 K; }3 t: i
编译出现如下错误:
& N$ s9 ]3 o1 W! Q
8 x( @" l# O3 H/ F3 l4 A修改如下:5 @% Y7 Y, ^9 @! L  n
     在port.c文件中加入:
# B( p; ~& T7 C/ p! Y. r5 y7 M/ c7 i
void
EnterCriticalSection(  )
{
        __ASM volatile("cpsid i");
}

! b) [  p& h: \+ J
void
ExitCriticalSection(  )
{
    __ASM volatile("cpsie i");
}
   在port.h文件中加入:
#define  vPortEnterCritical(  ) EnterCriticalSection( )
#define  vPortExitCritical(  ) ExitCriticalSection( )
9 B1 T5 g' A' a2 z3 O* \6 l% V
   在porteven.c中添加:
static eMBEventType eTCPQueuedEvent ;
static BOOL     xTCPEventInQueue= false;
) t. s7 r( L  g; O3 {" j

9 ?: U6 e1 ~; J8 C" r
BOOL
xMBTCPPortEventInit( void )
{
    xTCPEventInQueue = FALSE;
    return TRUE;
}

2 `9 S" I! U6 M
void
vMBTCPPortEventClose( void )
{
    xTCPEventInQueue = FALSE;
}

3 k3 @. w6 q; S  F
BOOL
xMBTCPPortEventPost( eMBEventType eEvent )
{
    xTCPEventInQueue = TRUE;
    eTCPQueuedEvent = eEvent;
                return TRUE;
}

) u4 ?  E  A  U7 f& Y4 d: q
BOOL
xMBTCPPortEventGet( eMBEventType * eEvent )
{

% f3 r! z5 Z' X* p* s& B/ Y
        if( xTCPEventInQueue )
        {
                        *eEvent = eTCPQueuedEvent;
                        xTCPEventInQueue = FALSE;
                        return TRUE;
        }
        else
        {
                        return FALSE;
        }
}
+ C& ~- d8 d+ v* h+ h
编译无错误。
第二步:将mb.c文件中的内容替换:(附录会给出)
编译还有4个错误:
在mbconfig.h中将#define MB_TCP_ENABLED                          (  0 )
改为:         #define MB_TCP_ENABLED                          (  1 )
编译无错误。
+ d" f/ K! U# R) x" B
第三步:修改main函数
初始化加入: eMBTCPInit( TCP_SERVER_PORT );  
             eMBEnable( MB_TCP );
; g0 {' D! e+ r3 ]
- T/ F, {  z0 H8 N/ H. B
/ }0 ^0 {) N" {) u  T5 \! l. s
在while循环中加入:   eMBPoll();

( e  u1 e# j; y8 Q" B# |
编译下载......

8 ~& U9 F2 Y8 d6 \! x; \5 ?
先ping一下:

! b/ f3 Y* }' w( o6 h) L: E
打开Modbus Poll设置如下:
以下是我定义的保持寄存器的值
u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0102,0x0304,0x0506,0x0708,0x1122,0x3344,0x5566,0x7799};

1 V+ k1 d2 {. {* _2 ~& F
" J3 R7 M+ C4 n3 d0 b/ A  |
# [# Q  Y2 z' `6 g
连接成功!返回如下:
此时,FreeModbus TCP移植成功!  TCP Modbus和Serial Modbus可独立工作,以下是Modbus RTU返回的数据:
2 W2 \4 r0 j( K4 }) D# ]- k

1 f4 Q* o' I: C
下载:+ S" M9 c& D; z9 s& `6 G# b9 V
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

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

该用户从未签到

3#
发表于 2019-3-18 15:59 | 只看该作者
不错,谢谢楼主分享
0 _: t8 C9 |* i. N5 M; `' A  n4 r% c

该用户从未签到

5#
发表于 2019-4-24 15:53 | 只看该作者
感谢楼主分享8 l% d: N) R9 b5 [4 w1 k8 G+ r9 O) n5 y

该用户从未签到

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

该用户从未签到

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

该用户从未签到

8#
发表于 2019-12-30 13:42 | 只看该作者
好,正在做这事
. C+ r& _+ @9 v8 p. t7 K- l7 C

该用户从未签到

9#
发表于 2020-2-26 08:54 | 只看该作者
下载来学习下!请大佬指教下- C# j% `/ h: _) U) ]; e

该用户从未签到

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

“来自电巢APP”

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-29 18:01 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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