STM32F7xx Keil5 RTX RL-TCPnet DP83822移植

news2024/11/26 10:41:28

使用之前RTX工程模板

RTE中RL-TCPnet配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
暂时全部默认配置,DHCP已打开
在这里插入图片描述
修改RTE_Device.h ETH配置

在这里插入图片描述
修改DP83822驱动

在这里插入图片描述
去掉文件只读属性,之后需要修改,添加到工程

在这里插入图片描述
修改DP83822 ID

在这里插入图片描述
RTE创建tcp server例程,参考该例程,进行修改
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
修改后的TCP_Socket_server.c

/*------------------------------------------------------------------------------
 * MDK Middleware - Component ::Network:Service
 * Copyright (c) 2004-2019 Arm Limited (or its affiliates). All rights reserved.
 *------------------------------------------------------------------------------
 * Name:    TCP_Socket_Server.c
 * Purpose: TCP Socket Server Code Template
 * Rev.:    V7.0.0
 *----------------------------------------------------------------------------*/
//! [code_TCP_Socket_Server]
#include "rl_net.h"
#include "cmsis_os2.h"
#include "stm32f7xx_hal.h"

#define PORT_NUM 2000
int32_t tcp_sock;

// Notify the user application about TCP socket events.
uint32_t tcp_cb_server (int32_t socket, netTCP_Event event,
                        const NET_ADDR *addr, const uint8_t *buf, uint32_t len) {
 
  switch (event) {
    case netTCP_EventConnect:
      // Connect request received
      /* Example
      if (addr->addr_type == NET_ADDR_IP4) {
        // IPv4 client
        if (addr->addr[0] == 192  &&
            addr->addr[1] == 168  &&
            addr->addr[2] == 0    &&
            addr->addr[3] == 1) {
          // Accept connection from client at 192.168.0.1
          return (1);
        }
      }
      else {
        // IPv6 client
        const uint8_t ip6_addr[NET_ADDR_IP6_LEN] = { 
                         0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                         0x1c, 0x30, 0x6c, 0xff, 0xfe, 0xa2, 0x45, 0x5e };
        if (memcmp (addr->addr, ip6_addr, NET_ADDR_IP6_LEN) == 0) {
          // Accept connection from client at [fe80::1c30:6cff:fea2:455e]
          return (1);
        }
      }
      // Deny connection.
      return (0);
      */
      return (1);
 
    case netTCP_EventEstablished:
      // Connection established
      break;
 
    case netTCP_EventClosed:
      // Connection was properly closed
      break;
 
    case netTCP_EventAborted:
      // Connection is for some reason aborted
      break;
 
    case netTCP_EventACK:
      // Previously sent data acknowledged
      break;
 
    case netTCP_EventData:
      // Data received
      /* Example
      if ((buf[0] == 0x01) && (len == 2)) {
        // Switch LEDs on and off
        // LED_out (buf[1]);
      }
      */
      break;
  }
  return (0);
}
 
// Allocate and initialize the socket.
__NO_RETURN static void tcp_server_task (void *argument)
{
  netStatus ret;
  netTCP_State net_state;
  int32_t iCount;
  uint8_t *sendbuf;
  uint32_t maxlen;
  
  netInitialize();

  tcp_sock = netTCP_GetSocket (tcp_cb_server);
  
  if (tcp_sock > 0)
  {
    ret = netTCP_Listen (tcp_sock, PORT_NUM);
    netTCP_SetOption (tcp_sock, netTCP_OptionKeepAlive, 1);
  }
  
  osDelay(10000);
  
  for (;;)
  {
    net_state = netTCP_GetState(tcp_sock);
    if(net_state == netTCP_StateESTABLISHED)
    {
      iCount = 8;
      do
      {
        if(netTCP_SendReady(tcp_sock) == true)
        {
          maxlen  = netTCP_GetMaxSegmentSize (tcp_sock);
          
          iCount -= maxlen;
          if(iCount < 0)
            maxlen = iCount + maxlen;
          
          sendbuf = netTCP_GetBuffer (maxlen);
          sendbuf[0] = '1';
          sendbuf[1] = '2';
          sendbuf[2] = '3';
          sendbuf[3] = '4';
          sendbuf[4] = '5';
          sendbuf[5] = '6';
          sendbuf[6] = '7';
          sendbuf[7] = '8';
          netTCP_Send (tcp_sock, sendbuf, maxlen);
        }
      } while (iCount > 0);
    }
    
    osDelay(1000);
  }
}

