上位机图像处理和嵌入式模块部署(f407 mcu中tf卡模拟u盘)

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

        在f407开发板上面,本身是有一个usb接口的。这个usb接口也不仅仅是作为电源使用的,它还可以用来做很多的事情。一方面,可以用做私有协议的开发,这种情况下,一般在上位机侧用libusb进行开发;另外一种,我们可以通过usb,把开发板模拟成一个u盘,底层适配tf卡的数据,这样就相当于可以通过usb访问到tf卡的内容了。

1、usb电路

        本身usb的电路还是简单的。这里使用了大家常用的type c接口,主要是因为目前大家手机线都是type c的,这样比较容易开发。此外,电路部分,UDP和UDM是一对,通过33R电阻,直接转成PA12_DP、PA11_DM转到f407 cpu上面。电源部分,在5v输出的地方,添加一个二极管,防止电流倒灌。

2、usb协议的实现

        整个usb适配的部分其实有三块,大家看下下面的截图,

        第一部分是usb dirver,里面是usb的基本协议;第二部分是usb storage部分,也就是存储部分;第三部分才是我们自己需要关心的部分,也就是mcu的usb适配部分。

        整体来看,前两个部分相当于中间件代码,一般直接引用就好。需要我们关心的,主要是APP目录下的内容什么时候被这些协议调用,使用上有哪些需要注意的。

3、usb适配部分的四个文件

        还是如上图所示,整个适配有四个文件。usb_bsp.c是底层pin的初始化。usbd_desc.c则是设备描述部分,主要是告诉pc,当前usb连上去的是什么样的一个设备。usbd_storage_msd.c是底层适配部分,也就是把tf卡底层读写功能,适配到usb storage函数接口上。最后一个usbd_usr.c则是调试部分,我们在串口上面看到的一些打印都是这个地方打印出来的。

4、usbd_storage_msd.c

        所有文件中,我们可以看一下usbd_storage_msd.c这个文件。很明显,这是一种callback的模式。所有的接口都是提前固定下来的,

USBD_STORAGE_cb_TypeDef USBD_MICRO_SDIO_fops =
{STORAGE_Init,STORAGE_GetCapacity,STORAGE_IsReady,STORAGE_IsWriteProtected,STORAGE_Read,STORAGE_Write,STORAGE_GetMaxLun,(int8_t *)STORAGE_Inquirydata,
};

        我们需要做的,就是用tf卡底层读写的函数,把这些callback填满,

SD_Init
SD_ReadBlock
SD_ReadMultiBlocks
SD_WaitReadOperation
SD_WriteBlock
SD_WriteMultiBlocks
SD_GetStatus

5、编译和测试

        基本了解流程之后,剩下来的就是编译和测试。这一次除了串口打印之外,我们还需要一根type c线,连接开发板和pc电脑。测试的时候,我们发现,整个串口打印都是ok的。

        然后查看设备管理器的时候,确认usb设备被发现了,但是没有办法识别成u盘。后来check一下,发现设备提前被libusb捕获了。这个libusb驱动应该是之前开发其他项目的时候,用zadig安装的,

        这种情况下,我们需要做的就是卸载设备,同时卸载驱动,重启开发板。不出意外的话,复位之后,就可以看到u盘内容了,

        当然,不仅仅是tf卡可以被当成是u盘,norflash也可以被当成是u盘。实际开发中,如果我们需要自定义一些协议,借助于u盘的处理流程和libusb接口,相信也是可以的。

6、总结

        有了tf卡模拟u盘的而功能之后,整个开发板使用就更加简单了,tf卡也不需要拔来拔去了。不知道大家有没有印象,很多的示波器本身如果需要把文件copy到外面的时候,也是这样一种方式。对于高端的一些mcu,usb、eth这些接口速度都是比较快的,大家可以多多参考、多多使用。

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

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

相关文章

计算机网络错题答案汇总

王道学习 第1章 计算机网络体系结构 1.1 1.2

vue配置代理服务器解决跨域方法

一.vue配置代理服务器解决跨域方法一 过程如图: 1.在配置文件中设置代理服务器的地址 //vue.config.js module.exports{pages:{index:{// 入口entry:src/main.js,},},lintOnSave:false, //关闭语法检测// 开启代理服务器devServer:{proxy:http://localhost:8000//…

Java基础教程:算术运算符快速掌握

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

操作系统之银行家算法

目录 前言 银行家算法 定义 举例 策略 思路 结束语 前言 今天是坚持写博客的第16天,已经超过半个月了,希望可以继续坚持,不断积累与回顾,夯实基础知识体系的基础。我们今天来讲讲操作系统当中的另一个重要知识点——银行家…

vue2组件传参方法

一、父传子 1、$refs方法 <template><div class"father"><h1>我是父亲</h1><button click"getHeight">获取身高</button><ChildView ref"childRef"></ChildView></div> </template&…

第4章:车辆的横向优化控制

4.1 车辆动力学模型 注1&#xff1a;运动学模型和动力学模型最大的不同点在于 运动学模型是在我们不考虑车辆的受力情况下建立的&#xff08;回顾我们推导出运动学模型的过程&#xff0c;我们没有使用到任何车辆所受的外力作为公式中的已知量&#xff0c;而是直接通过 “ 车速…

云计算-云基础设施的配置 (Provisioning Cloud Infrastructure)

