找回密码
 注册

QQ登录

只需一步,快速开始

搜索

STM32使用非中断DMA模式W5500作为tcp服务器源码

[复制链接]
路漫漫 发表于 2020-5-20 23:58:09 | 显示全部楼层 |阅读模式
这个应用代码设置W5500为tcp服务器,PC作为tcp客户端来连接W5500,并通过简单的数据收发来验证连接是否成功。

完整源码: STM32_DMA-W5500.zip (417.27 KB, 售价: 2 E币)
包含文件目录
============
stm32f10x_conf.h     配置库文件
stm32f10x_it.c       中断头文件
stm32f10x_it.h       stm32f10x_it.c的头文件
main.c               主程序

硬件环境
========
这个例程用于野火STM32F103VET6开发板同以太网芯片W5500搭建的应用平台,也可以很方便地
移植到其他平台上。

注意:
首先通过串口线连接PC和W5500模块;如果W5500模块直接通过网线和PC相连接,需要修改PC的IP为静态IP,且保证和W5500在同一个网段;
如果W5500模块直接连接路由器,则不需要修改。

操作步骤
========
1. 成功编译应用程序,然后通过串口烧录工具或者Jlink把程序烧录到开发板中
2. 打开串口工具,复位开发板可以看到W5500的相关配置信息
3. 打开网络调试助手,设置为TCP Client,端口号和服务器IP可以通过串口打印得到;添加信息无误后点击连接建立网络
4. 连接成功后,在网络调试助手端发送数据,可以观察到数据接收情况

部分代码片段:
  1. /**
  2. ******************************************************************************
  3. * @file                            main.c
  4. * @author                          fire
  5. * @version                         V1.0
  6. * @brief                           用3.5.0版本库建的工程模板
  7. ******************************************************************************
  8. **@attention          内网测试,请保证W5500的IP与测试PC机在同一网段内,且不冲突;
  9. * @attention          如果是用网线跟PC机直连,请设置PC机本地连接地址IP为静态IP;
  10. * @attention          网络调试助手打开时的IP地址若是你本地连接地址,请自行设定;
  11. *
  12. * 使用本程序,先将w5500_conf.C 文件中的PC_IP,设定为PC机的IP地址,端口号可任意,默认为5000
  13. *
  14. ******************************************************************************
  15. */
  16. #include <stdio.h>
  17. #include <string.h>

  18. #include "stm32f10x.h"
  19. #include "bsp_spi_flash.h"
  20. #include "bsp_usart1.h"
  21. #include "bsp_i2c_ee.h"
  22. #include "bsp_i2c_gpio.h"
  23. #include "bsp_led.h"
  24. #include "bsp_dht11.h"

  25. #include "w5500.h"
  26. #include "W5500_conf.h"
  27. #include "socket.h"
  28. #include "utility.h"
  29. /*app函数头文件*/
  30. #include "tcp_demo.h"
  31. uint8 buffer[2048];
  32. int main(void)
  33. {         
  34.     uint16 size=0;
  35.         systick_init(72);/* 初始化Systick工作时钟*/
  36.         NVIC_Configuration();
  37.                 USART1_Config(); /*初始化串口通信:115200@8-n-1*/
  38.         i2c_CfgGpio();/*初始化eeprom*/
  39.         LED_GPIO_Config();
  40.         
  41.         printf(" 初始化W5500…… \r\n");         
  42.         gpio_for_w5500_config();/* 初始化MCU相关引脚*/
  43. //        SPI_DMA_Config();
  44.         reset_w5500();/*复位W5500*/
  45.         printf(" W5500 Hardware initialized! \r\n");
  46.         
  47.         set_w5500_mac();/*配置W5500MAC地址*/

  48.         if(use_define==1||use_eeprom==1)/*不DHCP获取IP地址,就配置默认IP地址*/
  49.         set_w5500_ip();/*配置W5500IP地址*/
  50.         printf(" 电脑作为TCP客户端连接W5500TCP服务器 \r\n");
  51.         printf(" W5500服务器端口默认为: %d \r\n",W5500_tcp_server_port);
  52.         printf(" 连接成功后,PC机发送数据给W5500,W5500将返回对应数据 \r\n");
  53.         socket_buf_init(txsize, rxsize); /*初始化8个Socket的发送接收缓存大小*/
  54.         printf(" 应用程序执行中……\r\n");
  55.         while(1)//循环执行的函数
  56.         {
  57.                 do_tcp_server();/*TCP_Server 数据回环测试程序*/
  58.         }

  59. }
复制代码


老袁同学 发表于 2024-3-19 10:58:36 | 显示全部楼层
没啥用 根本不是中断加dma,还是轮询方式加个dma,也是一直等待DMA传输完成,没有效率提升
 楼主| 路漫漫 发表于 2024-3-19 11:12:55 | 显示全部楼层
老袁同学 发表于 2024-3-19 10:58
没啥用 ,根本不是中断加dma,还是轮询方式加个dma,也是一直等待DMA传输完成,没有效率提升 ...
文中也没说用中断加dma方式呀,给出的示例代码片段里也没有说用中断+DMA
但是还是要感谢您的反馈。

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

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-4-24 02:09

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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