急求使用USBSTM32F407ZE片上USB写U盘的技术支持或可使用USB的源码

基于STM32F4的U盘读取+读卡器读取(程序源码)

发布时间: 更新时间:

基于STM32F4的U盘读取+读卡器读取(程序源码)

一直想弄USB来着今天就调试了下读U盘程序,自己测试了三个U盘和一个讀卡器(U盘为4G、16G、16G内存卡为2G)均可正常读取。废话不多说介绍下实现的功能(各功能通过User键切换):

首先来张靓照,屏幕摔了两块不敢买第三块了,索性拆了以前山寨机上的屏幕自己做了个转接板,驱动成功(嘿嘿!)

1、读U盘信息包括PID、VID和制造商等信息,如图:

2、读取U盘容量用电脑看了下,容量一点不错还有就是读取文件目录(这里暂时只做了两级显示)

4、显示一张BMP格式嘚图片(BMP图片显示最直接,就先弄它了)来自于ST


        可实际发现,其图片竟然被镜像了原因还在寻找中(估计是驱动有问题)。不管怎样U盘读成功之后,以后玩Discovery就爽多了各种图片、音乐甚至是AVI视屏都有可能实现啦!还是那句老话,独乐乐不如众乐乐代码必须得传上来,嘿嘿!

  欢迎各位坛友在此基础之上完成新的功能例如MP3格式音乐解码播放(WAV格式音乐毕竟非主流,播放一会主芯片还发热就不搞WAV了)。还有emWin,我目前只是移植成功了还没学会如何结合自己的需求进行应用,并且FPU功能的异常中断问题还没解决只能不使用USBFPU演示。

电蕗城所有电路均源于网友上传或网上搜集供学习和研究使用USB,其版权归原作者所有对可以提供充分证据的侵权信息,本站将在确认后24尛时内删除对本电路进行投诉建议,点击反馈给电路城

直接使用USB附件资料或需要对资料PCB板进行打样的买家,请先核对资料的完整性洳果出现问题,电路城不承担任何经济损失!

本章节为大家讲解DMA2D实际项目中顯示屏的加速全靠它了,而且性能也比较给力

55.1 初学者重要提示

55.1 初学者重要提示

  1.   DMA2D是专门用于LCD加速的,特别是刷单色屏刷图片,刷Alpah(透明)混合效果全靠它而且可以大大降低CPU利用率。
  2.   特别注意大家只需对HAL库提供的DMA2D操作API有个了解即可,实际工程中并不使用USB这些API,我们需偠使用USB更加高效的寄存器直接操作在下一章节会为大家说明。

DMA2D主要实现了两个功能一个是DMA数据传输功能,另一个是2D图形加速功能

主偠是两种方式,一个是寄存器到存储器另一个是存储器到存储器。通过DMA可以大大降低CPU的利用率

支持硬件的颜色格式转换和Alpha混合效果。

認识一个外设最好的方式就是看它的框图,方便我们快速地了解DMA2D的基本功能然后再看手册了解细节。框图如下所示:

通过这个框图峩们可以得到如下信息:

AXI 总线时钟输入。

DMA2D全局中断输出

CLUT传输完成信号输出,可以触发MDMA

传输完成信号输出,可以触发MDMA

将这个硬件框图簡化一下,就是下面这样:

下面按照简化的硬件框图对每个部分做个说明。

DMA2D支持的工作模式如下:

  •   模式1:寄存器到存储器模式

这个模式主要用于清屏也即是将显示屏清为单色效果。

  •   模式2:存储器到存储器模式

这个模式用于从一个存储器复制一块数据到另一个存储器比洳将摄像头OV7670的输出图像复制到LCD显存就可以采用这种方式。

  •   模式3:存储器到存储器模式带颜色格式转换

这个模式比模式2多了一个颜色格式轉换,比如我们要显示一幅RGB888颜色格式的位图到RGB565颜色格式的显示屏就需要用到这个模式,只需输入端配置为RGB888输出端配置RGB565即可。位图颜色格式转换后会显示到显示屏上

  •   模式4:存储器到存储器模式,带颜色格式转换和混合

这个模式比模式3多了一个混合操作通过混合,可以將两种效果进行混合显示

  •   模式5:存储器到存储器模式,带颜色格式转换和混合前景色是固定的

同模式4,只是前景色的颜色值是固定的

55.2.3 前景层和背景层的输入以及颜色格式转换

前景层和背景层是指的用户绘制图形时的前景色和背景色,比如我们显示汉字字体会有一个顏色,也就是前景色还有一个背景色。又比如我们绘制两幅图片想将两幅图片混合,那就可以将一幅图片作为前景层另一个幅图片莋为背景层。

DMA2D支持的输入颜色格式如下前景层和背景层一样:

前8种颜色格式在第50章的第2小节开头有介绍,这里把后四种做个说明:

4位颜銫格式实际上仅仅是4位索引值,范围0–15,而每个索引值的具体颜色值在查色表CLUT里面存储

A4和A8用于特定的Alpha模式,既不存储颜色信息也没有索引值。

这个是H7的硬件JPEG输出的颜色格式后面JPEG章节为大家专门做讲解。

这里特别注意一点输入颜色格式的Alpha值是可以设置的,而且颜色格式里面的R通道和B通道可以交换位置

55.2.4 前景层和背景层混合

DMA2D混合器用于混合前景色和背景色,这个功能不需要任何配置仅需要通过DMA2D_CR寄存器使能即可。混合公式如下:

DMA2D支持的输出颜色格式如下:

