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

stm32F4 lwip+TCP Modbus 移植

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
stm32F4 lwip+TCP Modbus 移植. \- G- p- {- u, C9 H6 l  Y
. ]$ I* N' k3 [1 j, e
. _, [! s7 Z% w% U
1、硬件+TCP协议栈: LAN8720+LWIP   例程可以参看原子的例程 UCOS+lwip例程
! e& C, e5 K6 X6 ~  2、开发环境:MDK511 * n& v: ^0 O6 R0 u+ `/ Z' w0 C9 }

# F% X# ~& s# m  j0 c
) p: a' w7 N* ^第一步:需要编写一个文件porttcp.c  我下面附录会给,直接加入工程中
4 Z% M5 Y% f% [4 }- m
& a5 k$ |5 Y3 z- @编译出现如下错误:! |' h& S; Q  N: M4 g, x" D4 L

  [" i9 T' P: a5 Z4 W+ U* j修改如下:. A, z% u0 C8 R5 B, G; S1 Q- s: J* e
     在port.c文件中加入:3 @; S+ j/ V- M; G# o
void
EnterCriticalSection(  )
{
        __ASM volatile("cpsid i");
}
; r/ B! F0 ]: |) F% q! e
void
ExitCriticalSection(  )
{
    __ASM volatile("cpsie i");
}
   在port.h文件中加入:
#define  vPortEnterCritical(  ) EnterCriticalSection( )
#define  vPortExitCritical(  ) ExitCriticalSection( )
0 `  m4 Q. f% e- J, S
   在porteven.c中添加:
static eMBEventType eTCPQueuedEvent ;
static BOOL     xTCPEventInQueue= false;
+ m$ p( i; t8 A
$ r, M$ A. X9 w& A% _! s. [
BOOL
xMBTCPPortEventInit( void )
{
    xTCPEventInQueue = FALSE;
    return TRUE;
}

5 A5 @2 s, D/ d8 n4 P
void
vMBTCPPortEventClose( void )
{
    xTCPEventInQueue = FALSE;
}

; s& o  Q! v  A
BOOL
xMBTCPPortEventPost( eMBEventType eEvent )
{
    xTCPEventInQueue = TRUE;
    eTCPQueuedEvent = eEvent;
                return TRUE;
}
. i  J9 f, A8 u9 n) h4 `( ^
BOOL
xMBTCPPortEventGet( eMBEventType * eEvent )
{
3 j# D5 y- s/ D: o5 g# n$ R6 F
        if( xTCPEventInQueue )
        {
                        *eEvent = eTCPQueuedEvent;
                        xTCPEventInQueue = FALSE;
                        return TRUE;
        }
        else
        {
                        return FALSE;
        }
}
6 `0 f( Y2 y. E; R1 n" R
编译无错误。
第二步:将mb.c文件中的内容替换:(附录会给出)
编译还有4个错误:
在mbconfig.h中将#define MB_TCP_ENABLED                          (  0 )
改为:         #define MB_TCP_ENABLED                          (  1 )
编译无错误。

2 i0 A7 P& r; v3 B5 `9 d5 c# E& l# S- ]
第三步:修改main函数
初始化加入: eMBTCPInit( TCP_SERVER_PORT );  
             eMBEnable( MB_TCP );
/ e) ]$ \1 w0 O+ ?% U2 W1 o, g- x) @5 n
8 d/ F% J" D# `, T! r: Q+ {- T

9 x! P* i: V. ]# W  ~
在while循环中加入:   eMBPoll();

% W4 T! ^0 |5 Y/ u" _8 N' w* t/ d
编译下载......

0 g7 M* c1 E  P" C8 r& E  s
先ping一下:

) v+ }; D8 Q8 w% m5 |
打开Modbus Poll设置如下:
以下是我定义的保持寄存器的值
u16 usRegHoldingBuf[REG_HOLDING_NREGS]={0x0102,0x0304,0x0506,0x0708,0x1122,0x3344,0x5566,0x7799};

* E- K8 |. R& f7 s9 Z

9 ?% f& T  a* K0 Z  J$ `; h$ Z: ]0 ^% M2 h/ S3 h
连接成功!返回如下:
此时,FreeModbus TCP移植成功!  TCP Modbus和Serial Modbus可独立工作,以下是Modbus RTU返回的数据:

- q: o' b' g5 D
8 ]+ j. g( j5 {* }' b  e' p2 l
下载:* j7 V; k7 w: t9 E3 K6 j, E
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

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

该用户从未签到

3#
发表于 2019-3-18 15:59 | 只看该作者
不错,谢谢楼主分享4 n/ v' `0 k( l  y

该用户从未签到

5#
发表于 2019-4-24 15:53 | 只看该作者
感谢楼主分享
" B0 c" \+ H7 s( d) z& A: H

该用户从未签到

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

该用户从未签到

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

该用户从未签到

8#
发表于 2019-12-30 13:42 | 只看该作者
好,正在做这事
2 R7 K1 t0 C! D% |

该用户从未签到

9#
发表于 2020-2-26 08:54 | 只看该作者
下载来学习下!请大佬指教下
; l! u1 N2 S% O: k5 w- M

该用户从未签到

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

“来自电巢APP”

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-31 04:26 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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