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

2024-06-05 05:44

本文主要是介绍上位机图像处理和嵌入式模块部署(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命令,正常来说,就可以看到这样的返回结果了。

这篇关于上位机图像处理和嵌入式模块部署(f407 mcu中的网络开发)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1032216

相关文章

一文深入详解Python的secrets模块

《一文深入详解Python的secrets模块》在构建涉及用户身份认证、权限管理、加密通信等系统时,开发者最不能忽视的一个问题就是“安全性”,Python在3.6版本中引入了专门面向安全用途的secr... 目录引言一、背景与动机:为什么需要 secrets 模块?二、secrets 模块的核心功能1. 基

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

Python使用smtplib库开发一个邮件自动发送工具

《Python使用smtplib库开发一个邮件自动发送工具》在现代软件开发中,自动化邮件发送是一个非常实用的功能,无论是系统通知、营销邮件、还是日常工作报告,Python的smtplib库都能帮助我们... 目录代码实现与知识点解析1. 导入必要的库2. 配置邮件服务器参数3. 创建邮件发送类4. 实现邮件

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

如何基于Python开发一个微信自动化工具

《如何基于Python开发一个微信自动化工具》在当今数字化办公场景中,自动化工具已成为提升工作效率的利器,本文将深入剖析一个基于Python的微信自动化工具开发全过程,有需要的小伙伴可以了解下... 目录概述功能全景1. 核心功能模块2. 特色功能效果展示1. 主界面概览2. 定时任务配置3. 操作日志演示

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录

Linux网络配置之网桥和虚拟网络的配置指南

《Linux网络配置之网桥和虚拟网络的配置指南》这篇文章主要为大家详细介绍了Linux中配置网桥和虚拟网络的相关方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 一、网桥的配置在linux系统中配置一个新的网桥主要涉及以下几个步骤:1.为yum仓库做准备,安装组件epel-re

Web技术与Nginx网站环境部署教程

《Web技术与Nginx网站环境部署教程》:本文主要介绍Web技术与Nginx网站环境部署教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、Web基础1.域名系统DNS2.Hosts文件3.DNS4.域名注册二.网页与html1.网页概述2.HTML概述3.