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

news2025/1/12 23:18:05

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

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

/**
 * NO_SYS==1: Provides VERY minimal functionality. Otherwise,
 * use lwIP facilities.
 */
#define NO_SYS                  1

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

1、基本电路图

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

        另外电路中值得一说的,就是一般的phy都需要一个外部输入晶振的。这里的mc01,来自于mcu f407,也就是说它的晶振来自于f407的输入。因此代码中也就多了下面这部分内容,

void mcoinit(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
  
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//PA8
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//50MHz

    GPIO_Init(GPIOA, &GPIO_InitStructure); 
    RCC_MCO1Config(RCC_MCO1Source_HSE, RCC_MCO1Div_1);
}

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命令,正常来说,就可以看到这样的返回结果了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用友U8 表单视图名查询方法

比如要获取【采购订单】表名和视图名 具体操作如下: 先打开写字板,然后进入U8的采购订单做单界面,按住键盘上的,CtrlshiftC,有的是CtrlC,点增加 然后CtrlV到写字板 key就是采购订单的值 打开SQL 输入语句…

《大道平渊》· 拾贰 —— 天下大事必作于细:做好每一件小事,必然大有所成!

《平渊》 拾贰 "天下难事必作于易,天下大事必作于细。" 社群一位大佬最近在研究新项目, 他做事的 "方法论" 令我深受启发。 他在测试项目时, 每一步都做的非常细致: 整个项目的测试都被划分为一件件小事, 然后有条不紊地推进…… …

React+TS前台项目实战(六)-- 全局常用组件Button封装

文章目录 前言Button组件1. 功能分析2. 代码注释说明3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局按钮组件封装,可根据UI设计师要求自定义修改。 Button组件 1. 功能分析 (1)可以通过className属性自定义按钮样式,传递…

多客圈子论坛系统 httpGet 任意文件读取漏洞复现

0x01 产品简介 多客圈子论坛系统是一种面向特定人群或特定话题的社交网络,它提供了用户之间交流、分享、讨论的平台。在这个系统中,用户可以创建、加入不同的圈子,圈子可以是基于兴趣、地域、职业等不同主题的。用户可以在圈子中发帖、评论、…

运营商大模型进化之路:策略分野与AI未来的璀璨展望

运营商大模型的进化路线“分野”与AI大模型的璀璨前景 随着人工智能技术的飞速发展,AI大模型已成为推动科技进步和产业变革的重要力量。在这个浪潮中,运营商作为通信行业的巨头,也纷纷投入大模型的研发与应用,探索出各自独特的进化…

css 剪切属性clip-path

实现效果如下&#xff1a; <!DOCTYPE html> <html><head><style>.clipped {width: 200px;height: 200px;background-color: #3498db;clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 30% 100%);}</style></head><body><div cla…

弘君资本股市资讯:增逾20倍!百亿细分龙头利好来了

5月以来&#xff0c;A股进入了时间短的成绩发表空档期&#xff0c;而百亿化工细分龙头齐翔腾达&#xff0c;则以一份高增的成绩预告&#xff0c;摆开半年报成绩预告发表序幕。 6月10日晚间&#xff0c;齐翔腾达发表的成绩预告显现&#xff0c;上半年估计完成归母净赢利1.3亿元…

全球Web数据库管理工具推荐(ChatGPT 4o的推荐是什么样?)

在现代数据管理和开发中&#xff0c;Web数据库管理工具变得越来越重要。这些工具不仅提供了直观的用户界面&#xff0c;还支持跨平台操作&#xff0c;方便用户在任何地方进行数据库管理。 目录 1. SQLynx 2. phpMyAdmin 3. Adminer 4. DBeaver 5 结论 以下是几款推荐的Web…

家具板材ENF级甲醛释放量检测 板材甲醛含量测定