const osThreadAttr_t tcp_server_task_Attr = 
{
  .name = "tcp_server_task",
  .attr_bits = osThreadDetached, 
  .priority = osPriorityNormal2,
  .stack_size = 2048,
};

void tcp_server_task_init(void)
{
  GPIO_InitTypeDef  GPIO_InitStruct = {0};
  // ERST PG9
  __HAL_RCC_GPIOG_CLK_ENABLE();
  // ETH_XTAL_CLK PA8, MCO1, 25MHz
  HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_HSE, RCC_MCODIV_1);

  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_MEDIUM;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);

  // reset PHY
  HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_RESET);
  osDelay(10);
  HAL_GPIO_WritePin(GPIOG, GPIO_PIN_9, GPIO_PIN_SET);
  osDelay(200);
  
  osThreadNew(tcp_server_task, NULL, &tcp_server_task_Attr);
}
//! [code_TCP_Socket_Server]

测试

ping

在这里插入图片描述

Tcp client

在这里插入图片描述

问题

可以PING通,但client无法连接,后来发现是netInitialize以及server相关的测试代码需要放在同一个task里

参考

【STM32F407】第11章 RL-TCPnet V7.X之TCP服务器
https://blog.csdn.net/Simon223/article/details/108494688

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023.6.4 第五十六次周报

目录 前言 文献阅读&#xff1a;一种预测中国东海岸非平稳和不规则波的VMD-LSTM/GRU混合模型 背景 研究区域和数据 VMD LSTM/GRU预测模型 VMD-LSTM/GRU 方法的数值算法 序列的非平稳分析 神经网络设计 结论 代码&#xff1a;lstm预测污染物浓度 总结 前言 I read …

ChatGPT结合Excel公式办公 —— ChatGPT统计富豪信息

&#x1f4a7; C h a t G P T 统计富豪信息 \color{#FF1493}{ChatGPT统计富豪信息} ChatGPT统计富豪信息&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法…

设计原则-里氏替换原则

凡事皆有利弊&#xff0c;面向对象设计语言通过提供继承、多态等机制使得项目代码更具有复用性、可扩展性等优点&#xff0c;但是这些机制也存在一定的使用风险&#xff0c;比如继承的滥用、多态实现的不确定性等问题都有可能会引起重大线上事故。 一、里氏替换原则概念 里氏…

智能计算补充(从第四章p44往后)

智能计算补充&#xff08;从第四章p44往后&#xff09; 本文内容大部分来自于任振兴老师的讲课PPT&#xff0c;主要是对老师PPT内容的总结和提炼&#xff0c;侵权请联系我删除。 文章目录 智能计算补充&#xff08;从第四章p44往后&#xff09;适应度尺度变换1、适应度尺度变换…

DicomObjects.Core 3.0.17 Crack

DicomObjects.NET 核心版简介 DicomObjects.Core Assembly DicomObjects.NET 核心版简介 DicomObjects.Core 由一组相互关联但独立的 .核心兼容的“对象”&#xff0c;使开发人员能够快速轻松地将DICOM功能添加到其产品中&#xff0c;而无需了解或编程DICOM标准的复杂性。此帮助…

Golang 协程/线程/进程 区别以及 GMP 详解

Golang 协程/线程/进程 区别详解 转载请注明来源&#xff1a;https://janrs.com/mffp 概念 进程 每个进程都有自己的独立内存空间&#xff0c;拥有自己独立的地址空间、独立的堆和栈&#xff0c;既不共享堆&#xff0c;亦不共享栈。一个程序至少有一个进程&#xff0c;一个进程…

数据库多表设计

说明&#xff1a;在项目的数据库设计时&#xff0c;表与表之间是有联系的&#xff0c;如学生管理系统中&#xff0c;有部门表&#xff0c;教师表、学生表、课程表等等 一位教师隶属于一个部门&#xff0c;一个部门有多位教师&#xff0c;因此部门表和教师表&#xff0c;是一对…

【c++修行之路】c++11特性--上

文章目录 前言列表初始化用法介绍原理&#xff1a;std::initializer_list 简化声明的方式autodecltype 右值引用移动构造万能引用和完美转发万能引用完美转发 类的新增功能可变参数模板lambda表达式深入探究lambda表达式lambda表达式带来的便利结语 前言 大家好久不见&#xf…

bmp文件格式与保存

