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

stm32F4 lwip+TCP Modbus 移植

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
stm32F4 lwip+TCP Modbus 移植- v: i- Y3 D3 F1 [1 M

- n  J2 ]' m0 E

6 g* J* H5 m3 M8 D1 h1、硬件+TCP协议栈: LAN8720+LWIP   例程可以参看原子的例程 UCOS+lwip例程
4 J6 l7 B2 T0 f( ~7 O1 R, X  2、开发环境:MDK511
$ I( G, k$ f' {) O; w1 q) r) F, i& a; o, J( {& G
4 _( G% }" u+ ~) U6 K( O
第一步:需要编写一个文件porttcp.c  我下面附录会给,直接加入工程中$ L* n; _3 a2 C4 t. B
2 H& z% I* N( X5 ~$ J+ X
编译出现如下错误:7 K* X% h" H: t$ d
) i- m. v9 ^# N- g4 x3 U7 X
修改如下:, \+ _3 k! G5 U5 Q8 F* ^
     在port.c文件中加入:9 _) t2 h' n- K# ?5 s
void
EnterCriticalSection(  )
{
        __ASM volatile("cpsid i");
}
/ S" T: u1 _- r7 G
void
ExitCriticalSection(  )
{
    __ASM volatile("cpsie i");
}
   在port.h文件中加入:
#define  vPortEnterCritical(  ) EnterCriticalSection( )
#define  vPortExitCritical(  ) ExitCriticalSection( )

$ Z% F1 p9 ?8 ]# m' l4 Q5 [3 S
   在porteven.c中添加:
static eMBEventType eTCPQueuedEvent ;
static BOOL     xTCPEventInQueue= false;

# f# o, f# p/ N, a" ]: a% A% S; K4 B1 o2 w- b5 V
BOOL
xMBTCPPortEventInit( void )
{
    xTCPEventInQueue = FALSE;
    return TRUE;
}

: D& L" @% l# o* _4 j3 S2 f
void
vMBTCPPortEventClose( void )
{
    xTCPEventInQueue = FALSE;
}
) G+ i3 D( b# b& v9 I
BOOL
xMBTCPPortEventPost( eMBEventType eEvent )
{
    xTCPEventInQueue = TRUE;
    eTCPQueuedEvent = eEvent;
                return TRUE;
}

$ ?$ Y1 b( H1 F7 X
BOOL
xMBTCPPortEventGet( eMBEventType * eEvent )
{
; N( t. ?- M; S5 e7 V
        if( xTCPEventInQueue )
        {
                        *eEvent = eTCPQueuedEvent;
                        xTCPEventInQueue = FALSE;
                        return TRUE;
        }
        else
        {
                        return FALSE;
        }
}
# x* H; {/ y# o$ |. y! B
编译无错误。
第二步:将mb.c文件中的内容替换:(附录会给出)
编译还有4个错误:
在mbconfig.h中将#define MB_TCP_ENABLED                          (  0 )
改为:         #define MB_TCP_ENABLED                          (  1 )
编译无错误。
4 `* i' r/ [6 X+ _
第三步:修改main函数
初始化加入: eMBTCPInit( TCP_SERVER_PORT );  
             eMBEnable( MB_TCP );
) K! _- m5 I  k" Q" Q6 y0 a* B

8 e! ?; M) E- L1 u% E+ G$ _6 r
3 a4 z5 f  X/ c0 u: }+ i* U. P
在while循环中加入:   eMBPoll();

- X) O) z; p! [- W% u
编译下载......
' ~$ @4 B$ U! k) Q. t
先ping一下:
! ~' q$ Q& P+ T" ]
打开Modbus Poll设置如下:
以下是我定义的保持寄存器的值
u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0102,0x0304,0x0506,0x0708,0x1122,0x3344,0x5566,0x7799};

+ N3 K9 `% f) D! p# ?

) F5 i+ D( Z* U' o. m
; ^5 G; |6 V) w2 {- ?: M+ E
连接成功!返回如下:
此时,FreeModbus TCP移植成功!  TCP Modbus和Serial Modbus可独立工作,以下是Modbus RTU返回的数据:
; Q( V  ^7 [9 w0 [
4 P5 D* r. ?  D: _/ f
下载:8 O- m3 B1 G  w5 U# L
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

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

该用户从未签到

3#
发表于 2019-3-18 15:59 | 只看该作者
不错,谢谢楼主分享
5 q. E$ C' U0 p" [: @3 m

该用户从未签到

5#
发表于 2019-4-24 15:53 | 只看该作者
感谢楼主分享
, m6 y  s; Z/ g5 t0 p* B' t

该用户从未签到

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

该用户从未签到

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

该用户从未签到

8#
发表于 2019-12-30 13:42 | 只看该作者
好,正在做这事
) R: V+ h5 n5 F

该用户从未签到

9#
发表于 2020-2-26 08:54 | 只看该作者
下载来学习下!请大佬指教下% q" j& w. c, z6 R. L# e- }

该用户从未签到

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

“来自电巢APP”

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-12 04:50 , Processed in 0.125000 second(s), 26 queries , Gzip On.

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

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

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