上位机图像处理和嵌入式模块部署(f407 mcu中的网络开发)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        和大家想的不太一样,只要mcu当中带有了mac ip,那么就意味着mcu本身支持了网络开发。但是如果需要mcu支持完整的tcp/ip,仅仅有mac还是不够的,硬件方面外面需要接一个phy,软件方面需要移植一下lwip。关于lwip的移植,有基于rtos的移植,以及无rtos移植两种方法,其实大家一开始学的时候,可以把重点放在无rtos的移植上面。等到对应的功能需求实在不能满足要求了,再考虑基于rtos的lwip移植方案。

        当然,使用了网络功能之后,一般来说mcu的实时性会有一点损失,但是对外交互性方便了很多。所以,这是个一体两面的问题,看自己如何选择了。实在不行,就两颗mcu,一颗处理对外交互,一颗处理业务也是可以的。

1、基本电路图

        一般mcu内部只是实现了mac层,所以外面还要接一个phy芯片。当然,现在已经有很多内部集成phy的mcu了,比如wch的307系列芯片。所有phy芯片中,lan8720a是用的比较多的一种。芯片的左半部分是和mcu的连接,右半部分是和rj45的连接。这里面,mcu对phy的控制是通过mdio、mdc这两个pin进行的。

2、mcu对phy的控制

        形式上说,mcu对phy的控制,就和mcu对spi norflash的控制是一样。spi只是一个总线标准,要发什么样的命令才能实现norflash的读写,这个就要看norflash的芯片手册才知道。phy也是一样,因此在整个项目中很容易找到这样的函数,

ETH_ReadPHYRegister
ETH_WritePHYRegister

3、函数的处理流程

        所有中间件的移植当中,lwip算是比较复杂的。我们可以从main函数开始,看一下,整个系统是怎么运行的。

        首先,调用了ETH_BSP_Config()函数,这个函数存在于LAN8742.c文件中。很明显,这是对底层驱动的适配。当然ETH_BSP_Config()也会最终调用到ETH_Init()函数,它位于stm32f429_eth.c文件,有兴趣的同学可以跟进去看一下实现过程。

        接着,我们看到流程中出现LwIP_Init()函数,这部分应该是对中间件的初始化。这个函数位于netconf.c文件。当然,中间件和底层驱动之间肯定还有适配接口,这个回头再看。

        最后,就是一个循环处理的过程。因为移植过程中没有使用rtos,所以这里就是一个while(1)的处理形式,

	while(1)
	{
		/* check if any packet received */
        if (ETH_CheckFrameReceived())
        { 
            /* process received ethernet packet */
            LwIP_Pkt_Handle();
        }

        /* handle periodic timers for LwIP */
        LwIP_Periodic_Handle(LocalTime);
	}

        很明显,它的处理流程就是,首先查看驱动有没有报文,有就送上去。没有报文的话,就处理一下定时器。

4、lwip的底层适配

        项目中lwip的底层适配是集中在lwip/ethernetif.c文件。文件中的函数主要有这么几个,

low_level_init
low_level_output
low_level_input
ethernetif_input
ethernetif_init

        其中呢,我们发现ethernetif_init会调用low_level_init,ethernetif_input会调用low_level_input,而low_level_output是在ethernetif_init里面被当成函数指针传递进去。最终呢,ethernetif_init是在LwIP_Init被调用的。所以,真正和硬件搭上关系的,其实就是以low_level开头的三个函数,

low_level_init
low_level_input
low_level_output

        继续分析,low_level_init中有ETH_Start,low_level_input里面有ETH_Get_Received_Frame,low_level_output则调用了ETH_Prepare_Transmit_Descriptors。

5、其他udp、tcp的开发

        无rtos的移植方法,决定udp、tcp都是按照异步运行的模式来处理数据的。也就是说我们编写代码的时候,就要设置好回调函数,报文来了,接收函数来处理;可以发送报文了,发送函数来处理。总之,这也算是一种还算不错的处理方法。

6、测试和验证

        这是一个ping的测试案例。首先我们编写代码的时候,就要把ip修改成和pc一个网段,

/*Static IP ADDRESS: IP_ADDR0.IP_ADDR1.IP_ADDR2.IP_ADDR3 */
#define IP_ADDR0                    192
#define IP_ADDR1                    168
#define IP_ADDR2                      0
#define IP_ADDR3                    122

