【正点原子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的努力方向。短短一句话,…

notepad++ 插件JSONView安装

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

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

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

@Autowired注解获取对象为null

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

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

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

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

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

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

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

三、Linux高级命令

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

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

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

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

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

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

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

VGN S99快捷键,说明书

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

微服务API网关Spring Cloud Gateway实战

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

mybatis参数输入 #{}和${}

1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…

Unity中Shader编译目标渲染器

文章目录 前言一、Unity在打包时,会把Shader编译成不同平台对应的代码我们在状态栏,可以看见我们目前所处于的目标平台 二、在Unity中,怎么指定目标平台1、#pragma only_renderers2、#pragma exclude_renderers 三、我们测试一下看看效果1、 …

C语言重点突破(六)文件操作

本章重点 1. 为什么使用文件 2. 什么是文件 3. 文件的打开和关闭 4. 文件的顺序读写 5. 文件的随机读写 6. 文本文件和二进制文件 7. 文件读取结束的判定 8. 文件缓冲区 1. 为什么使用文件 我们在前面的文章介绍了通讯录的程序,当通讯录运行起来的时候&#xff0c…

ubuntu终端代理配置

ubuntu浏览器的无需手动设置,主要解决在终端中的配置问题,按照下面配置后可能会ping不通一些ip,但wget/git都是可以的,具体原因以后再分析 查找端口 首先要找到自己代理对应的HTTP端口,以QV2ray软件作为示例,我为8889 手动配置 # 配置系统proxy export http_proxy=1…

Java Swing管理系统万能模板 课程设计素材

JavaSwing管理系统万能模板 视频教程: 【课程设计】2小时学会JavaSwing课程设计-万能模板-图书管理系统-[你的课程我设计] 万能模板是用Java Swing开发的,包含管理系统常用的多角色登录、数据查询、添加、修改、删除。常用的管理系统都可以使用万能模板…

MySQL与其他数据库产品的比较,优势在哪里?

作为数据库管理领域的博主作家,我深知数据库在软件开发和数据管理中的重要性。在当今众多的数据库产品中,MySQL作为一种流行的开源关系型数据库管理系统,具有许多优势和特点。下面,我将通过对与其他数据库产品的比较以及MySQL的优…

原来字节跳动这么容易就能进····

“字节是大企业,是不是很难进去啊?” “在字节做软件测试,能得到很好的发展吗? 一进去就有12.5K,其实也没有想的那么难” 直到现在,心情都还是无比激动! 本人211非科班,之前在字节…