【正点原子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卡中的文件进行读写操作。

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

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

相关文章

Electronica慕尼黑电子展 Samtec团队与21ic分享虎家产品与方案

【摘要/前言】 “希望但凡是能够使用到连接器的场合都有Samtec的身影” 在慕尼黑上海电子展现场,Samtec华东区销售经理章桢彦先生在与21ic副主编刘岩轩老师的采访中,如是说道。这是一种愿景,更是Samtec的努力方向。短短一句话,…

视频播放标签,设置自动播放 暂停键 播放键 js方法

1 创建video 标签&#xff0c;标签设置属性 autoplay 自动播放&#xff0c;宽高100 全屏。 <video class"video" id"shipin" controls"controls" autoplay poster"" style"width:100%;height:100%;position:fixed;">&…

notepad++ 插件JSONView安装

1&#xff0c;前提 开发过程中经常需要处理json格式语句&#xff0c;需要对json数据格式化处理&#xff0c;因为使用的是虚拟机内开发&#xff0c;所以没法连接外网&#xff0c;只能在本地电脑下载插件后&#xff0c;然后上传到虚拟机中&#xff0c;进行安装使用。 2&#xf…

1+x中级网络运维实验题

任务 1&#xff1a; 设备命名 为了方便后期维护和故障定位及网络的规范性&#xff0c;需要对网络设备进行规范化命名。请根据 Figure 3-1 实验考试拓扑对设备进行命名。命名规则为&#xff1a;城市-设备的设置地点-设备的功能属性和序号-设备型号。例如&#xff1a;处于杭州校…

@Autowired注解获取对象为null

问题再现 兄弟们&#xff0c;看见了吗&#xff1f;这里我Autowired进来的forkliftService 居然为null 且我SysForkliftServiceImpl上面是加了Service注解的 分析原因 主要原因就是因为该类继承了一个第三方框架SimpleChannelInboundHandler&#xff0c;在执行的过程中&#…

[Java 源码] 美团一面~ArrayList 的底层实现

文章目录 1. ArrayList 与 数组的区别2 ArrayList 的初始化容量3. ArrayList 的扩容具体指什么4. ArrayList是如何实现扩容的&#xff1f;5. ArrayList有缩容吗&#xff1f; 1. ArrayList 与 数组的区别 ArrayList 的底层是数组队列&#xff0c;相当于动态数组。与 Java 中的数…

2023年【P气瓶充装】找解析及P气瓶充装复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 P气瓶充装找解析参考答案及P气瓶充装考试试题解析是安全生产模拟考试一点通题库老师及P气瓶充装操作证已考过的学员汇总&#xff0c;相对有效帮助P气瓶充装复审模拟考试学员顺利通过考试。 1、【多选题】CNG双燃料汽车…

Dockerfile 与 Docker Compose区别

目录 Dockerfile Docker Compose 综合比较 Dockerfile 用途&#xff1a; Dockerfile 用于定义单个容器的构建过程。它包含了一系列指令&#xff0c;每个指令都代表容器构建过程中的一个步骤。这些步骤包括从基础镜像中构建、安装依赖、拷贝文件、设置环境变量等操作。 语法…

【IEEE独立出版】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff09; 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff0…

电商API接口对于实现电商系统平台的搭建有哪些作用?

电商API接口用于实现电商平台的数据交互和功能调用。具体来说&#xff0c;电商API接口可以用于以下几个方面&#xff1a; 1. 商品管理&#xff1a;通过API接口&#xff0c;可以实现商品的添加、修改、删除、查询等操作。商家可以通过API接口将自己的商品信息上传到电商平台&…

三、Linux高级命令

目录 1、重定向命令 1.1 重定向 > 1.2 重定向 >> 该章节的所有操作都在/export/data/shell目录进行&#xff0c;请提前创建该目录。 mkdir -p /export/data/ 1、重定向命令 1.1 重定向 > Linux 允许将命令执行结果重定向到一个文件&#xff0c;本应显示在…

群晖NAS:docker(Container Manager)、npm安装Verdaccio并常见命令集合

群晖NAS&#xff1a;docker&#xff08;Container Manager&#xff09;、npm安装Verdaccio并常见命令集合 自建 npm 资源库&#xff0c;使用Verdaccio。如果觉得麻烦&#xff0c;直接可以在外网注册 https://www.npmjs.com/ 网站。大同小异&#xff0c;自己搭建搭建方便局域网…

虾皮、Lazada稳定的测评系统需要哪些技术要求

测评作为一项高效运营手段&#xff0c;具有显著的重要性。然而&#xff0c;对于卖家而言&#xff0c;自行建立一套测评系统所需的技术条件并非易事。 在构建系统之前&#xff0c;必须深入理解每个平台的控制风险机制&#xff0c;而后才能开展下一步的建设工作。 1.首先&#…

代币化:2024年的金融浪潮预示着什么?

自“TradFi”领袖到加密专家&#xff0c;各方预测代币化机会高达数十万亿。虽然已有引人注目的用例&#xff0c;但与未来几年可能在链上转移的大量数字化资产相比&#xff0c;这些仅是冰山一角。 代币化何时会变为洪流&#xff1f;什么阻碍了其发展&#xff1f; 今年10月&…

SpringBoot下使用Quartz设置定时任务

SpringBoot下使用Quartz设置定时任务 基础使用添加依赖demo 基础使用 Quartz 的核心类有以下三部分&#xff1a; 任务 Job &#xff1a; 需要实现的任务类&#xff0c;实现 execute() 方法&#xff0c;执行后完成任务。触发器 Trigger &#xff1a; 包括 SimpleTrigger 和 Cr…

VGN S99快捷键,说明书

VGN S99快捷键-说明书 按键说明灯光效果常见疑难 按键说明 切换关闭电量指示灯&#xff1a;Fn home 灯光效果 常见疑难

服务器,数据库服务器各指标怎么看?

一&#xff09;服务器&#xff1a; 1&#xff09; 系统负载 load 1m,load 5m,load 15m分别是什么意思&#xff1f; 1m 表示过去 1 分钟的平均负载&#xff0c;5m 表示过去 5 分钟的平均负载&#xff0c;15m 表示过去 15 分钟的平均负载。系统负载是指系统在过去一段时间内处理的…

GPT5大剧第二季开启,Sam Altman 重掌 OpenAI CEO 大权

OpenAl 最新公告: Sam Altman 重掌 OpenAI CEO 大权&#xff0c;公司迎来新的初始董事会 Mira Murati 出任 CTO,Greg Brockman 再次成为总裁。来看看CEO Sam Altman和董事会主席 Bret Taylor的最新发言。 2023年11月29日 以下是 CEO Sam Altman和董事会主席 Bret Taylor 今天下…

在Docker上部署Springboot项目

在Docker上部署Springboot项目 ###1.安装docker 2.安装mysql 拉 Mysql 镜像 docker pull mysql:5.7.31运行 Mysql 5.7.31 第一次运行需要设置密码 docker run -d --name myMysql -p 9506:3306 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD1234 mysql:5.7.31不是…

微服务API网关Spring Cloud Gateway实战

概述 微服务网关是为了给不同的微服务提供统一的前置功能&#xff1b;网关服务可以配置集群&#xff0c;以承载更多的流量&#xff1b;负载均衡与网关互相成就&#xff0c;一般使用负载均衡&#xff08;例如 nginx&#xff09;作为总入口&#xff0c;然后将流量分发到多个网关…