/*NETMASK*/
#define NETMASK_ADDR0               255
#define NETMASK_ADDR1               255
#define NETMASK_ADDR2               255
#define NETMASK_ADDR3                 0

/*Gateway Address*/
#define GW_ADDR0                    192
#define GW_ADDR1                    168
#define GW_ADDR2                      0
#define GW_ADDR3                      1

        接着就是把pc设置成192.168.0.*网段的一个ip。编译、烧录之后,如果没有什么问题的话,我们可以在pc上面输入ping 192.168.0.122命令,正常来说,就可以看到这样的返回结果了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年信息素养大赛复赛时间已定,题库刷了吗?

刚刚,据全国青少年信息素养大赛华北赛区(北京)组委会发布公告,2024全国青少年信息素养大赛华北赛区(北京)将定于7月13日进行线下赛的复赛,7月20-21日进行线上赛(编程类)的…

模型训练篇 | yolov10来了!手把手教你如何用yolov10训练自己的数据集(含网络结构 + 模型训练 + 模型推理等)

前言:Hello大家好,我是小哥谈。YOLOv9还没捂热乎,YOLOv10就推出来了,太卷了,太快了,坐等YOLOv9000!自今年2月YOLOv9发布之后, YOLO(You Only Look Once)系列的…

c语言项目-贪吃蛇项目2-游戏的设计与分析

文章目录 前言游戏的设计与分析地图&#xff1a;这里简述一下c语言的国际化特性相关的知识<locale.h> 本地化头文件类项setlocale函数 上面我们讲到需要打印★&#xff0c;●&#xff0c;□三个宽字符找到这三个字符打印的方式有两种&#xff1a; 控制台屏幕的长宽特性&a…

[JAVASE] 异常 与 SE阶段知识点补充

目录 一. 异常 1.1 什么是异常? 1.2 异常的本质 1.3 异常的分类 1.4 如何处理异常? 1.5 自定义异常 1.6 受查异常 与 非受查异常 与 Error(重要) 二. Object类 三. 内部类 2.1 什么是内部类? 2.2 内部类的分类 2.3 常用内部类的使用 四. 总结 一. 异常 1.1 什么是异…

容声冰箱启动“以旧换新”活动,将掀起绿色消费新热潮

日前&#xff0c;容声冰箱正式启动了新一轮家电“以旧换新”活动&#xff0c;宣布从6月1日至8月31日&#xff0c;凡是通过容声自有渠道参与活动的用户&#xff0c;最高可获换新补贴1000元&#xff0c;并还有多重好礼相送。 此举旨在打造低碳、绿色、智能、时尚的家电消费新生态…

做项目管理,有哪些证书值得考?

考证可以提升技能水平&#xff0c;增强职场竞争力。 01PMP认证 PMP是受全球认可的项目管理专业人士资格认证&#xff0c;在国际上具有权威性&#xff0c;被媒体公认为继MBA、MPA之后的三大就业金字招牌。 在国内认可度也很高&#xff0c;中石油、中国石化、中兴通讯等大型企…

webf 框架源码、开发工具、数据库脚本、用户手册(233页)下载

用户手册将介绍 webf 的技术体系以及使用方法&#xff0c;便于用户快速配置出一致的开发环境&#xff0c;并能够将webf配置运行使用。 资料列表&#xff08;仅供学习参考&#xff09; webf源码持久层生成工具数据库脚本用户手册 说明&#xff1a;下载地址见文章尾部。 资源…

一图看懂 | 蓝卓热电行业解决方案

能源是人类社会发展过程中的永恒话题,热电联产作为电能和热能同时生产的能源利用形式,相较传统的火力发电具有能源利用效率高等优点,可以高效解决能源及环境问题。目前&#xff0c;世界各国都将热电联产作为更高效、更环保的能源供给体系而有效措施大力推广。 如何降本增效、减…

NeuralForecast 多变量的处理 包括训练和推理

NeuralForecast 多变量的处理 包括训练和推理 flyfish 两个excel表格合并后的结果 unique_id ds y ex_1 ex_2 ex_3 ex_4 0 HUFL 2016-07-01 00:00:00 -0.041413 -0.500000 0.166667 -0.500000 -0.001370 1 …

“滴滴打车,用友入账”,YonSuite商旅费控助力企业“降低成本”更进一步

