STM32F7xx Keil5 RTX RL-TCPnet DP83822移植

这篇具有很好参考价值的文章主要介绍了STM32F7xx Keil5 RTX RL-TCPnet DP83822移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用之前RTX工程模板

RTE中RL-TCPnet配置

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
暂时全部默认配置,DHCP已打开
STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
修改RTE_Device.h ETH配置

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
修改DP83822驱动

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
去掉文件只读属性,之后需要修改,添加到工程

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
修改DP83822 ID

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
RTE创建tcp server例程,参考该例程,进行修改
STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
STM32F7xx Keil5 RTX RL-TCPnet DP83822移植
修改后的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

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植

Tcp client

STM32F7xx Keil5 RTX RL-TCPnet DP83822移植

问题

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

参考

【STM32F407】第11章 RL-TCPnet V7.X之TCP服务器
https://blog.csdn.net/Simon223/article/details/108494688文章来源地址https://www.toymoban.com/news/detail-474936.html

到了这里,关于STM32F7xx Keil5 RTX RL-TCPnet DP83822移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【stm32f4 C++与C混合开发】建立keil5的ARM Compiler 6(AC6)标准库开发工程

    一:请先确保keil5的版本为5.30版本以上,笔者这里是5.36版本: 二:F4标准库的pack包本版是2.9.0以上,笔者这里是2.15版本: 上述资源可在https://zhuanlan.zhihu.com/p/262507061找到 提示:本工程创建用例基于正点原子的F407标准库例程 工程如下图所示: 把工程拷贝一份新工程到纯英文

    2024年02月15日
    浏览(116)
  • cubmx基础操作,hal库基本配置流程之使用 stm32cubmx生成HAL库进行gpio点亮led(stm32h7xx)(超详细,小白教程)

    HAL库(硬件抽象层库)是一个提供对底层硬件操作的抽象的库,它使得开发者可以使用统一的接口进行硬件操作,而不必关心底层硬件的具体实现细节。HAL库通常由硬件厂商提供,用于支持其硬件设备,并为其提供标准化的接口。 HAL库的主要目的是简化底层硬件的操作,使得

    2024年02月20日
    浏览(54)
  • (STM32基础)STM32用keil5开发前准备

    1)Keil5安装MDK-ARM版本后,需要安装对应芯片器件库,否则新建工程无芯片可选项。  查看设备管理器  stlink 是否驱动正常,如果是感叹号则需要装驱动  2、插入STLINK后,在keil安装目录下找到安装驱动程序,安装STLINK驱动。 3、插入usb转串口模块后,安装驱动程序(资料文件

    2024年02月03日
    浏览(66)
  • Keil5 开发 STM32 工程创建

    打开Keil5软件,点Project菜单的的下来选项New uVision Project…,然后选择工程文件夹放置的目录,新建项目目录,如:LED闪烁 点击OK后,会弹出配置运行时环境的选项框,关闭即可,该方法使用手动配置。 完成后,如下图: 打开项目目录,分别创建3个文件夹:Library, Start, User,

    2024年02月16日
    浏览(89)
  • Clion + Keil5 写stm32

    最近在学 stm32,使用 Kei5 写代码十分难受,代码提示差,看源码复杂,甚至括号匹配都没有。就想着 JetBrains 家的东西能不能用,就找的了稚晖君的《配置CLion用于STM32开发【优雅の嵌入式开发】》,配置之后又想用 stm32 的原生库不想用HAL库,因为跟着江协科技学起来方便。折

    2024年02月05日
    浏览(66)
  • keil5成功安装stm32芯片包

    keil安装stm32芯片包 1.按图点击pack installer 2.点击file-然后点击import 3.点击框中stm32芯片包即可 4.返回出现下面的信息则说明安装成功 PS:如果一直显示安装不上,检查芯片包的完整性

    2024年02月13日
    浏览(43)
  • STM32初识---Keil5和CubeMX

    今天开始,学习比52更复杂的STM32系列单片机: 使用之前的Keil4写STM32代码其实也可以,但需要比较复杂的设置,而如果用Keil5会比较方便。 (这里在打开POJIE软件的时候总是会报错“ 无法成功完成操作 因为文件包含病毒或潜在的垃圾软件\\\",因此参考了这篇博文解决Win11“无法

    2024年02月06日
    浏览(42)
  • STM32CubeMX+Keil5新建工程

    STM32CubeMx 软件是 ST 公司为 STM32 系列单片机快速建立工程,并快速初始化使用到的外设、GPIO 等,大大缩短了我们的开发时间。简单地说STM32CubeMX 本身就是一个工具软件,我们只要在上面通过图形化配置就可以生成STM32 功能代码工程,这样节省我们的工作量。在之前没有用这个

    2024年01月19日
    浏览(124)
  • 【STM32】Keil5中生成bin文件

    一、打开魔术棒  二、点击“User”,勾选After Build的Run#1 三、 添加fromelf文件的路径(若fromelf文件路径未添加到环境变量,请在这里添加详细的路径。例如: D:keil5ARMARMCCbinfromelf.exe  --bin  --output ..OBJIAP.bin ..OBJIAP.axf)  四、一定要注意格式!!! ① ..OBJIAP.bin  其中“

    2024年02月05日
    浏览(73)
  • Keil5编译环境搭建流程----STM32和GD32

    以下蓝色字体是对应文章的链接,单击便可以查看详细信息! 文章链接: Keil5-MDK下载和安装教程 资源链接: Keil5_MDK安装包链接----点击下载 文章链接: stm32芯片包下载和安装教程 GD32芯片包下载和安装教程 资源链接: Keil5-STM32芯片包链接----点击下载 Keil5-GD32芯片包链接---

    2024年02月05日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包