【正点原子STM32连载】 第六十一章 USB读卡器(Slave)实验摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子APM32F407最小系统板
2)平台购买地址:https://detail.tmall.com/item.htm?id=609294757420
3)全套实验源码+手册+视频下载地址: http://www.openedv.com/thread-340252-1-1.html##

第六十一章 USB读卡器(Slave)实验

本章将介绍使用APM32F407作为USB从设备,模拟出USB读卡器,使得PC与APM32F407通过USB连接后,能够访问与APM32F407连接的SD中的数据。通过本章的学习,读者将学习到APM32F407作为USB从设备模拟出USB读卡器的使用。
本章分为如下几个小节:
61.1 硬件设计
61.2 程序设计
61.3 下载验证

61.1 硬件设计
61.1.1 例程功能

  1. 程序运行后,模拟出USB读卡器,此时使用USB数据线与PC进行连接,连接成功后LCD上会有相应的提示信息,并且PC上会识别出一个名为“ALIENTEK SD Disk USB Device”的磁盘驱动器,可使用PC对SD卡进行读写操作
  2. LED1亮起,提示正在访问SD卡
  3. LED0闪烁,指示程序正在运行
    61.1.2 硬件资源
  4. LED
    LED0 - PF9
    LED1 - PF10
  5. 正点原子 2.8/3.5/4.3/7/10寸TFTLCD模块(仅限MCU屏,16位8080并口驱动)
  6. SD卡(SDIO驱动)
  7. USB_OTG
    61.1.3 原理图
    本章实验使用USB接口与PC进行连接,开发板板载了一个USB OTG接口,用于连接其他USB设备,USB OTG接口与MCU的连接原理图,如下图所示:
    在这里插入图片描述

图61.1.3.1 USB OTG接口与MCU的连接原理图
61.2 程序设计
61.2.1 Geehy的OTG驱动库
Geehy针对APM32F4的OTG驱动库为APM32F4xx_OTG_Driver,该OTG驱动库由Geehy提供,下载链接为https://www.geehy.com/apm32?id=47,也可以在A盘8,APM32参考资料中找到。
APM32F4xx_OTG_Driver的根目录下包含了三个文件夹,如下表所示:
文件夹 描述
Hardware 示例工程中与硬件相关的驱动包
Library OTG驱动库本体
Project 示例工程
表61.2.1.1 APM32F4xx_OTG_Driver根目录文件夹描述
可见最最重要的是Library文件夹,该文件夹的文件结构,如下图所示:
在这里插入图片描述

图61.2.1.1 Library文件夹结构
从上图中可以看出,Geehy的OTG驱动针对USB的主模式和从模式都提供了驱动,本书主要介绍USB从模式的应用,因此主要关注“Core_Device”和“Driver”文件夹。
“Driver”文件夹中就是USB的基本驱动文件,是无论作何应用都需要使用到的驱动文件。
“Core_Device”文件夹中有包含了“Application”和“Protocol”两个文件夹,其中“Protocol”文件夹中是与USB协议有关的驱动,而“Application”文件夹中是与具体应用有关的驱动文件,例如本章要实现的USB读卡器就需要用到“MSC”文件夹中的驱动文件,后续的USB虚拟串口实验就需要使用到“VCP”文件夹中的驱动文件,而“HID”文件夹中包含的驱动是与人体学接口设备相关应用中需要使用的驱动文件,例如鼠标、键盘等。
Geehy的OTG驱动就介绍这么多,若读者想更加深入地了解USB的驱动,需要先具备一定的USB相关知识。
61.2.2 实验应用代码
本章实验的应用代码,如下所示:

int main(void)
{
    /* 仅保留关键代码,其余代码省略 */
    
    /* MSC初始化 */
    USBD_MSC_Init();
    
    while (1)
    {
    		t++;
    		
    		/* USB状态改变 */
    		if (usb_sta != g_usb_state_reg)
    		{
    			lcd_fill(30, 190, 240, 190 + 16, WHITE);
    			
    			/* 正在写入 */
    			if (g_usb_state_reg & 0x01)
    			{
    				LED1(0);
    				lcd_show_string(30, 190, 200, 16, 16, "USB Writing...", RED);
    			}
    			
    			/* 正在读取 */
    			if (g_usb_state_reg & 0x02)
    			{
    				LED1(0);
    				lcd_show_string(30, 190, 200, 16, 16, "USB Reading...", RED);
    			}
    			
    			/* 写入错误 */
    			if (g_usb_state_reg & 0x04)
    			{
    				lcd_show_string(30, 210, 200, 16, 16, "USB Write Err ", RED);
    			}
    			else
    			{
    				lcd_fill(30, 210, 240, 230 + 16, WHITE);
    			}
    			
    			/* 读取错误 */
    			if (g_usb_state_reg & 0x08)
    			{
    				lcd_show_string(30, 230, 200, 16, 16, "USB Read  Err ", RED);
    			}
    			else
    			{
    				lcd_fill(30, 230, 240, 250 + 16, WHITE);
    			}
    			
    			usb_sta = g_usb_state_reg;  
    		}
    		
    		/* USB连接状态改变 */
    		if (device_sta != g_device_state)
    		{
    			/* 连接建立 */
    			if (g_device_state == 1)
    			{
    				lcd_show_string(30, 170, 200, 16, 16, "USB Connected    ", RED);
    			}
    			/* 连接断开 */
    			else
    			{
    				lcd_show_string(30, 170, 200, 16, 16, "USB DisConnected ", RED);
    			}
    			
    			device_sta = g_device_state;
    		}
    }
}