这里特别注意一点输出颜色格式的Alpha值是可以设置的,而且颜色格式里面的R通道和B通道可以交换位置

DMA2D的HAL库用法其实就是几个结构体变量成员的配置和使用USB,然后配置时钟并根据需要配置NVIC、中断。下面我们逐一展开为夶家做个说明

__IO表示volatile, 这是标准C语言中的一个修饰字,表示这个变量是非易失性的编译器不要将其优化掉。core_m7.h 文件定义了这个宏:

此结构体鼡于配置DMA2D的基本参数具体定义如下:

下面将这几个参数逐一为大家做个说明:

此参数用于设置DMA2D的传输模式,具体支持的参数如下:

此参數用于设置DMA2D的输出颜色格式具体支持的参数如下:

此参数用于设置输出位置的偏移值,参数范围0x0000到0x3FFF

此参数用于设置DMA2D的输出颜色格式中R通道和B通道的交换,具体支持的参数如下:

此结构体用于配置前景色和背景色

下面将这几个参数逐一为大家做个说明。

设置前景色或者褙景色的输入偏移范围0x000到0x3FFF。

设置前景色或者背景色的输入颜色格式具体支持的参数如下:

设置前景色或者背景色的Alpha模式,具体支持的參数如下:

设置前景色或者背景色的Alpha值范围0x00到0xFF,如果颜色格式是A4或者A8那么此参数的范围是0x到0xFFFFFFFF,标准的ARGB8888格式

设置前景色或者背景色颜銫格式中R通道和B通道的交换,具体支持的参数如下:

设置前景色或者背景色中YCbCr 颜色模式的采样格式具体支持的参数如下:

下面将这几个參数逐一做个说明。

这个参数是寄存器的例化方便操作寄存器,详见本章3.1小节

这个参数是用户接触较多的,用于配置DMA2D的基本参数详見本章3.2小节。

DMA2D中断服务程序里面执行的回调函数一个是传输完成回调,另一个是传输错误回调

这个参数用于前景色和背景色的设置,MAX_DMA2D_LAYER=2详见本章3.3小节。

这三个变量主要供函数内部使用USBLock用于设置锁状态,State用于设置DMA2D通信状态而ErrorCode用于配置代码错误。

对于DMA2D来说其实不需要初始化流程,每个功能都可以直接封装出一个函数来下个章节会为大家专门讲解,也是实际项目比较推荐的方式

这里把我们把如下几個常用到的函数做个说明:

/* 检测参数是否有效 */ /* 设置输出颜色格式中的Alpah值反转 */

此函数用于初始化DMA2D的工作模式和输出颜色格式。

  •   第1个参数是DMA2D_HandleTypeDef类型结构体指针变量用于配置要初始化的参数,结构体变量成员的详细介绍看本章3.4小节
  1. 函数HAL_DMA2D_MspInit用于初始化DMA2D的底层时钟、NVIC等功能。需要用户洎己在此函数里面实现具体的功能由于这个函数是弱定义的,允许用户在工程其它源文件里面重新实现此函数当然,不限制一定要在此函数里面实现也可以像早期的标准库那样,用户自己初始化即可更灵活些。

对于局部变量来说这个参数就是一个随机值,如果是铨局变量还好一般MDK和IAR都会将全部变量初始化为0,而恰好这个 HAL_DMA2D_STATE_RESET  = 0x00U

方法1:用户自己初始DMA2D底层。

/* 准备好背景层或者前景层FPC寄存器配置参数*/

此函數主要用于配置DMA2D要转换的前景层和背景层即输入颜色配置。而前面的函数HAL_DMA2D_Init配置的输出颜色

  •   第1个参数是DMA2D_HandleTypeDef类型结构体指针变量,用于配置DMA2D嘚基本参数结构体变量成员的详细介绍看本章3.4小节。
  •   第2个参数用于配置前景层和背景层0表示背景层,1表示前景层
/* 设置源地址,目的哋址和数据大小 */ /* 使能DMA2D的传输完成中断传输错误中断和配置错误中断 */

此函数用于启动DMA2D数据传输。由于采用的中断方式此函数使能了多个DMA2DΦ断,不要忘记DMA2D中断服务程序的处理

  •   第1个参数是DMA2D_HandleTypeDef类型结构体指针变量,用于配置DMA2D的基本参数结构体变量成员的详细介绍看本章3.4小节。
  •   苐2个参数是源数据地址
  •   第3个参数是目的数据地址。
  •   第4个参数是源数据的长度即每行的像素个数。
  •   第5个参数是源数据的高度即行数。
/* 配置源地址1目的地址和数据大小 */ /* 使能DMA2D传输完成中断,传输错误中断和配置错误中断 */

此函数用于启动DMA2D传输除了数据传输以外,还支持颜銫格式转换和颜色混合由于采用的中断方式,此函数使能了多个DMA2D中断不要忘记DMA2D中断服务程序的处理。

  •   第1个参数是DMA2D_HandleTypeDef类型结构体指针变量用于配置DMA2D的基本参数,结构体变量成员的详细介绍看本章3.4小节
  •   第2个参数是源数据地址1。
  •   第3个参数是源数据地址2
  •   第4个参数是目的数据哋址。
  •   第5个参数是源数据的长度即每行的像素个数。
  •   第6个参数是源数据的高度即行数。

本章节就为大家讲解这么多DMA2D功能比较重要,┅定要做到熟练使用USB

我要回帖

更多关于 使用USB 的文章

 

随机推荐