我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 1457|回复: 8

[技术文章] 教你如何通过MCU配置S2E为TCP Server的工作模式

[复制链接]
  • TA的每日心情

    4 天前
  • 签到天数: 68 天

    [LV.6]常住居民II

    1万

    主题

    8193

    回帖

    5万

    积分

    三级逆天

    积分
    53625

    终身成就奖特殊贡献奖原创先锋奖金点子奖优秀斑竹奖宣传大使奖

    发表于 2018-1-11 10:18:04 | 显示全部楼层 |阅读模式
    在上一篇文章中讲了“如何通过MCU配置S2EUDP模式”,相信小伙伴们已经了解了S2E的基本功能,在这一篇中,我们再接再厉,继续学习一下“如何通过MCU配置S2ETCP Server的工作模式”,无论是配置UDP模式还是配置TCP模式,都是通过串口转以太网的方式实现的:
    1、接线方式

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



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


    第三部分主循环中的
    TCP_Server_Mode();
    用于配置S2ETCP Server模式。S2EAT命令列表详见各个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 }
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    6218

    回帖

    8730

    积分

    二级逆天

    积分
    8730

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2018-1-14 08:45:23 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-8-6 09:13
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    44

    主题

    5757

    回帖

    1万

    积分

    三级逆天

    积分
    10058

    终身成就奖特殊贡献奖原创先锋奖优秀斑竹奖

    QQ
    发表于 2020-12-5 08:09:33 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    196

    主题

    3558

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2020-12-5 09:05:38 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    昨天 16:10
  • 签到天数: 122 天

    [LV.7]常住居民III

    2

    主题

    8619

    回帖

    9951

    积分

    二级逆天

    积分
    9951

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2020-12-6 08:46:01 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    29

    主题

    1427

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖特殊贡献奖原创先锋奖

    发表于 2023-2-22 08:41:51 | 显示全部楼层
    回复

    使用道具 举报

  • TA的每日心情
    开心
    4 天前
  • 签到天数: 84 天

    [LV.6]常住居民II

    5

    主题

    1474

    回帖

    1916

    积分

    二级逆天

    智能家居软硬件OEM&

    积分
    1916

    终身成就奖

    发表于 2023-2-22 08:48:38 | 显示全部楼层
    sigmastar系统开发  瑞萨系统开发  AI视觉系统开发
    回复

    使用道具 举报

  • TA的每日心情
    擦汗
    昨天 22:58
  • 签到天数: 86 天

    [LV.6]常住居民II

    0

    主题

    1440

    回帖

    3158

    积分

    二级逆天

    积分
    3158

    社区居民终身成就奖特殊贡献奖原创先锋奖

    QQ
    发表于 2023-2-23 09:20:27 | 显示全部楼层
    回复

    使用道具 举报

    该用户从未签到

    2

    主题

    884

    回帖

    0

    积分

    二级逆天

    积分
    0

    终身成就奖

    发表于 2023-3-2 08:32:26 | 显示全部楼层
    回复

    使用道具 举报

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

    本版积分规则

    论坛开启做任务可以
    额外奖励金币快速赚
    积分升级了


    Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

    本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

    平平安安
    TOP
    快速回复 返回顶部 返回列表