DM9051--TCP通信实验(基于STM32CUBEMX)

这篇具有很好参考价值的文章主要介绍了DM9051--TCP通信实验(基于STM32CUBEMX)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.前言

最近作者一直在研究DM9051芯片的工作机理,在此过程中,上网上找了很多资料,但根据资料还是不能了解很通透。因此我直接开始实战,经过多番周折,终于调通了程序。再此篇文章分享下自己的调试过程,也把疑问分享一下!(写的比较潦草,资料在最后)

2.DM9051介绍

DM9051NP SPI接口网卡芯片是为了方便MCU单片机系统进行以太网通信而开发出的解决方案。DM9051NP芯片是带有行业标准串列外设接口(Serial Peripheral Interface,SPI)的独立以太网控制器。DM9051NP符合IEEE 802.3 规范,它还支持以DMA 模式來传输,以实现资料传送快速。DM9051NP通过1个中断引脚和SPI接口來进行与主控制器/MCU单片机的通信,资料传输规格为10/100 M。

3.主要实现的功能

作者想通过DM9051,实现STM32F103与网络调试助手进行通信。并且能够定时上传数据,或者能够连续传输数据。其中DM9051作为TCP服务器端。

4.单片机配置

dm9051,stm32,单片机,tcp/ip
SPI配置:
dm9051,stm32,单片机,tcp/ip
SPI通过DMA进行传输,其它配置根据自己的单片机设置就行。PB12是管脚是SPI-NSS(选择管脚),要通信的话,需要拉低这个管脚。

5.代码分析

1.此处代码是为了配置DM9051的IP地址

 	dm9051_init();       //DM9051初始化
    uip_init();				//uIP初始化
    uip_arp_init();		//arp表初始化
    uip_ipaddr(ipaddr, 10,0,115,70);	//设置本地设置IP地址
    uip_sethostaddr(ipaddr);
    uip_ipaddr(ipaddr, 10,0,115,1); 	//设置网关IP地址(其实就是你路由器的IP地址)
    uip_setdraddr(ipaddr);
    uip_ipaddr(ipaddr, 255,0,0,0);	//设置网络掩码
    uip_setnetmask(ipaddr);   
    uip_listen(HTONS(80));			//80端口,用于TCP Server

2.while循环

  while (1)
    {
        uip_polling();		//处理uip任务
			//开始传送30次数据帧的任务
        if(flag_transdata == 1)
        {
            for(int i = 0; i<30; i++)
            {
againa:
                tttt=0; //为了确保每次都会进入mtcp_appcall()函数
                rrrr =1;//标志位,为了告诉DM9051需要处理数据了
                uip_polling();//处理uip任务
                delay_ms(5);
                if(tttt == 0) //如果没有进入mtcp_appcall()函数,则再来一次
                {

                    goto againa;
                }

            }
            rrrr= 0; //标志位清0
            flag_transdata = 0;//30次数据发送完成
        }
        delay_ms(20);
   }

3.DM9051代码

  1. 初始化uIP协定栈:uip_init()
    2.处理输入包:uip_input()
    3.处理周期计时事件:uip_periodic()
    4.开始监听端口:uip_listen()
    5.连接到远程主机:uip_connect()
    6.接收到连接请求:uip_connected()
    7.主动关闭连接:uip_close()
    8.连接被关闭:uip_closed()
    9.发出去的数据被应答:uip_acked()
    10.在当前连接发送数据:uip_send()
    11.在当前连接上收到新的数据:uip_newdata()
    12.告诉对方要停止连接:uip_stop()
    13.连接被意外终止:uip_aborted()
//处理tcp消息接口
void mtcp_appcall()
{

    if(uip_newdata()) //如果有新数据进来
    {
        for(int i = 0; i<968; i++)
        {
            rec[i] =0x00+i;
        }
        flag_transdata =1; //

    }
    if( rrrr ==1)
    {
        uip_send((uint8_t *)rec,968);
        tttt = 1;
        dddd++;
    }

    if(uip_connected())
    {
        d = 1;
    }
    if(uip_closed())
    {
        d = 0;
    }

}

6.资料链接

网上的资料:
DM9051资料介绍以及代码编程
自己的代码:
链接:https://pan.baidu.com/s/1tHzC6nG2TiSftCsEItueOA?pwd=2022
提取码:2022

7.调试中的问题

1.如果在连续发射的时候,一帧与一帧的间隔为5ms,会发生传输到网络调试助手的数据包少一半,比如说,想传个30帧,但接收到的就是15帧了(保证每次都会进入mtcp_appcall()函数)。不知道为什么会这样?但如果改个20ms延迟的话,就能完全接收到!

8.总结

在过程中,需要两个时钟,一个是0.5S的心跳时钟,一个是10S的时钟,发现DM9051的工作方式为:0.5s时钟一到就会进行数据的交互,如果你想要传输数据,就可以再此进行。如果DM9051传输了一次数据,马上就会在轮询一次,检查是否还有数据要发,如果有的话,会一直轮询,如果没有数据要发送的话,就不会在轮询了。直到0.5s时间到了,进入TIMER,会进行数据交互。文章来源地址https://www.toymoban.com/news/detail-721651.html