ENF级甲醛释放量检测 ENF级是指甲醛释放量非常低的板材&#xff0c;它代表了无醛添加的最高级别。根据最新的国家标准GB/T 39600-2021&#xff0c;ENF级板材的甲醛释放量不得超过0.025 mg/m。这个标准比欧洲的E1级&#xff08;甲醛释放量≤0.124 mg/m&#xff09;和美国的P2标准…

Doris 2.1 元数据更新

metadata_refresh_interval_sec 20

Java Opencv识别图片上的虫子

最近有个需求&#xff0c;希望识别图片上的虫子&#xff0c;对于java来说&#xff0c;图像识别不是很好做。在网上也搜索了很多&#xff0c;很多的代码都是不完整&#xff0c;或者下载下载报错&#xff0c;有的写的很长看不懂。所以自己试着用java的opencv写了一段代码。发现识…

【渗透测试】|dvwa命令注入乱码问题

法一&#xff1a; 解决方法如下&#xff1a; 1、按住winr&#xff0c;在运行框中输入cmd弹出命令行&#xff0c;在命令行中输入“control intl.cpl” 2、这个命令是使用control命令行工具来打开"区域和语言设置"对话框 3、选中对话框中的管理选项卡 4、可以看到这里…

跨平台电商数据对比:淘宝与他者的较量

——比较分析淘宝和其他电商平台&#xff08;如京东、拼多多&#xff09;的数据&#xff0c;探索各自的优势和市场定位 在当今的电子商务领域&#xff0c;跨平台电商数据对比成为了企业制定策略和优化运营的重要工具。淘宝作为中国最大的电商平台之一&#xff0c;与京东、拼多…

HTML、HTML5一览

文章目录 HTML简介标签基本标签格式化文本链接图像块级元素列表表格框架表单实体 HTML5 此篇用于优化csdn第一篇文章 HTML 简介 HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言: HyperText Markup Language HTML 不是一种编程语言&#xff0c;而是一种标记语言…

进口电动三通调节阀的应用-美国品牌

进口电动三通调节阀在多个工业领域中发挥着重要作用&#xff0c;通过精确的流体控制&#xff0c;提高生产效率、降低能源消耗、保证产品质量和安全。其应用主要体现在以下几个方面&#xff1a; 化工领域&#xff1a; 用于化工反应过程中的流体调控、物料输送、加热、冷却、混合…

记录22.04 安装 显卡驱动 以及一些问题

一. 前期准备 按照Ubuntu22.04 安装NVIDIA显卡驱动_ubuntu2204安装nvidia显卡驱动-CSDN博客来 1.更新软件列表和安装必要软件、依赖 sudo apt-get update #更新软件列表sudo apt-get install gsudo apt-get install gccsudo apt-get install make2.禁用nouveau (nouveau是…

弘君资本:光刻机、存储芯片概念拉升 同益股份、上海贝岭等涨停

光刻机概念11日盘中再度走强&#xff0c;到发稿&#xff0c;双乐股份、同益股份、东方嘉盛、盛剑环境等涨停&#xff0c;飞凯资料涨近10%&#xff0c;南大光电涨超7%。 存储芯片概念亦拉升&#xff0c;到发稿&#xff0c;雅创电子涨超12%&#xff0c;万润科技、上海贝岭、好上…

简易概况广告变现

广告变现是指媒体或平台通过向用户展示广告主的广告&#xff0c;从而获得收入的过程。 广告变现就像是一个店主&#xff0c;他需要一个吸引人的店面&#xff0c;提供优质的内容和服务&#xff0c;然后在店里摆放一些别人的商品或服务&#xff0c;每当有客人看了或买了这些商品或…

深圳比创达电子|EMI电磁干扰行业:挑战到突破,电子产业新未来

随着电子技术的飞速发展&#xff0c;电磁干扰&#xff08;EMI&#xff09;问题日益凸显&#xff0c;成为影响电子设备性能和稳定性的重要因素。EMI电磁干扰行业作为解决这一问题的关键领域&#xff0c;正面临着前所未有的机遇与挑战。 一、引言&#xff1a;EMI电磁干扰行业的崛…