你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 1322|回复: 1

【HAL库每天一例】第067例:以太网-手机APP控制

[复制链接]

122

主题

129

回帖

0

蝴蝶豆

论坛元老

最后登录
2019-5-28
发表于 2016-7-11 08:50:04 | 显示全部楼层 |阅读模式
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
链接:https://pan.baidu.com/s/1i574oPv
密码:r3s3

(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-065. 以太网-手机APP控制

/**
  ******************************************************************************
  *                           硬石YS-F1Pro开发板例程功能说明
  *
  *  例程名称: YSF1_HAL-065. 以太网-手机APP控制
  *   
  ******************************************************************************
  * 说明:
  * 本例程配套硬石stm32开发板YS-F1Pro使用。
  *
  * 淘宝:
  * 论坛:硬石电子社区
  * 版权归硬石嵌入式开发团队所有,请勿商用。
  ******************************************************************************
  */

【1】例程简介
  W5500 是一款全硬件 TCP/IP 嵌入式以太网控制器,为嵌入式系统提供了更加简易的互联网连接
方案.使用硬件逻辑门电路实现 TCP/IP 协议栈的传输层及网络层(如: TCP, UDP, ICMP, IPv4,
ARP, IGMP, PPPoE 等协议),并集成了数据链路层,物理层,以及 32K 字节片上 RAM 作为数据
收发缓存。使得上位机主控芯片,只需承担TCP/IP 应用层控制信息的处理任务。从而大大节省了上
位机对于数据复制、协议处理和中断处理等方面的工作量,提升了系统利用率及可靠性。
  YS-F1Pro开发板上集成了W5500芯片,可以实现网络通信。  
  本例程实现W5500网络环境搭建,最后通过ping通验证网络通路。
  
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号     IO端口      目标功能引脚        出厂默认设置
  JP1        PA10        TXD(CH340G)          已接入
  JP2        PA9         RXD(CH340G)          已接入
  JP8        PF9         INTn(W5500)          已接入
  JP9        PF11        SCSn(W5500)          已接入
  
【3】操作及现象
使用网线接入YS-F1Pro开发板右上方网口,连接至路由器;使用开发板配套的MINI USB线连接到开发
板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手工具,设置
参数为115200 8-N-1。打开网络调试助手,设置为TCP Server类型,IP地址为自己电脑主机IP,端口
设置为8080,打开网络调试助手的TCP Server。根据自己网络环境设置w5500_conf.c文件中相关参数,
这里把远端IP设置为电脑主机IP,远端端口设置为8080,编译程序并下载,下载完程序之后,在串口调
试助手窗口可接收到信息。然后可以在网络调试助手发送窗口输入发送数据;发送之后,在串口调试助
手会打印接收到的数据并且会回传到网络通信助手。

/******************* (C) COPYRIGHT 2015-2020 硬石嵌入式开发团队 *****END OF FILE****/
tcp连接APP下载.jpg
打开编辑窗口.png
设置按钮.png


tcp_demo.c文件内容
  1. /**
  2. ************************************************************************************************
  3. * [url=home.php?mod=space&uid=288409]@file[/url]                   tcp_demo.c
  4. * [url=home.php?mod=space&uid=187600]@author[/url]                  WIZnet Software Team
  5. * [url=home.php?mod=space&uid=895143]@version[/url]                 V1.0
  6. * [url=home.php?mod=space&uid=212281]@date[/url]                    2015-02-14
  7. * [url=home.php?mod=space&uid=247401]@brief[/url]                   TCP 演示函数
  8. * [url=home.php?mod=space&uid=93590]@Attention[/url]  
  9. ************************************************************************************************
  10. **/

  11. #include <stdio.h>
  12. #include <string.h>
  13. #include "Ethernet/Internet/tcp_demo.h"
  14. #include "Ethernet/W5500/W5500_conf.h"
  15. #include "Ethernet/W5500/w5500.h"
  16. #include "Ethernet/W5500/socket.h"
  17. #include "beep/bsp_beep.h"
  18. #include "led/bsp_led.h"

  19. uint8 buff[2048];                                                                               /*定义一个2KB的缓存*/

  20. /**
  21. *@brief                TCP Server回环演示函数。
  22. *@param                无
  23. *@return        无
  24. */
  25. void do_tcp_server(void)
  26. {        
  27.         uint16 len=0;  
  28.         switch(getSn_SR(SOCK_TCPS))                                                                                                            /*获取socket的状态*/
  29.         {
  30.                 case SOCK_CLOSED:                                                                                                                          /*socket处于关闭状态*/
  31.                         socket(SOCK_TCPS ,Sn_MR_TCP,local_port,Sn_MR_ND);                /*打开socket*/
  32.                   break;     
  33.    
  34.                 case SOCK_INIT:                                                                                                                                  /*socket已初始化状态*/
  35.                         listen(SOCK_TCPS);                                                                                                                /*socket建立监听*/
  36.                   break;
  37.                
  38.                 case SOCK_ESTABLISHED:                                                                                                              /*socket处于连接建立状态*/
  39.                
  40.                         if(getSn_IR(SOCK_TCPS) & Sn_IR_CON)
  41.                         {
  42.                                 setSn_IR(SOCK_TCPS, Sn_IR_CON);                                                                          /*清除接收中断标志位*/
  43.                         }
  44.                         len=getSn_RX_RSR(SOCK_TCPS);                                                                                    /*定义len为已接收数据的长度*/
  45.                         if(len>0)
  46.                         {
  47.                                 recv(SOCK_TCPS,buff,len);                                                                                      /*接收来自Client的数据*/
  48.                                 buff[len]=0x00;                                                                                                           /*添加字符串结束符*/
  49.                                 printf("%s\r\n",buff);
  50.                                 send(SOCK_TCPS,buff,len);                                                                                      /*向Client发送数据*/
  51.                   }
  52.                   break;
  53.                
  54.                 case SOCK_CLOSE_WAIT:                                                                                                                /*socket处于等待关闭状态*/
  55.                         close(SOCK_TCPS);
  56.                   break;
  57.         }
  58. }

  59. /**
  60. *@brief                TCP Client回环演示函数。
  61. *@param                无
  62. *@return        无
  63. */
  64. void do_tcp_client(void)
  65. {        
  66.    uint16 len=0;        

  67.         switch(getSn_SR(SOCK_TCPC))                                                                                                           /*获取socket的状态*/
  68.         {
  69.                 case SOCK_CLOSED:                                                                                                                         /*socket处于关闭状态*/
  70.                         socket(SOCK_TCPC,Sn_MR_TCP,local_port++,Sn_MR_ND);
  71.                   break;
  72.                
  73.                 case SOCK_INIT:                                                                                                                                 /*socket处于初始化状态*/
  74.                         connect(SOCK_TCPC,remote_ip,remote_port);                /*socket连接服务器*/
  75.                   break;
  76.                
  77.                 case SOCK_ESTABLISHED:                                                                                                              /*socket处于连接建立状态*/
  78.                         if(getSn_IR(SOCK_TCPC) & Sn_IR_CON)
  79.                         {
  80.                                 setSn_IR(SOCK_TCPC, Sn_IR_CON);                                                                  /*清除接收中断标志位*/
  81.                         }
  82.                
  83.                         len=getSn_RX_RSR(SOCK_TCPC);                                                                                    /*定义len为已接收数据的长度*/
  84.                         if(len>0)
  85.                         {
  86.                                 recv(SOCK_TCPC,buff,len);                                                                                     /*接收来自Server的数据*/
  87.                                 buff[len]=0x00;                                                                                                           /*添加字符串结束符*/
  88.                                 printf("%s\r\n",buff);
  89.                                 switch(buff[len-1]-'0')
  90.         {
  91.           case 0:
  92.             LED1_ON;
  93.           break;
  94.           case 1:
  95.             LED1_OFF;
  96.           break;
  97.           case 2:
  98.             LED2_ON;
  99.           break;
  100.           case 3:
  101.             LED2_OFF;
  102.           break;
  103.           case 4:
  104.             LED3_ON;
  105.           break;
  106.           case 5:
  107.             LED3_OFF;
  108.           break;
  109.           case 6:
  110.             BEEP_ON;
  111.           break;
  112.           case 7:
  113.             BEEP_OFF;
  114.           break;
  115.         }
  116.                         }                  
  117.                   break;
  118.                         
  119.                 case SOCK_CLOSE_WAIT:                                                                                                              /*socket处于等待关闭状态*/
  120.                         close(SOCK_TCPC);
  121.                   break;

  122.         }
  123. }

复制代码




回复

使用道具 举报

100

主题

3617

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-12-8
发表于 2016-7-20 12:05:24 | 显示全部楼层
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版