CN107403573B - 一种基于stm32f7的usb实验系统及方法 - Google Patents
一种基于stm32f7的usb实验系统及方法 Download PDFInfo
- Publication number
- CN107403573B CN107403573B CN201710596790.8A CN201710596790A CN107403573B CN 107403573 B CN107403573 B CN 107403573B CN 201710596790 A CN201710596790 A CN 201710596790A CN 107403573 B CN107403573 B CN 107403573B
- Authority
- CN
- China
- Prior art keywords
- usb
- stm32f7
- processor
- library
- msc
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 238000000034 method Methods 0.000 title abstract description 12
- 238000002474 experimental method Methods 0.000 claims abstract description 37
- 241001269238 Data Species 0.000 claims 1
- 230000002093 peripheral effect Effects 0.000 abstract description 9
- 238000012423 maintenance Methods 0.000 abstract description 3
- 238000013461 design Methods 0.000 abstract description 2
- 230000006870 function Effects 0.000 description 23
- 238000012545 processing Methods 0.000 description 8
- 238000011161 development Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000010586 diagram Methods 0.000 description 3
- 101000582929 Homo sapiens Plasmolipin Proteins 0.000 description 2
- 102100030265 Plasmolipin Human genes 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 241000208340 Araliaceae Species 0.000 description 1
- 101100445391 Mus musculus Ephb3 gene Proteins 0.000 description 1
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 1
- 235000003140 Panax quinquefolius Nutrition 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000002592 echocardiography Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 235000008434 ginseng Nutrition 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09B—EDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
- G09B23/00—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes
- G09B23/06—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes for physics
- G09B23/18—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes for physics for electricity or magnetism
- G09B23/183—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes for physics for electricity or magnetism for circuits
- G09B23/186—Models for scientific, medical, or mathematical purposes, e.g. full-sized devices for demonstration purposes for physics for electricity or magnetism for circuits for digital electronics; for computers, e.g. microprocessors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4282—Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/78—Architectures of general purpose stored program computers comprising a single central processing unit
- G06F15/7803—System on board, i.e. computer system on one or more PCB, e.g. motherboards, daughterboards or blades
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/4401—Bootstrapping
- G06F9/4403—Processor initialisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2213/00—Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F2213/0042—Universal serial bus [USB]
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Algebra (AREA)
- Mathematical Physics (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Computer Security & Cryptography (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Computing Systems (AREA)
- Pure & Applied Mathematics (AREA)
- Business, Economics & Management (AREA)
- Educational Administration (AREA)
- Educational Technology (AREA)
- Information Transfer Systems (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种基于STM32F7的USB实验系统及方法,系统包括主板、最小核心模块和各种外设模块;主板接口丰富,设计上能减少维护成本;核心模块能够替换,以适应将来处理器的升级;外设模块资源丰富,几乎涵盖了所有常用的教学外设。本发明是在标准的HAL库以及相应的中间件的基础上完成的。具有良好的可移植性、通用性。并且,USB例程将USB Device实验中的MSC例程和USB Device实验中的VCP例程有机结合为一个例程,增加了例程的难度和学生的探索兴趣。另外,本实验的例程具有良好的可移植性,在USB Host的实验中,不同于现有的例程,不用LCD作为最终的显示和调试手段,采用了更为通用的串口作为调试显示方式,能避免由于没有LCD或者使用不同的LCD造成程序的无法正确运行显示。
Description
技术领域
本发明属于嵌入式技术领域,具体涉及一种基于STM32F7的USB实验系统及方法。
背景技术
实践教学是嵌入式教学中不可少的环节,嵌入式的教学主要可以分为带Linux或者Android操作系统的平台的教学以及不带操作系统的裸机嵌入式平台的教学。目前不带操作系统的裸机嵌入式平台的教学中ST公司的STM32系列处理器占据大部分市场,使用最为广泛。ST系列处理器属于ARM Cortex-M系列处理器。在ARM处理器中,目前使用最多的是ARM7系列、ARM9系列、ARM9E系列、ARM10E系列、ARM11系列以及Cortex系列。Cortex系列属于ARMv7架构,而Cortex系列处理器又分为A、R、M三个系列,“A”系列面向尖端的基于虚拟内存的操作系统和用户应用;“R”系列针对实时系统;“M”系列对微控制器。
学习嵌入式,合适的开发板,标准的例程,详细的解读是必不可少的。现在市场上有许多做嵌入式开发板教学的公司,而做STM32系列开发板的公司,如野火,正点原子,微雪等等,往往是将ST的HAL库进行修改之后自成体系,相互之间的兼容性不是很好,只能在自己的开发板上面使用。
发明内容
为了解决上述技术问题,本发明提供了一种基于STM32F7的USB实验系统及方法,能够进行USB FS速率的USB Device和USB Host两大类实验。
本发明提供了一种基于STM32F7的USB实验系统,其特征在于:基于STM32F7的USBDeviceCDC和MSC系统包括SD卡、STM32F7处理器、PC;所述SD卡和STM32F7处理器之间通过SDMMC接口连接在一起,所述STM32F7处理器的USB FS接口和PC之间通过USB线连接起来。
本发明还提供了一种基于STM32F7的USB实验系统,其特征在于:基于STM32F7的USB Host MSC实验系统包括U盘、STM32F7处理器、PC;所述U盘和STM32F7处理器之间通过USB FS OTG口连接,所述PC和STM32F7处理器之间通过串口进行连接。
本发明还提供了一种基于STM32F7的USB实验系统,其特征在于:基于STM32F7的USB Host HID实验系统包括USB鼠标、USB键盘、STM32F7处理器、PC;所述USB鼠标、USB键盘和STM32F7处理器之间通过USB FS OTG口连接,PC和STM32F7处理器之间通过串口进行连接。
本发明提供了一种基于STM32F7的USB实验方法,其特征在于:基于STM32F7的USBDevice实验,包括以下步骤:
步骤1:将SD卡和STM32F7处理器的SDMMC接口连接在一起,将STM32F7处理器的USBFS接口通过USB线和PC的USB接口连接起来;
步骤2:初始化HAL库,重启所有外部设备,初始化Flash接口,初始化Systick;
步骤3:配置并且初始化STM32系统时钟;
步骤4:使能SD卡和USB FS的引脚的时钟;
步骤5:初始化USB;
该步骤包括初始化USB的底层配置,初始化USB设备库,添加支持类(VCP类),并且启动设备库,于是USB就首先就初始化为VCP类设备;
步骤6:重启STM32F7处理器,此时PC设备管理器将STM32F7USB设备识别为虚拟串口设备(比如USB虚拟串口COM18);
步骤7:打开PC上的串口终端,配置串口参数(包括波特率、停止位、校验位、COM口),打开串口;
发送非关键数据(非0x02数据)给STM32F7处理器,此时STM32F7虚拟串口如果接收到的数据不是关键数据,也不是0x00,就回显给PC;
发送关键数据(0x02数据)给STM32F7处理器,此时STM32F7处理器接收的数据是关键数据;
步骤8:若STM32F7处理器接受到了关键数据数据,初始化SD卡以及USB的引脚端口时钟;
步骤9:初始化SD卡;
步骤10:重新初始化设备库,取消原来的CDC设备库,将USB和CDC类解绑。重新初始化USB,重新初始化USB包括初始化USB的底层配置,初始化USB设备库,添加支持类(MSC类),并且启动设备库,于是USB就首先就初始化为MSC类设备;
步骤11:PC设备管理器识别出USB大容量存储设备,在PC中读出SD卡盘符,并对其进行读写以及格式化操作,这里注意只能对其格式化为FAT文件系统。
本发明还提供了一种基于STM32F7的USB实验方法,其特征在于:基于STM32F7的USB Host MSC实验,包括以下步骤:
步骤1:使能CPU Cache;
步骤2:初始化HAL库,重启所有外部设备,初始化Flash接口,初始化Systick;
步骤3:配置系统时钟;
步骤4:使能USB及USART3的GPIO时钟;
步骤5:初始化串口DMA;
步骤6:初始化USART3;
步骤7:初始化LED、按键以及USB Host MSC菜单;
步骤8:初始化USB,包括初始化USB主机库,添加支持类(MSC类),启动USB Host主机库;
步骤9:执行USB Host不同状态的处理函数,不同的状态包括HOST_IDLE、HOST_DEV_WAIT_FOR_ATTACHMENT、HOST_DEV_ATTACHED、HOST_ENUMERATION、HOST_INPUT、HOST_SET_CONFIGURATION、HOST_CHECK_CLASS、HOST_CLASS_REQUEST、HOST_CLASS、HOST_DEV_DISCONNECTED、HOST_ABORT_STATE;
步骤10:执行USB Host MSC菜单处理函数;
首先如果msc_demo.state状态为MSC_DEMO_START,等待用户按键,用户按键后进入MSC_DEMO_FILE_OPERATIONS状态,执行MSC_File_Operations();创建USBHost.txt文件,并向USBHost.txt文件中写入字符串“USB Host Library:Mass Storage Example”并读出显示在串口终端上,并继续等待按键按下,当按键按下后,执行Explore_Disk("0:/",1);显示U盘的目录文件结构。
本发明还提供了一种基于STM32F7的USB实验方法,其特征在于:基于STM32F7的USB Host HID实验,包括以下步骤:
步骤1:使能CPU Cache;
步骤2:初始化HAL库,重启所有外部设备,初始化Flash接口,初始化Systick;
步骤3:配置系统时钟;
步骤4:使能USB及USART3的GPIO时钟;
步骤5:初始化串口DMA;
步骤6:初始化USART3;
步骤7:初始化LED、按键以及USB Host HID菜单;
步骤8:初始化USB;
包括初始化USB主机库,添加支持类(HID类),启动USB Host主机库;
步骤9:执行USB Host不同状态的处理函数,不同的状态包括HOST_IDLE、HOST_DEV_WAIT_FOR_ATTACHMENT、HOST_DEV_ATTACHED、HOST_ENUMERATION、HOST_INPUT、HOST_SET_CONFIGURATION、HOST_CHECK_CLASS、HOST_CLASS_REQUEST、HOST_CLASS、HOST_DEV_DISCONNECTED、HOST_ABORT_STATE;
步骤10:执行USB Host HID菜单处理函数;
如果连接的是USB鼠标,则通过串口实时显示鼠标的按键情况(左键、右键、中键以及press/release状态)以及坐标情况(x、y坐标以及上次的x、y坐标);如果连接的是USB键盘,则当有按键按下的时候通过串口显示键盘按键字符。
本发明的系统还包括主板,主板接口丰富,主板除了提供模块插口外,还提供各种标准接口,如以太网口、USB HOST/SLAVE接口、CAN总线收发器接口等。并且其设计上能减少维护成本,如果有模块损坏,只需要更换模块即可,无需去修复主板。
本发明的模块资源丰富。一共有16个模块板卡,和四个主板接口可供进行实验,满足各种教学和应用需求。并且核心板能够替换,以适应将来处理器的升级的需要,主板因此主板可以重复使用。
本发明的软件部分是全部在标准的HAL库以及相应的中间件的基础上完成的,没有修改HAL库,具有良好的可移植性、通用性。本发明所使用的ST HAL库是1.6版本的,不是目前最新的1.7版本,所以相对来说比较稳定,也相对较新,本发明所使用的集成开发环境为MDK,版本为v5.23,编译器Compiler的版本为v5.06相对来说较稳定也较新。
本发明所有USB的实验都配有详细的说明书,从USB的基本概念,到STM32F7的USB的接口,再到ST的HAL库的介绍,再到ST的USB的中间件的介绍,到操作流程,硬件介绍,程序解读,实验现象等都有详细的说明。另外还配有解说视频,手把手的教同学入门STM32F7的开发。
本发明完全依照标准的HAL库以及USB中间件库开发出的例程,没有修改过ST的HAL库,相对来说更具通用性。另外本发明选择了STM32的F7系列处理器,性能更好,更能适应市场需求。USB通信协议本来是一个非常复杂的通信协议,一般的嵌入式开发板的USB实验仅仅是列出了实验该怎么操作,对于学生来说仅仅是验证性实验,并不能学到更多知识,而本发明将理论知识,硬件知识,例程讲解都详细的以文档的形式给出,还能不拘泥于单个实验,能将单个的实验结合起来,富有启发性看,探索性,创新性。
附图说明
图1为本发明实施例的STM32F7USB Device实验硬件结构框图;
图2为本发明实施例的SD卡SDMMC接口示意图;
图3为本发明实施例的STM32F7USB Device CDC 2MSC实验流程图;
图4为本发明实施例的STM32F7USB Host MSC实验硬件连接框图;
图5为本发明实施例的STM32F7USB Host HID鼠标实验硬件连接图;
图6为本发明实施例的STM32F7USB Host HID键盘实验硬件连接图;
图7为本发明实施例的USB Host MSC U盘实验流程图;
图8为本发明实施例的USB Host HID鼠标键盘实验流程图。
具体实施方式
为了便于本领域普通技术人员理解和实施本发明,下面结合附图及实施例对本发明作进一步的详细描述,应当理解,此处所描述的实施示例仅用于说明和解释本发明,并不用于限定本发明。
本发明的目的是提供一种更好的基于STM32F7系列处理器的USB实验平台,能够进行USB FS速率的USB Device和USB Host两大类实验。
结合附图1,基于STM32F7的USB DeviceCDC和MSC实验系统,硬件主要是由SD卡、STM32F7处理器、PC组成。其中SD卡和STM32F7之间通过SDMMC接口连接在一起,其接口连接见附图2。STM32F7的USB FS接口和PC之间通过USB线连接起来。结合附图3,STM32F7USBDevice CDC 2MSC实验流程图的特点是在一个实验中将传统的USB Device MSC实验和USBDevice CDC实验巧妙的结合成了一个实验。程序首先初始化HAL库,配置系统时钟,使能SD卡和USB FS GPIO时钟,然后先初始化USB为VCP类设备,这个时候PC设备管理器中将STM32F7USB设备识别为虚拟串口设备,此时STM32F7虚拟串口如果接收到的数据不是关键数据(比如这里本实施例设定为0x02),也不是0x00,就回显给PC。如果此时接收的数据是关键数据(比如这里本实施例设定为0x02),则初始化SDMMC接口,重新初始化设备库,取消原来的CDC设备库,将USB和CDC类解绑。再初始化为MSC设备库,添加MSC类,并启动设备库。这样,本实施例的设备管理器就会识别出本实施例的USB设备是一个大容量存储设备,可以在我的电脑中读出SD卡盘符,并可以对其进行读写。
结合附图4,基于STM32F7的USB Host MSC实验系统,硬件主要是由U盘、STM32F7处理器、PC组成。其中U盘和STM32F7之间通过USB FS OTG口连接,PC和STM32F7之间通过串口进行连接。结合附图7,STM32F7USB Host MSC实验流程图的特点是全部采用了串口作为调试和显示手段,避免了因LCD的不同而降低程序的通用性。程序先使能CPU Cache,初始化HAL库,配置系统时钟,使能USB及USART3的GPIO时钟,初始化串口DMA,初始化USART3,初始化LED、按键及USB Host MSC菜单,初始化USB为Host MSC模式,执行USB Host不同状态处理函数,最后执行USB Host MSC菜单处理函数,该USB Host MSC菜单处理函数执行如下应用:首先如果msc_demo.state状态为MSC_DEMO_START,等待用户按键,用户按键后进入MSC_DEMO_FILE_OPERATIONS状态,执行MSC_File_Operations();创建USBHost.txt文件,并向USBHost.txt文件中写入字符串“USB Host Library:Mass Storage Example”并读出显示在串口终端上,并继续等待按键按下,当按键按下后,执行Explore_Disk("0:/",1);显示U盘的目录文件结构。
结合附图5、6,基于STM32F7的USB Host HID实验系统,硬件主要是由USB鼠标,USB键盘,STM32F7处理器、PC组成。其中USB鼠标、USB键盘和STM32F7之间通过USB FS OTG口连接,PC和STM32F7之间通过串口进行连接。结合附图8,STM32F7USB Host HID实验流程图的特点是全部采用了串口作为调试和显示手段,避免了因LCD的不同而降低程序的通用性。程序先使能CPU Cache,初始化HAL库,配置系统时钟,使能USB及USART3的GPIO时钟,初始化串口DMA,初始化USART3,初始化LED、按键及USB Host HID菜单,初始化USB为Host HID模式,执行USB Host不同状态处理函数,最后执行USB Host HID菜单处理函数,如果连接的是USB鼠标,则通过串口实时显示鼠标的按键情况(press/release)以及坐标情况。如果连接的是USB键盘,则当有按键按下的时候通过串口显示键盘按键字符。
下面结合本实施例的软件实现过程进一步阐明本专利的内容:
1.对于USB Device实验,参考附图1,2,将实验系统硬件连接好,打开例程,本实施例使用的集成开发环境是MDK5,版本为v5.23,编译器Compiler的版本为v5.06,使用的HAL库版本是v1.6,相对来说较稳定也较新。由于本实施例使用的大容量存储设备是SD卡,就需要先将SD卡的操作函数补充完整,这些函数在usbd_storage_if.c文件中:
-static int8_t STORAGE_Init_FS(uint8_t lun);
-static int8_t STORAGE_GetCapacity_FS(uint8_t lun,
- uint32_t*block_num,
- uint16_t*block_size);
-static int8_t STORAGE_IsReady_FS(uint8_t lun);
-static int8_t STORAGE_IsWriteProtected_FS(uint8_t lun);
-static int8_t STORAGE_Read_FS(uint8_t lun,
- uint8_t*buf,
- uint32_t blk_addr,
- uint16_t blk_len);
-static int8_t STORAGE_Write_FS(uint8_t lun,
- uint8_t*buf,
- uint32_t blk_addr,
- uint16_t blk_len);
-static int8_t STORAGE_GetMaxLun_FS(void);
另外,由于两个例程中有许多有着相同的宏名或者函数名但是有着不同的定义或实现的宏名和函数,本实施例在合并例程的时候需要更改这些宏名和函数名以区分他们,例如:
-#define VCP_USBD_VID 1155
-#define VCP_USBD_LANGID_STRING 1033
-#define VCP_USBD_MANUFACTURER_STRING"STMicroelectronics"
-#define VCP_USBD_PID_FS 22336
-#define VCP_USBD_PRODUCT_STRING_FS"STM32Virtual ComPort"
-#define VCP_USBD_SERIALNUMBER_STRING_FS"00000000001A"
-#define VCP_USBD_CONFIGURATION_STRING_FS"CDC Config"
-#define VCP_USBD_INTERFACE_STRING_FS"CDC Interface"
-
-
-#define MSC_USBD_VID 1155
-#define MSC_USBD_LANGID_STRING 1033
-#define MSC_USBD_MANUFACTURER_STRING"STMicroelectronics"
-#define MSC_USBD_PID_FS 22314
-#define MSC_USBD_PRODUCT_STRING_FS"STM32Mass Storage"
-#define MSC_USBD_SERIALNUMBER_STRING_FS"00000000001A"
-#define MSC_USBD_CONFIGURATION_STRING_FS"MSC Config"
-#define MSC_USBD_INTERFACE_STRING_FS"MSC Interface"
以上通过将原宏名前面加上MSC或VCP来区分不同的宏。
-uint8_t*VCP_USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*VCP_USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*VCP_USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDefspeed,uint16_t*length);
-uint8_t*VCP_USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*VCP_USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*VCP_USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*VCP_USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-
-
-uint8_t*MSC_USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*MSC_USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*MSC_USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDefspeed,uint16_t*length);
-uint8_t*MSC_USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*MSC_USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*MSC_USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
-uint8_t*MSC_USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed,uint16_t*length);
以上是通过将原函数名前面加上MSC或VCP来区分不同的函数。
在主函数中:
-先定义了接收数组uint8_t Buf[1]={0xff};长度为uint32_t Len[1]={1};只能一次接收1Byte的数据。
-HAL_Init();初始化所有外设,Flash接口和Systick。
-SystemClock_Config();初始化系统时钟,和MSC实验中的配置一样。
-MX_GPIO_Init();开启GPIOA、GPIOC、GPIOD的时钟,和MSC实验一样。
-VCP_MX_USB_DEVICE_Init();首先将USB初始化为VCP类设备,初始化CDC设备库,添加CDC类,启动库。
-接下来进入主循环:
-这个时候PC设备管理器中将STM32F7USB设备识别为虚拟串口设备,此时STM32F7虚拟串口如果接收到的数据不是特殊值(比如这里本实施例设定为0x02),也不是0x00,就回显给PC。
-如果此时接收的数据是0x02,则执行MX_SDMMC1_SD_Init();初始化SDMMC接口,执行USBD_DeInit(&hUsbDeviceFS);重新初始化设备库,取消原来的CDC设备库,将USB和CDC类解绑。再初始化为MSC设备库,添加MSC类,并启动设备库。这样,本实施例的设备管理器就会识别出本实施例的USB设备是一个大容量存储设备。
2.对于USB Host MSC实验,参考附图4,将实验系统硬件连接好,打开例程,参考附图7,程序流程如下:
-首先使能CPU数据指令Cache。
-接下来HAL_Init();初始化所有外设,Flash接口和Systick。
-然后SystemClock_Config();配置系统时钟:
-这里本实施例选择HSE作为PLL的源,HSE的源为8MHz,本实施例设计的分频和倍频参数如下PLLM=8;PLLN=432;PLLP=2;PLLQ=9;选择PLLCLK作为SYSCLK的源,选PLLQ为USB的源,AHB Prescaler=1;APB1Prescaler=4;APB2Prescaler=2。
SYSCLK=PLLCLK=HSE/PLLM*PLLN/PLLP=8M/8*432/2=216MHz。
USB clock=PLLQ=HSE/PLLM*PLLN/PLLQ=8M/8*432/9=48M。
APB1Peripheral clock=SYSCLK/AHB Prescaler/APB1Prescaler=216M/1/4=54MHz;
APB2Peripheral clock=SYSCLK/AHB Prescaler/APB2Prescaler=216M/1/4=108MHz;
本实施例需要USB的时钟为48MHz这样配置之后,USB的时钟就为48MHz了。
这里USART3的时钟源为PCLK1为54MHZ;
-MX_GPIO_Init();使能GPIO PortD口的时钟,因为USART3使用的就是PD8和PD9,PD8为USART3TX,PD9为USART3RX。
-MX_DMA_Init();使能串口DMA传输。
-MX_USART3_UART_Init();初始化USART3,波特率9600。
-初始化LED、按键以及菜单。
-初始化USB主机库,添加MSC类,启动主机库。
-接下来进入主循环;
-USBH_Process(&hUSBHost);函数处理USB主机的不同状态。
这里有USB的所有状态:
1.HOST_IDLE
2.HOST_DEV_WAIT_FOR_ATTACHMENT、
3.HOST_DEV_ATTACHED
4.HOST_ENUMERATION
5.HOST_INPUT
6.HOST_SET_CONFIGURATION
7.HOST_CHECK_CLASS
8.HOST_CLASS_REQUEST
9.HOST_CLASS
10.HOST_DEV_DISCONNECTED
11.HOST_ABORT_STATE
每种状态有不同的处理。
-MSC_MenuProcess();函数是菜单处理流程。首先如果msc_demo.state状态为MSC_DEMO_START,等待用户按键,用户按键后进入MSC_DEMO_FILE_OPERATIONS状态,执行MSC_File_Operations();创建USBHost.txt文件,并向USBHost.txt文件中写入字符串“USB Host Library:Mass Storage Example”并读出显示在串口终端上,并继续等待按键按下,当按键按下后,执行Explore_Disk("0:/",1);显示U盘的目录文件结构。
-这里所有的LCD_ErrLog(...);LCD_UsrLog(...);LCD_DbgLog(...)全部输出到串口在主函数重新定义printf输出到串口:
实验现象:下载程序,打开串口终端,打开串口,插入U盘,串口助手显示了U盘的大小,按下了用户按键后,将U盘中创建一个文件USBHost.txt,并向文件中写入字符串“USBHost Library:Mass Storage Example”并读出来。再次按下按键后,显示了U盘里的文件目录及文件。打开电脑,查看U盘里的文件,和串口助手显示的目录及文件结构一样。打开USBHost.txt文件,里面有写入的字符串“USB Host Library:Mass Storage Example”:
3.对于USB Host HID实验,参考附图5或6,将实验系统硬件连接好,打开例程,参考附图8,程序流程如下:
-首先使能CPU数据指令Cache。
-接下来HAL_Init();初始化所有外设,Flash接口和Systick。
-然后SystemClock_Config();配置系统时钟:
-MX_GPIO_Init();使能GPIO PortD口的时钟,因为USART3使用的就是PD8和PD9,PD8为USART3TX,PD9为USART3RX。
-MX_DMA_Init();使能串口DMA传输。
-MX_USART3_UART_Init();初始化USART3,波特率9600。
-接下来HID_InitApplication();用来初始化HID应用:初始化LED,用户按键,并启动HID接口,初始化HID Menu。
-接下来三个函数是USB的初始化,初始化USB Host库,添加支持类(HID类),启动Host库。
-然后程序进入主循环。
-USBH_Process(&hUSBHost);函数处理USB Host不同的状态,同2。
-Host在不同的状态下会有不同的处理。
-HID_MenuProcess();函数用来管理USB Host HID菜单。
-hid_demo.state为HID_DEMO_MOUSE时处理鼠标相应例程:
HID_MouseMenuProcess();
USBH_MouseDemo(&hUSBHost);
-hid_demo.state为HID_DEMO_KEYBOARD时处理键盘相应例程:
HID_KeyboardMenuProcess();
USBH_KeybdDemo(&hUSBHost);
实验现象:编译程序,下载,打开串口助手,打开串口,首先将USB FS OTG口接上一个USB OTG转换头,在接上USB鼠标,reset STM32,单击鼠标左键,显示左键按下,左键松开;单击鼠标右键,显示右键按下,右键松开;单击鼠标中键,显示中键按下,中键松开;移动鼠标,显示上次鼠标的坐标prev_x_y,以及现在的鼠标的坐标loc_x_y。拔出鼠标,插入键盘,并键入键盘上的任意键,串口助手上将显示出相应的字符。
本实施例的系统主要包括主板、最小核心模块和各种外设模块;主板接口丰富,设计上能减少维护成本;核心模块能够替换,以适应将来处理器的升级;外设模块资源丰富,几乎涵盖了所有常用的教学外设。本发明的软件部分是标准的HAL库以及相应的中间件的基础上完成的。具有良好的可移植性、通用性。并且,USB例程有所创新,将USB Device实验中的MSC例程和USB Device实验中的VCP例程有机结合为一个例程,增加了例程的难度和学生的探索兴趣。另外,本实验的例程具有良好的可移植性,在USB Host的实验中,不同于其他厂家的例程,不用LCD作为最终的显示和调试手段,采用了更为通用的串口作为调试显示方式,能不局限于特定的LCD显示屏。
应当理解的是,本说明书未详细阐述的部分均属于现有技术。
应当理解的是,上述针对较佳实施例的描述较为详细,并不能因此而认为是对本发明专利保护范围的限制,本领域的普通技术人员在本发明的启示下,在不脱离本发明权利要求所保护的范围情况下,还可以做出替换或变形,均落入本发明的保护范围之内,本发明的请求保护范围应以所附权利要求为准。
Claims (4)
1. 一种基于STM32F7的USB实验方法,应用于基于STM32F7的USB DeviceCDC和MSC实验系统中;所述系统包括SD卡、STM32F7处理器、PC;所述SD卡和STM32F7处理器之间通过SDMMC接口连接在一起,所述STM32F7处理器的USB FS接口和PC之间通过USB线连接起来;
其特征在于:基于STM32F7的USB Device实验,包括以下步骤:
步骤1:将SD卡和STM32F7处理器的SDMMC接口连接在一起,将STM32F7处理器的USB FS接口通过USB线和PC的USB接口连接起来;
步骤2:初始化HAL库,重启所有外部设备,初始化Flash接口,初始化Systick;
步骤3:配置并且初始化STM32系统时钟;
步骤4:使能SD卡和USB FS的引脚的时钟;
步骤5:初始化USB;
包括初始化USB的底层配置,初始化USB设备库,添加VCP类,并且启动设备库,于是USB就初始化为VCP类设备;
步骤6:此时PC设备管理器将STM32F7 USB设备识别为虚拟串口设备;
步骤7:打开PC上的串口终端,配置串口参数,打开串口;
发送非关键数据给STM32F7处理器,此时STM32F7虚拟串口如果接收到的数据不是关键数据,也不是0x00,就回显给PC;
发送关键数据给STM32F7处理器,此时STM32F7处理器接收的数据是关键数据;
步骤8:若STM32F7处理器接受到了关键数据数据,初始化SD卡以及USB的引脚端口时钟;
步骤9:初始化SD卡;
步骤10:重新初始化设备库,取消原来的CDC设备库,将USB和CDC类解绑;重新初始化USB,包括初始化USB的底层配置,初始化USB设备库,添加MSC类,并且启动设备库,于是USB就首先初始化为MSC类设备;
步骤11:PC设备管理器识别出USB大容量存储设备,在PC中读出SD卡盘符,并对其进行读写以及格式化操作。
2.根据权利要求1所述的基于STM32F7的USB实验方法,其特征在于:步骤7中所述配置串口参数包括波特率、停止位、校验位、COM口。
3.根据权利要求1所述的基于STM32F7的USB实验方法,其特征在于:步骤7中所述非关键数据为非0x02数据。
4.根据权利要求1-3任意一项所述的基于STM32F7的USB实验方法,其特征在于:所述系统还包括主板,主板提供模块插口和各种标准接口。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810617216.0A CN108984457A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host HID实验方法 |
CN201810617208.6A CN108845972A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host MSC实验方法 |
CN201710596790.8A CN107403573B (zh) | 2017-07-20 | 2017-07-20 | 一种基于stm32f7的usb实验系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710596790.8A CN107403573B (zh) | 2017-07-20 | 2017-07-20 | 一种基于stm32f7的usb实验系统及方法 |
Related Child Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810617216.0A Division CN108984457A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host HID实验方法 |
CN201810617208.6A Division CN108845972A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host MSC实验方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107403573A CN107403573A (zh) | 2017-11-28 |
CN107403573B true CN107403573B (zh) | 2018-12-14 |
Family
ID=60401018
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710596790.8A Expired - Fee Related CN107403573B (zh) | 2017-07-20 | 2017-07-20 | 一种基于stm32f7的usb实验系统及方法 |
CN201810617208.6A Pending CN108845972A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host MSC实验方法 |
CN201810617216.0A Pending CN108984457A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host HID实验方法 |
Family Applications After (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810617208.6A Pending CN108845972A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host MSC实验方法 |
CN201810617216.0A Pending CN108984457A (zh) | 2017-07-20 | 2017-07-20 | 一种基于STM32F7的USB Host HID实验方法 |
Country Status (1)
Country | Link |
---|---|
CN (3) | CN107403573B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111782572A (zh) * | 2020-06-15 | 2020-10-16 | 北京航空航天大学杭州创新研究院 | 一种自适应波特率的usb串口设备及方法 |
CN112000374B (zh) * | 2020-07-13 | 2024-01-02 | 深圳市智微智能软件开发有限公司 | 应用于安卓系统的usb触摸屏更换方法、装置、设备及介质 |
CN111913783B (zh) * | 2020-10-13 | 2021-02-02 | 江苏润和软件股份有限公司 | 一种基于面向对象化的单片机usb软件开发系统及方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090132818A (ko) * | 2008-06-23 | 2009-12-31 | 사이넵스주식회사 | 유에스비 토큰과 지문을 이용한 이중 보안 시스템 |
CN101833887A (zh) * | 2010-04-02 | 2010-09-15 | 江苏教育家教学装备有限公司 | 基于通用无线接口技术的数字化探究实验系统 |
CN204667684U (zh) * | 2015-05-20 | 2015-09-23 | 江苏建筑职业技术学院 | 一种基于lm3s8962芯片的教学型arm开发板 |
CN204990829U (zh) * | 2015-09-30 | 2016-01-20 | 无锡职业技术学院 | 一种嵌入式应用技术实训装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100367263C (zh) * | 2006-04-18 | 2008-02-06 | 杭州华三通信技术有限公司 | 一种通用串行总线数据传输处理方法 |
CN203520727U (zh) * | 2013-11-02 | 2014-04-02 | 常州信息职业技术学院 | 便携型stm32单片机教学实验仪 |
CN204028888U (zh) * | 2014-04-16 | 2014-12-17 | 福建师范大学 | 一种具有usb主从接口的数据存储装置 |
CN103973889A (zh) * | 2014-04-25 | 2014-08-06 | 方小祥 | 将智能手持设备作为无线usbhid设备的装置及方法 |
US9779047B2 (en) * | 2015-08-05 | 2017-10-03 | American Megatrends, Inc. | Universal intelligent platform management interface (IPMI) host to baseboard management controller (BMC) communication for non-x86 and legacy free systems |
CN106933371A (zh) * | 2015-12-29 | 2017-07-07 | 哈尔滨恒誉名翔科技有限公司 | 一种usb-hid协议的键盘设备 |
CN105931540A (zh) * | 2016-04-27 | 2016-09-07 | 北京航空航天大学 | 一种基于fpga的在线实验系统及在线实验方法 |
-
2017
- 2017-07-20 CN CN201710596790.8A patent/CN107403573B/zh not_active Expired - Fee Related
- 2017-07-20 CN CN201810617208.6A patent/CN108845972A/zh active Pending
- 2017-07-20 CN CN201810617216.0A patent/CN108984457A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20090132818A (ko) * | 2008-06-23 | 2009-12-31 | 사이넵스주식회사 | 유에스비 토큰과 지문을 이용한 이중 보안 시스템 |
CN101833887A (zh) * | 2010-04-02 | 2010-09-15 | 江苏教育家教学装备有限公司 | 基于通用无线接口技术的数字化探究实验系统 |
CN204667684U (zh) * | 2015-05-20 | 2015-09-23 | 江苏建筑职业技术学院 | 一种基于lm3s8962芯片的教学型arm开发板 |
CN204990829U (zh) * | 2015-09-30 | 2016-01-20 | 无锡职业技术学院 | 一种嵌入式应用技术实训装置 |
Non-Patent Citations (1)
Title |
---|
Cortex系统中FAT32文件读写的硬件及软件设计;徐建功;《中国优秀硕士学位论文全文数据库 信息科技辑》;20110831(第8期);第1页最后一段至第10页、第15页至第18页、第33页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107403573A (zh) | 2017-11-28 |
CN108845972A (zh) | 2018-11-20 |
CN108984457A (zh) | 2018-12-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
TWI421766B (zh) | 經由韌體提供虛擬裝置存取功能之技術 | |
US8010843B2 (en) | System and method for debugging a target computer using SMBus | |
US6876941B2 (en) | Testing compliance of a device with a bus protocol | |
CN107403573B (zh) | 一种基于stm32f7的usb实验系统及方法 | |
WO2018018978A1 (zh) | 一种通用串行总线控制器验证方法、系统及设备 | |
CN100422953C (zh) | 利用HDL扩展串口的SoC系统在线调试方法 | |
Brown | Discovering the STM32 microcontroller | |
CN101359303B (zh) | 一种在线调试微控制器及其外设器件的装置及调试方法 | |
JP2004227588A (ja) | Sdioカード開発システム | |
US20050021870A1 (en) | Modular presentation device with network connection for use with PDA's and Smartphones | |
US7212961B2 (en) | Interface for rapid prototyping system | |
CN114064458A (zh) | 接口可扩展的通用性的jtag调试方法及系统 | |
Wang et al. | Modeling and integration of peripheral devices in embedded systems | |
TW202411872A (zh) | 驗證系統、驗證方法、電子設備以及儲存媒體 | |
US20040230668A1 (en) | Modular presentation device for use with PDA's and Smartphones | |
US20050144436A1 (en) | Multitasking system level platform for HW/SW co-verification | |
CN109840172A (zh) | 一种基于SoC主控芯片的Nand闪存分析装置及方法 | |
CN101281507A (zh) | Usb接口型dsp实时仿真开发系统 | |
JP2000347896A (ja) | ノートブック型コンピュータシステム開発でキーボード基本入出力システム(kb−bios)をデバッグする方法 | |
CN111294985A (zh) | 一种基于4g的便携式矿灯通信系统、通信方法及构建方法 | |
Jeřábek | FPGA Based CAN Bus Channels Mutual Latency Tester and Evaluation | |
US8160864B1 (en) | In-circuit emulator and pod synchronized boot | |
CN101231608A (zh) | 侦错装置及其方法 | |
Kumar et al. | Design and Functional Verification of A SPI Master Slave Core using UVM | |
Dalmasso | MC2101: A RISC-V-based Microcontroller for Security Assessment and Training |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181214 |