BMP文件由三部分组成&#xff0c;分辨是文件头&#xff0c;DIM头和像素数据。具体格式如下&#xff1a; 基本介绍 1. 文件头 14个字节 signature&#xff1a; 为文件标志位&#xff0c;恒为0X42 FileSize&#xff1a;是指整个文件的大小 REservedx&#xff1a;保留位恒为0 …

leetcode700. 二叉搜索树中的搜索(java)

二叉搜索树中的搜索 leetcode700 二叉搜索树中的搜索题目描述 解题思路代码演示二叉树专题 leetcode700 二叉搜索树中的搜索 leetcode 700 二叉搜索树中的搜索。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problems/search-i…

chatgpt赋能python:Python去掉GIL:提升Python多线程编程性能的突破口

Python去掉GIL&#xff1a;提升Python多线程编程性能的突破口 Python 是世界上最受欢迎的编程语言之一&#xff0c;其中一大原因是其简单易用、优雅简洁的语法。Python 也是一个卓越的多用途编程语言&#xff0c;广泛应用于 Web 开发、科学计算、人工智能等领域。但是&#xf…

javaScript蓝桥杯-----宝贵的一票

目录 一、介绍二、准备三、目标四、代码五、检测踩坑&#xff01;&#xff01;六、完成 一、介绍 公司经常举办各种活动&#xff0c;但一到投票环节就犯了难&#xff0c;于是公司决定安排小蓝开发一个投票系统&#xff0c;更好的收集大家的投票信息。为了赶在下一次活动开始前…

k8s亲和性和反亲和性

1.前言 k8s的亲和性和反亲和性都是通过标签来影响pod的调度&#xff0c;在此基础上亲和性又分为硬亲和性和软亲和性&#xff0c;required为硬亲和性即标签内容必须要符合才能调度&#xff0c;preferred为软亲和性即标签内容不一定要符合也能调度&#xff0c;除此之外还有node亲…

Unsupported major.minor version 51.0解决办法

先看看我的报错截图 [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 08:51 min [INFO] Finished at: 2023-0…

[2.0快速体验]Apache Doris 2.0 日志分析快速体验

1. 概述 应用程序、服务器、云基础设施、IoT 和移动设备、DevOps、微服务架构—最重要的业务和 IT 发展趋势帮助我们以前所未有的方式优化运维和客户体验。但这些趋势也导致由机器生成的数据出现爆炸式成长&#xff0c;其中包括日志和指标等&#xff0c;例如&#xff0c;用户交…

Qcon 广州主题演讲:融云实时社区的海量消息分发实践

移步公众号文章 预约纸质版《作战地图》 5 月 26 日-27 日&#xff0c;QCon 全球软件开发大会落地广州。关注【融云全球互联网通信云】了解更多 融云 IM 服务架构师罗伟受邀分享“实时社区的海量消息分发实践”&#xff0c;从实践中来的前沿技术分享&#xff0c;收获现场开发者…

Nautilus Chain上首个DEX PoseiSwap即将开启IDO,潜力几何?

据悉&#xff0c;Nautilus Chain 上的首个 DEX PoseiSwap 即将开启 IDO &#xff0c;根据官方的最新公告显示&#xff0c;PoseiSwap 即将于 6 月 13 日至 6 月 14 日期间&#xff0c;在 Bounce 平台开启其治理通证 $POSE 的 IDO&#xff08;Initial DEX Offering&#xff09;&a…

openEuler Linux 部署 FineReport

openEuler Linux 部署 FineReport 部署环境 环境版本openEuler Linux22.03MySQL8.0.33FineReport11.0 环境准备 升级系统内核和软件 yum -y updatereboot安装常用工具软件 yum -y install vim tar net-tools 安装MySQL8 将 MySQL Yum 存储库添加到系统的存储库列表中 s…

【JavaEE】表白墙再升级(MySQL实现持久化)

表白墙再升级&#xff08;MySQL实现持久化&#xff09; 文章目录 【JavaEE】表白墙再升级&#xff08;MySQL实现持久化&#xff09;1. 后端引入JDBC的依赖2. 建库建表3. 编写数据库代码&#xff08;JDBC&#xff09;3.1 doGet方法改写3.1.1 构建本地数据源3.1.2 用本地数据源构…

移动端的轮播图

效果 技术选取 前端框架用的是vue3&#xff0c;使用的组件库为element-plus以及vant4 引入element-plus和vant4 安装element-plus cnpm install element-plus --save 安装按需导入 cnpm install -D unplugin-vue-components unplugin-auto-import 安装Vant cnpm i vant 按…