单片机学习小组
直播中

小萃米

11年用户 801经验值
私信 关注

如何将udp测量的数据传给电脑并通过网络调试助手显示?

如何将udp测量的数据传给电脑并通过网络调试助手显示?

回帖(1)

陈勇

2022-2-7 14:16:03
stm32f767+udp通信
写在前面

我也很菜,很多原理都没搞明白,纯粹是代码调通至上原则,写博客也只是为了记录。
项目背景

udp将测量的距离值和角度值传给电脑并通过网络调试助手显示
基础知识

STM32f767芯片自带以太网模块,该模块包括带专用DMA控制器的MAC控制器—一句话,stm32f767内部有MAC模块。外接PHY芯片(LAN8720A)通过RMII与内部MAC芯片连接,实现数据交换,通过SMI接口配置PHY芯片。
为什么使用UDP

无它,唯快而已。
对接收和发送的理解

我一开始一直不明白,单片机和振镜连(二者SPI通信),单片机和电脑用网线连,那我的数据处理部分是放在接收回调函数中呢还是调用udp的发送函数呢?因为以太网不像我从前使用串口,串口的RX和TX跟雷达的RX和TX连,这样在串口接收中断函数中我就可以根据雷达那边的数据格式进行校验存储。
最后用正点原子的例程测试了一下,我按下key0,网络调试助手会显示收到的数据;点击网络调试助手界面上的发送,在lcd上能看到发送的数据。所以我认为,sendata函数是单片机发给电脑。
遇到的问题

win10设置本地电脑连接属性


右键网络图标-打开网络和Internet设置,进入下面这个界面
点击更改适配器选项进入下面这个界面

右键以太网(这里注意,我插上网线的时候,除了图中显示的以太网,还有一个以太网3,仔细看下面的英文,有u***的那个才是跟单片机连接的)-属性

然后按照正点原子的操作就行(上图摘自正点原子,如侵权,联系我删除)


发送数组的填充
在正点原子的例程里面


const u8 *tcp_demo_sendbuf="Apollo STM32F4/F7 UDP demo send datarn";


是定义了一个常量,这里其实我不是很明白,定义u8 *,后面赋值的是字符串?
我要发送的是数组,有浮点型,有整型。


char my_udp_demo_sendbuf[UDP_DEMO_RX_BUFSIZE];//存放要发送的数据
char *udp_demo_sendbuf;//这个可以理解为udp的发送缓冲区


udp服务器发送函数的入口参数是一个结构体,我进去也没弄明白究竟由什么组成,但是实验证明,把上面的udp_demo_sendbuf作为入口参数塞进去就能发送


//UDP服务器发送数据
void udp_demo_senddata(struct udp_pcb *upcb)
{
        struct pbuf *ptr;
        ptr=pbuf_alloc(PBUF_TRANSPORT,strlen((char*)udp_demo_sendbuf),PBUF_POOL); //申请内存
        if(ptr)
        {
                ptr->payload=(void*)udp_demo_sendbuf;
                udp_send(upcb,ptr);        //udp发送数据
                pbuf_free(ptr);//释放内存
        }
       
}


                udp_demo_sendbuf=DATA_Mask(Size);//数据打包函数返回值为char*型的
            udp_demo_senddata(udppcb);




在哪里调用发送函数
正点原子的例程是在while中不断的扫描按键,按下后进行对应的操作。我只需要udp功能,所以删掉了按键扫描的部分,一直在while循环中执行发送函数,导致我的网络调试助手一开启就没法断开udp连接,只能强制关闭。
我的解决方法是用定时器,在定时器中调用发送函数。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分