到了这里,关于DM9051--TCP通信实验(基于STM32CUBEMX)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【STM32F1】以太网通信之UDP/TCP实验

    在本实验中,开发板主控芯片通过 SPI 接口与 CH395Q 以太网芯片进行通讯,从而完成对 CH395Q 以太网芯片的功能配置、数据接收等功能,同时将 CH395Q 以太网芯片的 Socket0 配 置为 UDP 模式,并可通过按键发送 UDP 广播数据至其他的 UDP 客户端,也能够接收其他 UDP 客户端广播的数

    2024年02月07日
    浏览(42)
  • 匿名上位机V7.12协议编程(基于STM32F407+CubeMX+UART外设通信)

    本篇以STM32F407VET6主控为基础进行论述。 文章的目的在于记录和引导, 传递一些编写通信类功能会用到的基本思想 ,以及组合这些功能的思想。 匿名上位机V7版本的功能在本篇没有全部写出来,而是针对本上位机常用的功能举例来描述。 相信读者通过仔细阅读笔者的思想引

    2023年04月14日
    浏览(58)
  • 2.基于正点原子STM32F103的定时器中断实验(HAL库实现)(cubeMX)

      基本上每一款MCU都会配备定时器这个外设,STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。 同样,STM32F1系列的定时器功能也很强大,包括: TIM1和TIM8两个高级定时器; TIM2~TIM5是个通用寄存器; TIM7,TIM8,两个基本定时器。 由于本次实验适用于新手入门

    2023年04月26日
    浏览(153)
  • STM32硬件IIC实验(STM32CubeMx配置)

    IIC:Inter Integrated Circuit,集成电路总线,是一种 同步 串行 半双工 通信总线。 在这里贴一下硬件IIC和软件IIC的区别: 从图中可以看出两者的区别,硬件IIC比软件IIC的用法会比较复杂,但是这里如果不关注底层的实现去使用STM32CubeMx进行IIC的配置,再使用特定函数就能够实现

    2024年02月12日
    浏览(34)
  • 基于树莓派4B与STM32的UART串口通信实验(代码开源)

    前言: 本文为手把手教学 树莓派4B与 STM32 的 UART 通讯 ,本次项目采用 树莓派4B 与  STM32  进行串口通讯,将彼此的数据进行互相传输。本篇博客同时提供了基于 YOLOv5-Lite 的目标检测数据联动,即将 树莓派4B 检测到的信息发送至 STM32 ,后续可以通过这些信息进行各种需求上

    2024年02月16日
    浏览(35)
  • STM32CubeMX实现USART串口通信

    硬件:stm32f103c8t6核心板 软件:STM32CubeMX 6.6.1 keil5 mdk 这里就不再详细介绍了,详细请参考上一篇博客: https://blog.csdn.net/qq_55894922/article/details/127232999?spm=1001.2014.3001.5501 若点击 Manage embedded software packages 后,出现失败,则需要随便点击其它任一选项,进行下载一些文件,比如点

    2023年04月17日
    浏览(46)
  • 基于Labview的TCP通信(STM32为TCP客户端,Labview的上位机为TCP服务器端)

    使用ESP-01S的WIFI模块,将该WIFI模块设置成TCP的客户端,WIFI模块需要连接热点,和电脑连接的热点处于同一局域网上(也可以使用花生壳软件,进行网络传统,就不需要连接同一网络,以实习远程TCP模式通信)。在PC端有Labview软件的TCP通信的服务器端,在这里主要介绍的是TC

    2024年02月12日
    浏览(38)
  • 野火STM32电机系列(三)Cubemx配置CAN通信

    CAN接口: PI9 PB9 1.配置CAN 通信参数 由于F4的 CAN外设挂载在APB1上,时钟配置后APB1的时钟速率为42MHz,目标通信速率为1000KHz,由公式: BaudRate = 1/NominalBitTime NominalBitTime = 1tq + tBS1 +tBS2 设置参数如下: CAN时钟分频参数为7,BS1为4,BS2为1,CAN模式为Nomal模式。 生成工程 在can.c中添加

    2024年02月11日
    浏览(39)
  • STM32CubeMX教程9 USART/UART 异步通信

    开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 逻辑分析仪nanoDLA 野火DAP仿真器 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板 USART1与PC进行异步通信(阻塞传输方式、中断传输方式) ,具体为 使用WK_UP按键

    2024年02月03日
    浏览(57)
  • stm32串口通信(PC--stm32;中断接收方式;附proteus电路图;开发方式:cubeMX)

     单片机型号STM32F103R6: 最后实现的效果是,开机后PC内要求输入1或0,输入1则打开灯泡,输入0则关闭灯泡,输入其他内容则显示错误,值得注意的是这个模拟的东西只能输入英文 之所以用2个LED灯是因为LED电阻粗略一算就是100欧姆,所以懒得再去画其他的东西,真是天助我也

    2024年02月11日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包