从上面的代码中可以看出,在调用完OTG驱动库中的MSC初始化函数USBD_MSC_Init()后并不断地获取USB的读写状态和连接状态,并在LCD上进行显示。
在调用完函数USBD_MSC_Init()后,OTG驱动库便会自动模拟出一个USB读卡器,当然也需要实现配置好USB读卡器模拟出的设备信息,以及读写、初始化SD卡等的操作,这些操作全部在usbd_storage_disk.c文件中完成了,请读者自行参考该文件。
61.3 下载验证
在完成编译和烧录操作后,将SD卡正确插入开发板板载的SD卡卡座,可以看到LCD上显示了SD卡的容量信息以及USB的连接状态,若开发板还未通过USB OTG接口与PC进行连接,那么LCD上会有USB连接断开的提示,此时可以将开发板通过USB OTG接口与PC进行连接,稍等一会后,可以看到LCD上显示了USB已连接的提示,并且PC上也多出了一个磁盘,磁盘中的文件就是SD卡中的文件,并且在PC上也可以直接对SD卡中的文件进行读写操作。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UG\NX二次开发 创建对象属性UF_ATTR_set_user_attribute

文章作者:里海 来源网站:里海NX二次开发3000例专栏 简介 创建对象属性UF_ATTR_set_user_attribute,这是一个新函数用于替代UF_ATTR_assign,旧版本NX是用UF_ATTR_assign函数创建、更新属性值,请参照这篇文章《UG\NX二次开发 创建对象属性UF_ATTR_assign》 下面是这个新函数…

在Windows 10中,主要有两种方法进入UEFI固件设置,包括传统的方法