在当今竞争激烈的商业环境中&#xff0c;企业对于成本控制和效率提升的需求日益迫切。特别是在商旅管理方面&#xff0c;如何有效整合资源、优化流程、降低费用&#xff0c;成为了成长型企业关注的焦点。用友YonSuite商旅费控作为用友集团旗下的重要产品&#xff0c;凭借其卓越…

SolidWorks功能强大的三维设计软件下载安装,SolidWorks最新资源获取!

SolidWorks&#xff0c;它凭借出色的三维建模能力&#xff0c;使得设计师们能够轻松构建出复杂且精细的机械模型&#xff0c;大大提升了设计效率和质量。 在机械设计领域&#xff0c;SolidWorks凭借其丰富的工具和特性&#xff0c;让设计师们能够随心所欲地挥洒创意。无论是零…

Linuxftp服务002本地登入

本期主要讲述的是ftp服务中的本地用户登入。 操作系统 CentOS Stream 9 操作步骤 首先我们先建立一个ftp组的用户&#xff0c;并设置密码。 [rootlocalhost ~]# useradd -g ftp wq [rootlocalhost ~]# echo 1 |passwd --stdin wq 更改用户 wq 的密码 。 passwd&#xff1a…

SpringBoot中的WebMvcConfigurationSupport和WebMvcConfigurer

在SpringBoot中可以通过以下两种方式来完成自定义WebMvc的配置&#xff1a; &#xff08;1&#xff09;继承WebMvcConfigurationSupport类 &#xff08;2&#xff09;实现WebMvcConfigurer接口 通过这两种方式完成的WebMvc配置存在差异&#xff0c;本文将对此作简单说明与区…

Selenium with Python Behave(BDD)

一、简介 Python语言的行为驱动开发&#xff0c;Behavior-driven development&#xff0c;简称BDD. "Behavior-driven development (or BDD) is an agile software development technique that encourages collaboration between developers, QA and non-technical or bu…

顶顶通呼叫中心中间件-区号号码自动加0(mod_cti基于FreeS WITCH)

顶顶通呼叫中心中间件-区号号码自动加0(mod_cti基于FreeSWITCH) 本地区号。如果配置了本地区号&#xff0c;被叫手机号码归属地和本地区号不同会自动加0 一、导入号码归属地 1、下载ccadmin安装包并且把手机号码归宿地解压出来 1、下载ccadmin安装包 Windows版本下载地址&…

小短片创作-理论知识(五)

1、网格体绘制 1.UE5打开Megascan插件的材质混合器&#xff0c;创建混合材质&#xff0c;最多选择3个材质进行混合&#xff0c; 2.通过模式->网格体绘制&#xff0c;进入网格体绘制模式&#xff0c;通过select选择一个平面进行绘制&#xff0c;然后通过paint进行绘制&am…

opencv笔记(13)—— 停车场车位识别

一、所需数据介绍 car1.h5 是训练后保存的模型 class_directionary 是0&#xff0c;1的分类 二、图像数据预处理 对输入图片进行过滤&#xff1a; def select_rgb_white_yellow(self,image): #过滤掉背景lower np.uint8([120, 120, 120])upper np.uint8([255, 255, 255])#…

09、进程和计划任务管理

9.1 查看和控制进程 程序是保存在外部存储介质(如硬盘)中的可执行机器代码和数据的静态集合&#xff0c;而进程是在 CPU 及内存中处于动态执行状态的计算机程序。在 Linux操作系统中&#xff0c;每个程序启动后可以创建一个或多个进程。例如&#xff0c;提供 Web 服务的 httpd …

计算机网络学习记录 网络层 Day4(下)

计算机网络学习记录 网络层 Day4 &#xff08;下&#xff09; 你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客 这是我的 github https://github.com/Qiuner ⭐️ ​ gitee https://gitee.com/Qiuner &#x1f339; 如果本篇文章帮到了你 不妨点个赞吧~ 我…

期权懂题库免费!期权开户测试难吗?多少分算合格通过?

今天带你了解期权懂题库免费&#xff01;期权开户测试难吗&#xff1f;多少分算合格通过&#xff1f;期权开户测试通常要求投资者达到一定的合格分数&#xff0c;以确保他们具备足够的理解和知识来参与期权交易。 期权开户测试难吗&#xff1f; 期权开户测试的难度因人而异&am…