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

2024-06-03 09:12

本文主要是介绍上位机图像处理和嵌入式模块部署(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这些接口速度都是比较快的,大家可以多多参考、多多使用。

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



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

相关文章

UnrealScriptIDE调试环境部署

先安装vs2010   再安装VSIsoShell.exe, 下载地址 https://pan.baidu.com/s/10kPNUuDGTbWXbz7Nos-1WA       fd3t   最后安装unside,下载地址 https://archive.codeplex.com/?p=uside  安装中间有一步选择Binary文件夹要选对路径。   安装好以后,启动 UDKDe

iptables(7)扩展模块state

简介         前面文章我们已经介绍了一些扩展模块,如iprange、string、time、connlimit、limit,还有扩展匹配条件如--tcp-flags、icmp。这篇文章我们介绍state扩展模块  state          在 iptables 的上下文中,--state 选项并不是直接关联于一个扩展模块,而是与 iptables 的 state 匹配机制相关,特

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

python 在pycharm下能导入外面的模块,到terminal下就不能导入

项目结构如下,在ic2ctw.py 中导入util,在pycharm下不报错,但是到terminal下运行报错  File "deal_data/ic2ctw.py", line 3, in <module>     import util 解决方案: 暂时方案:在终端下:export PYTHONPATH=/Users/fujingling/PycharmProjects/PSENe

[FPGA][基础模块]跨时钟域传播脉冲信号

clk_a 周期为10ns clk_b 周期为34ns 代码: module pulse(input clk_a,input clk_b,input signal_a,output reg signal_b);reg [4:0] signal_a_widen_maker = 0;reg signal_a_widen;always @(posedge clk_a)if(signal_a)

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Serv

青龙面板部署通用教程,含服务器、路由器、X86等部署方法

1. 拉取镜像/更新镜像 docker pull whyour/qinglong:latest 2. 删除镜像 docker rmi whyour/qinglong:latest 3. 启动容器 普通服务器 docker run -dit \-v $PWD/ql/config:/ql/config \-v $PWD/ql/log:/ql/log \-v $PWD/ql/db:

宝塔面板部署青龙面板教程【简单易上手】

首先,你得有一台部署了宝塔面板的服务器(自己用本地电脑也可以)。 宝塔面板部署自行百度一下,很简单,这里就不走流程了,官网版本就可以,无需开心版。 首先,打开宝塔面板的软件商店,找到下图这个软件(Docker管理器)安装,青龙面板还是安装在docker里,这里依赖宝塔面板安装和管理docker。 安装完成后,进入SSH终端管理,输入代码安装青龙面板。ssh可以直接宝塔里操作,也可以安装ssh连接

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把

[Centos7] 部署Zabbix5.0

目录 0 卸载 Zabbix1 准备工作1.1 关闭防火墙1.2 关闭SELinux1.3 重启服务器1.4 安装MySQL 2 配置 Zabbix yum 源2.1 安装zabbix的软件仓库配置包2.2 安装 Software Collections 仓库2.3 修改 Zabbix 仓库配置文件 3 安装 Zabbix3.1 遇到报错Requires: libmysqlclient.so