AWS CloudFormation (AWS CloudFormation) 它是一项服务&#xff0c;允许我们自动建模和配置所需的AWS资源。可以使用模板来实现这一目的。这个模板基本上是用JSON或YAML格式编写的。AWS CloudFormation会根据模板描述的内容来实施资源的配置和管理。我们可以成组配置和管理一组…

华为交换机的基本配置

实验拓扑&#xff1a; 实验目的&#xff1a;认识二层交换机和二层交换技术的工作原理&#xff1b;认识三层交换和三层交换技术。 三层功能简而言之就是了具有路由的功能&#xff0c;设备可以充当网关和路由器。 实验要求&#xff1a;公司的两个部门用vlan进行划分&#xff0c…

vs中.\ 与 ..\ 区别

100编程书屋_孔夫子旧书网 在 Visual Studio 中&#xff0c;. 和 .. 是表示相对路径的两个特殊符号。 . 表示当前目录&#xff0c;例如&#xff1a;.\file.txt 表示当前目录下的文件 "file.txt"。 .. 表示上一级目录&#xff0c;例如&#xff1a;..\file.txt 表示上…

喵星人必备!福派斯三文鱼猫粮,营养满分!

猫粮品牌&#xff1a;福派斯三文鱼猫粮测评体验 在快节奏的都市生活中&#xff0c;我们的宠物猫也需要适应当下的生活环境&#xff0c;并保持健康和活力。作为一名合格的铲屎官&#xff0c;我们总是关心如何为猫咪提供既健康又美味的饮食。今天&#xff0c;我有幸为大家带来一…

QT 如何在 QListWidget 的选项中插入自定义组件

有时我们需要 QListWidget 完成更复杂的操作&#xff0c;而不仅限于添加文本或者图标&#xff0c;那么就会使用到 setItemWidget 函数&#xff0c;但是这也会伴生一个问题&#xff0c;插入自定义组件后&#xff0c;QListWidget 对选项点击事件的获取会收到阻塞&#xff0c;因…

Docker安装启动Mysql

1、安装Docker&#xff08;省略&#xff09; 网上教程很多 2、下载Mysql5.7版本 docker pull mysql:5.7 3、查看镜像是够下载成功 docker images 4、启动镜像&#xff0c;生成容器 docker run --name mysql5.7 -p 13306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 5…

内网-2(代理)

一、代理概述 1、代理服务器(proxy server)&#xff1a;代理网络用户去取得网络信息&#xff0c;介于浏览器与web服务器之间的一条服务器。 注&#xff1a;为了方便&#xff0c;以下用B来代表浏览器的主机&#xff0c;S来代表服务器的主机。 2、正向代理和反向代理 正向代…

PolarCTF 2024夏季个人挑战赛 个人WP

【WEB】审计 直接给源码&#xff0c;php特性 秒了&#xff0c;有个特殊的东西 0e215962017&#xff0c;他md5后的值是本身 【WEB】扫扫看 敏感目录flag.php 【WEB】debudao 查看网页源码&#xff08;里面的flag是错的&#xff09; 查看网络 【WEB】ExX? 开题 扫一下&#…

法国工程师数电练习题——有限状态机

1. 有限状态机 1.1 问题背景描述 给定的有限状态机由其状态图表示&#xff0c;具有两个输入E1和E2以及一个输出S。状态机为下图。请为以下输入序列绘制这个Moore机的时序图&#xff1a; 1) 在t50纳秒时&#xff0c;E1E211 2) 在t150纳秒时&#xff0c;E1E200 …

1.盒模型及其应用(溢出、外边距塌陷)

一、盒模型 盒模型详解-CSDN博客 CSS学习笔记3&#xff1a;CSS三大特性、盒子模型-CSDN博客 1.盒模型组成 &#xff08;1&#xff09;padding padding和border都会撑大盒子&#xff0c;margin不会. 如果没有指定盒子的width/height&#xff0c;那么padding不会撑大盒子。 &am…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:公路智能巡检解决方案

项目背景 中国公路网络庞大&#xff0c;总里程超过535万公里&#xff0c;高速公路里程位居世界前列。面对基础设施存量的不断增长&#xff0c;公路养护管理已迈入“建管养并重”的新时代。随着养护支出的逐年攀升&#xff0c;如何提升养护效率、降低管理成本&#xff0c;成为亟…

YOLOv10:实时端到端目标检测的新突破

目标检测作为计算机视觉领域的一个核心问题&#xff0c;其关键在于能够在图像中准确识别并定位对象。随着深度学习技术的发展&#xff0c;基于深度神经网络的目标检测方法不断涌现&#xff0c;其中YOLO&#xff08;You Only Look Once&#xff09;系列算法以其优异的实时性和准…

C++类和对象下篇

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;[C] &#x1f4a8;路漫漫其修远兮 吾将而求索 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 &#x1f4d4;1、再谈构造函数&#x1f4f0;…

【C++】类和对象——构造和析构函数

目录 前言类的六个默认构造函数构造函数1.构造函数的概念2.构造函数的特性 初始化列表1.构造函数整体赋值2.初始化列表 析构函数1.析构函数的概念2.析构函数的特性 前言 类和对象相关博客&#xff1a;【C】类和对象   我们前面一个内容已经讲了关于类好对象的初步的一些知识&…