教你如何通过MCU配置S2E为TCP Server的工作模式

2023-05-16

在上一篇文章中讲了“如何通过MCU配置S2E为UDP模式”,相信小伙伴们已经了解了S2E的基本功能,在这一篇中,我们再接再厉,继续学习一下“如何通过MCU配置S2E为TCP Server的工作模式”,无论是配置UDP模式还是配置TCP模式,都是通过串口转以太网的方式实现的:

1、 接线方式


2、 例程说明
打开“通过MCU配置S2E为TCP Server例程”,主程序中第一部分TIM3_Init();是设定一个帧中断的时间定时器,这是因为该例程MCU的串口是通过帧中断来接收AT命令配置S2E后返回的数据的。

第二部分USARTX_Init();初始化MCU用到的串口,这里用USART1_Config();是printf功能,用于查看调试信息。USART2_Config();用于配置S2E,需要注意的是该串口的配置参数需要同S2E的串口配置参数一致,否则配置失败。


第三部分主循环中的TCP_Server_Mode();用于配置S2E为TCP Server模式。S2E的AT命令列表详见各个S2E型号的用户手册AT命令章节介绍。配置成功,串口打印“TCP Server Config Success!”,配置失败串口打印“TCP Server Config Fail!”。

1 /****************************************************
2 函数名: TCP_Server_Mode
3 形参: 无
4 返回值: 无
5 函数功能: 通过串口发送AT命令配置S2E模块
6 ****************************************************/
7 volatile uint8_t SendFlag=0;
8
9 void TCP_Server_Mode(void)
10 {
11 uint8_t RecvFlag=1;
12 char *state;
13
14 switch (SendFlag) {
15 case 0: {
16 Usart_Send(USART2,"AT\r\n");
17 //终端检测命令
18 while (RecvFlag) {
19 if (RX2_Point & FRAME_LEN) {
20 //如果接收到数据
21 state=strstr((char *)RecvBuff,"OK");
22 //判断回复的数据中是否有“OK”
23 if (state!=NULL) {
24 //有
25 RX2_Point=0;
26 //接收缓冲区指针置零
27 RecvFlag=0;
28 //接收标致位置零
29 SendFlag=1;
30 //发送标志位置零
31 printf("Recv:%s\r\n",RecvBuff);
32 memset(RecvBuff,0,RECV_LEN);
33 //接收缓存清零
34 } else { //无
35 SendFlag=100;
36 //配置失败
37 RecvFlag=0;
38 }
39 }
40 }
41 }
42 break;
43 case 1: {
44 Usart_Send(USART2,"AT+ECHO=0\r\n");
45 //开启(1)/关闭(0)回显命令
46 RecvFlag=1;
47 while (RecvFlag) {
48 if (RX2_Point & FRAME_LEN) { //如果接收到数据
49 state=strstr((char *)RecvBuff,"OK");
50 if (state!=NULL) {
51 RX2_Point=0;
52 RecvFlag=0;
53 SendFlag=2;
54 printf("Recv:%s\r\n",RecvBuff);
55 memset(RecvBuff,0,RECV_LEN);
56 } else {
57 SendFlag=100;
58 RecvFlag=0;
59 }
60 }
61 }
62 }
63 break;
64 case 2: {
65 Usart_Send(USART2,"AT+C1_OP=0\r\n");//配置为TCP
66 Server模式命令
67 RecvFlag=1;
68 while (RecvFlag) {
69 if (RX2_Point & FRAME_LEN) { //如果接收到数据
70 state=strstr((char *)RecvBuff,"OK");
71 if (state!=NULL) {
72 RX2_Point=0;
73 RecvFlag=0;
74 SendFlag=3; //状态标志位置零
75 printf("Recv:%s\r\n",RecvBuff);
76 memset(RecvBuff,0,RECV_LEN);
77 } else {
78 SendFlag=100;
79 RecvFlag=0;
80 }
81 }
82 }
83 }
84 break;
85 case 3: {
86 Usart_Send(USART2,"AT+IP_MODE=0\r\n");
87 //配置为静态IP模式
88 RecvFlag=1;
89 while (RecvFlag) {
90 if (RX2_Point & FRAME_LEN) { //如果接收到数据
91 state=strstr((char *)RecvBuff,"OK");
92 if (state!=NULL) {
93 RX2_Point=0;
94 RecvFlag=0;
95 SendFlag=4; //状态标志位置零
96 printf("Recv:%s\r\n",RecvBuff);
97 memset(RecvBuff,0,RECV_LEN);
98 } else {
99 SendFlag=100;
100 RecvFlag=0;
101 }
102 }
103 }
104 }
105 break;
106 case 4: {
107 Usart_Send(USART2,"AT+IP=192.168.1.88\r\n"); //配置本地IP
108 RecvFlag=1;
109 while (RecvFlag) {
110 if (RX2_Point & FRAME_LEN) { //如果接收到数据
111 state=strstr((char *)RecvBuff,"OK");
112 if (state!=NULL) {
113 RX2_Point=0;
114 RecvFlag=0;
115 SendFlag=5; //状态标志位置零
116 printf("Recv:%s\r\n",RecvBuff);
117 memset(RecvBuff,0,RECV_LEN);
118 } else {
119 SendFlag=100;
120 RecvFlag=0;
121 }
122 }
123 }
124 }
125 break;
126 case 5: {
127 Usart_Send(USART2,"AT+MARK=255.255.255.0\r\n");
128 //配置本地IP
129 RecvFlag=1;
130 while (RecvFlag) {
131 if (RX2_Point & FRAME_LEN) { //如果接收到数据
132 state=strstr((char *)RecvBuff,"OK");
133 if (state!=NULL) {
134 RX2_Point=0;
135 RecvFlag=0;
136 SendFlag=6; //状态标志位置零
137 printf("Recv:%s\r\n",RecvBuff);
138 memset(RecvBuff,0,RECV_LEN);
139 } else {
140 SendFlag=100;
141 RecvFlag=0;
142 }
143 }
144 }
145 }
146 break;
147 case 6: {
148 Usart_Send(USART2,"AT+GATEWAY=192.168.1.1\r\n");
149 //配置本地IP
150 RecvFlag=1;
151 while (RecvFlag) {
152 if (RX2_Point & FRAME_LEN) { //如果接收到数据
153 state=strstr((char *)RecvBuff,"OK");
154 if (state!=NULL) {
155 RX2_Point=0;
156 RecvFlag=0;
157 SendFlag=7; //状态标志位置零
158 printf("Recv:%s\r\n",RecvBuff);
159 memset(RecvBuff,0,RECV_LEN);
160 } else {
161 SendFlag=100;
162 RecvFlag=0;
163 }
164 }
165 }
166 }
167 break;
168 case 7: {
169 Usart_Send(USART2,"AT+C1_PORT=5000\r\n");
170 //配置本地端口号
171 RecvFlag=1;
172 while (RecvFlag) {
173 if (RX2_Point & FRAME_LEN) { //如果接收到数据
174 state=strstr((char *)RecvBuff,"OK");
175 if (state!=NULL) {
176 RX2_Point=0;
177 RecvFlag=0;
178 SendFlag=8; //状态标志位置零
179 printf("Recv:%s\r\n",RecvBuff);
180 memset(RecvBuff,0,RECV_LEN);
181 } else {
182 SendFlag=100;
183 RecvFlag=0;
184 }
185 }
186 }
187 }
188 break;
189 case 8: {
190 Usart_Send(USART2,"AT+START_MODE=0\r\n");
191 //配置启动模式(0--AT模式,1--
192 数据模式)
193 RecvFlag=1;
194 while (RecvFlag) {
195 if (RX2_Point & FRAME_LEN) { //如果接收到数据
196 state=strstr((char *)RecvBuff,"OK");
197 if (state!=NULL) {
198 RX2_Point=0;
199 RecvFlag=0;
200 SendFlag=9; //状态标志位置零
201 printf("Recv:%s\r\n",RecvBuff);
202 memset(RecvBuff,0,RECV_LEN);
203 } else {
204 SendFlag=100;
205 RecvFlag=0;
206 }
207 }
208 }
209 }
210 break;
211 case 9: {
212 Usart_Send(USART2,"AT+EXIT\r\n");
213 //保存配置并进入数据模式
214 RecvFlag=1;
215 while (RecvFlag) {
216 if (RX2_Point & FRAME_LEN) { //如果接收到数据
217 state=strstr((char *)RecvBuff,"OK");
218 if (state!=NULL) {
219 RX2_Point=0;
220 RecvFlag=0;
221 SendFlag=99; //状态标志位置零
222 printf("Recv:%s\r\n",RecvBuff);
223 memset(RecvBuff,0,RECV_LEN);
224 } else {
225 SendFlag=100;
226 RecvFlag=0;
227 }
228 }
229 }
230 }
231 break;
232 case 99: {
233 printf("TCP Server Config Success!\r\n");
234 Config_OK=1;
235 }
236 default:
237 RecvFlag=100;
238 break;
239 case 100: {
240 printf("TCP Server Config Fail!\r\n");
241 Config_OK=1;
242 }
243 break;
244 }
245 }
246 