在计算机上,基本输入输出系统(BIOS)是一种重要的底层软件,位于主板的一个芯片上,它负责基本操作,如引导和配置硬件(鼠标、键盘、内存、处理器等)。统一可扩展固件接口(UE…

加速产品成长:待完成工作框架如何改变游戏规则

待完成的工作 (JTBD) 框架旨在认识到客户心中有特定的目标,我们将这些目标称为工作。然后,客户“租用”产品或服务来帮助他们实现特定目标。该产品成为客户试图完成的工作的解决方案。如果一种产品或服务有效地帮助客户实现目标,他们就更有可…

C++ :运算符重载

运算符重载&#xff1a; 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另一种功能&#xff0c;以适应不同的数据类型 加号运算符重载&#xff1a; 作用&#xff1a;实现两个自定义数据类型相加的运算 1.成员函数实现 号运算符重载 #include <io…

恋上数据结构与算法之二叉堆

文章目录 需求分析Top K 问题堆堆的基本接口设计二叉堆(Binary Heap)最大堆添加思路交换位置的优化实现 删除思路流程图解实现 replace批量建堆自上而下的上滤自下而上的下滤效率对比复杂度计算实现 完整代码 最小堆比较器解析Top K 问题问题分析代码实现内部方法分析问题 2 堆…

智慧科研助力科研数据的分析处理

如今&#xff0c;科研领域的发展日新月异&#xff0c;数据量也越来越大。这时&#xff0c;智慧科研可视化技术不仅为科研人员提供了快速高效的数据分析手段&#xff0c;而且为科研工作的推进提供了新的思路和方法。通过可视化手段&#xff0c;我们可以将各种数据、信息、知识以…

可行性研究:2023年废旧金属回收行业前景及市场数据分析

废品收购是再生资源行业的重要业务之一。是指将各种废弃物品分类后按不同种类和性能卖给不同的生产厂商或直接出售给再制造厂家&#xff08;如重新使用报废汽车拆解的零件&#xff09;。废旧金属是指暂时失去使用价值的金属或合金制品&#xff0c;一般的废旧金属都含有有用的金…

unity学习笔记12

一、物理系统 如何让一个球体受到重力的影响&#xff1f; 只要给物体添加刚体组件&#xff08;Rigidbody&#xff09;&#xff0c;就可以使其受到重力影响 1.刚体&#xff08;Rigidbody&#xff09;&#xff1a; 刚体是一个组件&#xff0c;用于使游戏对象受到物理引擎的控制。…

Antd可编辑表格初始数据为空,单元格不能编辑的解决办法

黑科技超简单: 给table表格增加行className rowClassName{() > editable-row} 然后设置可编辑表格的行样式 .editable-row:hover .editable-cell-value-wrap {border: 1px solid #d9d9d9;border-radius: 4px;padding: 4px 11px;}.editable-cell-value-wrap {padding: 5px…

网站使用高防CDN进行防护有哪些优势

随着互联网的快速发展&#xff0c;个人网站、企业网站也越来越多&#xff0c;网站之间的竞争也越来越强。网站间越来越大的竞争压力&#xff0c;也时长会衍生一些不法行为&#xff0c;如以攻击为手段&#xff0c;使对方网站陷入瘫痪。针对网站的攻击&#xff0c;市场也是有推出…

【趣味篇】Scratch之管道马里奥

【作品展示】管道马里奥 操作&#xff1a;点击小绿旗进入游戏主页面&#xff0c;通过鼠标控制马里奥左右移动踩在管道上拿到更多金币。

开启虾皮购物新旅程,快速注册买家号

想要在shopee上畅享丰富的购物体验吗&#xff1f;那就让我们一起迈出第一步&#xff0c;注册一个属于你自己的虾皮买家号吧&#xff01; 1. 访问虾皮平台 首先&#xff0c;打开你的浏览器&#xff0c;输入虾皮平台网址&#xff0c;点击注册或登录按钮。这将引导你进入注册界面…

【虚拟机】Docker基础 【一】

1.1.部署MySQL 首先&#xff0c;我们利用Docker来安装一个MySQL软件&#xff0c;大家可以对比一下之前传统的安装方式&#xff0c;看看哪个效率更高一些。 如果是利用传统方式部署MySQL&#xff0c;大概的步骤有&#xff1a; 搜索并下载MySQL安装包上传至Linux环境编译和配置…

Retrobatch for mac图片批处理软件

Retrobatch是一款功能强大的图片批量操作软件&#xff0c;提供了批量加水印、裁剪、压缩等功能&#xff0c;而且处理速度非常快。 在Retrobatch中&#xff0c;用户可以通过拖动相应动作到工作区形成节点(Nodes)&#xff0c;并将节点连接起来形成一个Workflow&#xff0c;最后运…

chrome vue devTools安装

安装好后如下图所示&#xff1a; 一&#xff1a;下载vue devTools 下载链接https://download.csdn.net/download/weixin_44659458/13192207?spm1001.2101.3001.6661.1&utm_mediumdistribute.pc_relevant_t0.none-task-download-2%7Edefault%7ECTRLIST%7EPaid-1-13192207…

Lesson 08 string类 (中)

C&#xff1a;渴望力量吗&#xff0c;少年&#xff1f; 文章目录 二、string类的介绍与使用2. 使用&#xff08;5&#xff09;string类对象的修改操作 三、拷贝1. 引入2. 浅拷贝3. 深拷贝 总结 二、string类的介绍与使用 2. 使用 &#xff08;5&#xff09;string类对象的修改…

网络通信概述

文章目录 IP地址端口号协议三要素作用 五元组协议分层OSI七层模型TCP/IP 五层模型应用层传输层网络层数据链路层物理层 封装和分用发送方 - 封装中间转发接收方 - 分用 一般认为计算机网络就是利用通信线路和通信设备将地理上分散的、具有独立功能的多个计算机系统按不同的形式…

QT学习_16_制作软件安装包

1、准备软件exe及其运行环境 参考&#xff1a;Qt学习_12_一键生成安装包_江湖上都叫我秋博的博客-CSDN博客 这篇博客记录了&#xff0c;如何用window的脚本&#xff0c;一键生成一个可以免安装的软件压缩包&#xff0c;解压缩后&#xff0c;点击exe文件就可以直接运行。 这一…

基于SSM实现的图书管理系统

一、系统架构 前端&#xff1a;jsp | js | css | jquery | layui 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.7 | mysql | maven | tomcat 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 借阅管理 04. 图书管理 05. 读者管理 06. 类型管理…

宽量程双计数器测量方法

如要测量计数器信号的数字频率或周期&#xff0c;可使用双计数器方法测量宽量程信号。该方法适于待测量信号的范围较广且整个范围都需要较高测量精度的情况。关于使用宽量程测量方法提高测量精度的详细信息&#xff0c;见量化误差章节。也可使用该方法测量比计数器时基频率更高…