W5500S2E-S1是一款工业级串口转以太网模块,支持多种波特率,从1.2Kbps至1.152Mbps。采用了WIZnet公司的硬件TCP/IP协议以太网芯片W5500。这是更快、更稳定、更安全的以太网解决方案。


在下一篇“教你如何通过MCU将S2E配置为TCP Client的工作模式”中,我将继续与大家分享WIZnet W5500S2E-S1的功能,请大家敬请期待吧!

WIZnet官方网站:http://www.iwiznet.cn/


WIZnet官方技术服务QQ群:595547972


更多物联网应用,关注WIZnet官方微信号:





本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

教你如何通过MCU配置S2E为TCP Server的工作模式 的相关文章

  • C语言浮点型数据存储结构

    1 float类型 float类型占四个字节 xff0c 每个字节占8位 xff0c 总共32位 xff0c 其内存结构如下图 xff1a 31位为符号位 xff1a 0表示正数 xff0c 1表示负数 31 23位 xff1a 共8位表示
  • sockaddr和sockaddr_in详解

    struct sockaddr和struct sockaddr in这两个结构体用来处理网络通信的地址 一 sockaddr sockaddr在头文件 include lt sys socket h gt 中定义 xff0c sockadd
  • python requests模拟登陆带验证码的网站

    作为之前专利爬虫的续篇 xff0c 本篇准备描述如何通过python的requests模块登录专利查询网站 环境准备 python 3 6requests chrome尝试 首先 xff0c 我们使用chrome尝试登录专利网站 xff0c
  • 兔子与兔子(下一篇解释原理:字符串哈希)

    文章目录 兔子与兔子题目描述解题思路 兔子与兔子 题目描述 很久很久以前 xff0c 森林里住着一群兔子 有一天 xff0c 兔子们想要研究自己的 DNA 序列 我们首先选取一个好长好长的 DNA 序列 xff08 小兔子是外星生物 xff
  • 机器学习(二)--- KNN(K-Nearest Neighbors)

    KNN K Nearest Neighbors 简单类比 xff08 Simple Analogy xff09 KNN xff1a 通过你周围的人来判断你是哪一类人 Tell me about your friends who your n
  • 机器学习(三) --- DT(Decision Tree)

    文章目录 Decision TreeIntroductionConstructing Decision Treesexample Pruning决策树 随机森林和Gradient BoostingReference xff1a Decisi
  • 3D点云资料(笔记自用)

    数据集 xff1a Pointnet Pointnet2 pytorch Pointnet语义分割任务S3DIS数据集上的注意点 dataset ShapeNet简介及认识 文件格式 PCD格式 目标检测标注工具 标注工具windows安装
  • 用指针给数组赋值的一个小问题

    问题是这样的 xff0c 我打算输入与元素为数组赋值 xff0c 然后反向输出数组元素 include lt stdio h gt int main void int a 10 p 61 a i for i 61 0 i lt 10 i 4
  • 51之中断

    51单片机的中断系统 选用的单片机型号是 xff1a HC6800 ES V2 0 一 中断的概念 CPU在处理某一事件A时 xff0c 发生了另一事件B请求CPU迅速去处理 xff08 中断发生 xff09 xff1b CPU暂时中断当前
  • 基于51单片机和L298N的小车制作(一)

    到目前为止 xff0c 总算把51单片机过了一遍 xff0c 本来暑假就要完成的任务一直拖到了现在 51学完 xff0c 就想着先做点东西 xff0c 就从小车开始 玩小车最重要的是什么 xff1f 电机 这个就不用多解释了 从今天早上开始
  • 如何把android设备中的固件dump出来

    android固件是在mtdblock中 但是会有很多个block root 64 android cat proc partitions major minor blocks name 31 0 4096 mtdblock0 31 1 1
  • PID控制电机转速

    转一个PID控制电机的小程序 xff0c 被PID困扰好多天了 xff0c 知道它的原理但是一直不明白如何将它运用到电机调速中间去 xff0c 看了这个程序之后感觉茅塞顿开 原来也并不难 转载地址 xff1a 呃 xff0c 刚刚不小心把网
  • vs2017常用快捷键

    VS2017常用快快捷键 目录 43 VS常用快捷键搜集窗口操作快捷键项目快捷键调试快捷键编辑快捷键代码快捷键单元测试 xfeff xfeff 项目相关的快捷键 Ctrl 43 Shift 43 B 61 生成项目 Ctrl 43 Alt
  • phpStudy基本用法

    闲扯正文 更改目录更改首页更改端口号DNS解析 参考资料 闲扯 第一次接触php xff0c 要先安装环境 xff0c 包括Apache mySQL和PHP xff1b 安装就安装呗 xff0c 我先跑到Apache官网上面想下一个Apac
  • 小白学爬虫(三)-- requests库之Cookie

    前言使用超时参数在requests添加Cookie参数 啥是cookie三种Cookie请求方式 第一种 xff1a cookie放在headers中第二种 xff1a cookie字典传给cookies参数第三种 先发送post请求 xf
  • 操作系统(五) -- CPU的调度策略

    文章目录 常见的调度策略以及考虑的内容 CPU调度的直观想法 xff1a FIFOPriority xff08 优先级 xff09 如何评价一个调度算法的好坏 xff1f 上述三个指标之间是不是存在冲突呢 xff1f 前台任务和后台任务的关
  • vscode 前端最佳插件配置

    vscode最佳配置 最近更新时间 xff1a 2023 02 18 xff08 Vscode v1 17 xff09 vscode 配置文件内容在最后 xff0c 可直接copy使用 配置详解 editor是针对 vscode 的风格设置
  • Java序列化与反序列化及serialVersionUID

    Java序列化与反序列化是什么 xff1f 为什么需要序列化与反序列化 xff1f 如何实现Java序列化与反序列化 xff1f 本文围绕这些问题进行了探讨 1 Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程
  • STM32 CAN总线说明

    简介 xff1a CAN是Controller Area Network 的缩写 xff08 以下称为CAN xff09 xff0c 是ISO国际标准化的串行通信协议 由德国电气商博世公司在1986年率先提出 此后 xff0c CAN通过I
  • 深度强化学习(DRL)一:入门篇

    目录 前言一 强化学习 xff08 RL xff09 的基本概念二 主要强化学习算法2 1 Qlearning2 2 Deep Qlearning2 3 Double DQN2 4 Sarsa2 5 Sarsa lambda2 6 A3C

随机推荐

  • 深度强化学习(DRL)四:DQN的实战(DQN, Double DQN, Dueling DQN)

    目录 一 环境二 DQN三 Double DQN四 Dueling DQN D3QN 五 小结 全部代码 https github com ColinFred Reinforce Learning Pytorch tree main RL
  • Android APK实现WIFI协议包抓取(上)-实现思路

    一次偶然的机会听到一个需求 xff0c 甲方希望能在手机上实现一个APK xff0c 这个APK能够记录附近WIFI的站点信息 xff0c 然后由强到弱抓取WIFI协议包 xff0c 转送到云端进行WIFI破解 大致调研了几天 xff0c
  • Yolov5 口罩识别

    自定义口罩数据集进行目标检测 目录 自定义口罩数据集进行目标检测Yolov5 代码地址数据集一 手动收集标记数据集二 使用公开数据集 改动源码训练结果迁移学习制作自定义数据集的注意事项 Yolov5 代码地址 https github co
  • Yolov5 网络结构

    yolov5 的网络结构 yolov5 的网络结构的配置文件在models文件夹下 xff0c 有yolov5n yaml yolov5s yaml yolov5m yaml等等 几个网络结构其实都一样 xff0c 通过depth mult
  • Yolov5 v6.1网络结构

    Yolov5 已经更新到v6 1版本了 xff0c 与之前的版本有了不少区别 xff0c 网络结构有了进一步优化 来整理一下 本文主要参考 https blog csdn net qq 37541097 article details 12
  • OpenCV Python 学习笔记(三) 仿射变换

    什么是仿射变换 xff1f 仿射变换就是图像的线性变换加上平移 xff0c 用一幅图表示 xff0c 就是 由 image1 到 image2 的转换经过了三个操作 旋转 线性变换 缩放操作 线性变换 平移 向量加 如果没有了第3个平移的操
  • AlphaGo Zero详解

    AlphaGo Zero 思考再三 xff0c 决定研究一下 AlphaGo Zero xff0c 并把 AlphaGo Zero 的思想运用到五子棋 中 xff0c 毕设就决定做这个 后文 xff1a 蒙特卡洛树搜索 xff08 MCTS
  • 蒙特卡洛树搜索(MCTS)代码详解【python】

    前文 xff1a AlphaGo Zero 详解 后文 xff1a AlphaZero五子棋网络模型 python 之前看了AlphaGo Zero 的整个流程 xff0c 接下来就要了解一下具体怎么实现的 毕设选择做用 AlphaGoZe
  • ubuntu16.04 socket传输文件,开源软件SocketFileTransfer

    arupcsedu SocketFileTransfer 参考网址https github com arupcsedu SocketFileTransfer build and run client 简单修改NWClient一个地方 spa
  • windows和linux是小端还是大端

    在博客园看到这么一篇文章 xff1a http www cnblogs com chio archive 2007 09 18 897126 html 之后百度了几个页面 xff0c 大端 高尾端 xff0c 小端 低尾端 xff0c 于是
  • Pelco_D-P协议

    PELCO产品协议解析 PELCO 派尔高 的监控器材在我国有很广泛的应用 PELCO有自己的传输控制协议 xff0c 当它的产品配套使用时 xff0c 可以互相兼容 但在某些情况下 xff0c 由 于工程的需要 xff0c 要求用其它设备
  • Android .so逆向学习之路-NDK环境搭建和GCC交叉编译配置

    NDK环境搭建和使用 一 Android NDK环境变量配置 xff1a 从Android官方下载NDK工具 xff0c 然后在系统变量中记得添加NDK主目录 xff0c 不然无法使用ndk build命令编译应用 使用NDK手动编译生成
  • 打造自己的字节序转换函数(16位、32位和64位)

    打造自己的字节序转换函数 xff08 16位 32位和64位 xff09 分类 xff1a c c 43 43 linux windows 2010 12 22 17 05 582人阅读 评论 1 收藏 举报 在计算机科学领域中 xff0c
  • 串口通信基本接线方法

    目前较为常用的串口有9针串口 xff08 DB9 xff09 和25针串口 xff08 DB25 xff09 xff0c 通信距离较近时 lt 12m xff0c 可以用电缆线直接连接标准RS232端口 RS422 RS485较远 xff0
  • 字符串库函数大全

    打开string h头文件 xff0c 网址 xff1a https en cppreference com w c string byte 抽出了常用的字符串操作函数 xff0c 权当手册用了 1 字符串基本操作 strcpy xff1a
  • RPlidar(一)——雷达试用

    先附一张RPlidar的图片 以下为本人初次通过ubuntu使用RPlidar 首先将RPlidar连接到电脑上 然后在terminal输入 ls dev ttyUSB 更改com port 权限 sudo chmod 666 dev tt
  • RPlidar学习(三)——RPlidar源代码库

    1 头文件简介 rplidar h 一般情况下开发的项目中仅需要引入该头文件即可使用 RPLIDAR SDK 的所有功能 rptypes h 平台无关的结构和常量定义 rplidar protocol h 定义了 RPLIDAR 通讯协议文
  • PC读写西门子PLC寄存器的值

    https blog csdn net weixin 29482793 article details 81873280
  • 编码的历史

    快下班时 xff0c 爱问问题的小朋友Nico又问了一个问题 xff1a 34 sqlserver里面有char和nchar xff0c 那个n据说是指unicode的数据 xff0c 这个是什么意思 34 并不是所有简单的问题都很容易回答
  • 教你如何通过MCU配置S2E为TCP Server的工作模式

    在上一篇文章中讲了 如何通过MCU配置S2E为UDP模式 xff0c 相信小伙伴们已经了解了S2E的基本功能 xff0c 在这一篇中 xff0c 我们再接再厉 xff0c 继续学习一下 如何通过MCU配置S2E为TCP Server的工作模