1基本介紹
MM32F5330微控制器搭載了由安謀科技授權(quán)的Armv8-M架構(gòu)“星辰”STAR-MC1處理器,最高工作頻率可達(dá)180MHz。內(nèi)置了128KB Flash,32KB SRAM,并集成了豐富的I/O端口和外設(shè)模塊,包括ADC,DAC,模擬比較器,高級(jí)定時(shí)器,通用定時(shí)器,基礎(chǔ)定時(shí)器和低功耗定時(shí)器,還包含通信接口如I2C,I3C從機(jī),SPI或I2S,UART,USART,低功耗UART,集成了內(nèi)部PHY的USB 2.0全速Device/Host控制器,以及FlexCAN-FD接口。
180MHz“星辰” STAR-MC1 處理器,內(nèi)置單精度浮點(diǎn)運(yùn)算單元 FPU,支持DSP 擴(kuò)展
128KB Flash,32KB SRAM,集成豐富的 I/O 端口和外設(shè)模塊
4 個(gè)UART,1 個(gè) USART,1 個(gè) LPUART
1 個(gè)集成內(nèi)部 PHY 的 USB 2.0
1 個(gè) FlexCAN-FD 接口
2 個(gè) I2C,1 個(gè) I3C 從機(jī),3 個(gè) SPI 或 I2S
2 個(gè) 3MSPS 12 位的 ADC, 1 個(gè) 12 位的 DAC
2 個(gè) 16 位 AdvTimer, 6 個(gè) GP Timer,1 個(gè) LP Timer
工作電壓:1.8V ~ 5.5V
工作溫度范圍:-40℃ ~ +105℃
封裝形式:LQFP64/48,QFN32
TinyUSB 是一個(gè)用于嵌入式系統(tǒng)的開(kāi)源跨平臺(tái) USB 主機(jī)/設(shè)備協(xié)議棧,源碼是托管在GitHub上面,地址是:https://github.com/hathach/tinyusb。
2TinyUSB Host基本移植介紹
之前我們有講過(guò)TinyUSB Device的移植,本期我們就來(lái)介紹一下Host設(shè)備的移植。同樣的我們介紹的移植修改是基于TinyUSB exampleshost下已經(jīng)有參考示例的設(shè)備。將TinyUSB 從GitHub上克隆下來(lái),examplehost文件夾里面就有對(duì)應(yīng)的示例,本次我們以msc_file_explorer為示例演示如何移植一個(gè)host設(shè)備。
圖1 TinyUSB Host示例
將tinyusb 目錄下exampleshostmsc_file_explorer下的對(duì)應(yīng)三個(gè)文件copy到例程TinyUSB_Host_MSC工程目錄文件夾里面。
圖2 TinyUSB msc_file_explore文件
圖3 TinyUSB_Host_MSC工程目錄
MM32F5333有兩個(gè)PLL,PLL1可以設(shè)置高主頻180M給CPU和其他外設(shè)使用,PLL2可以單獨(dú)配置給USB使用。增加一個(gè)USB時(shí)鐘配置函數(shù)void USB_DeviceClockInit(void)和void SetPLL2ToUSB_HSE_96M(void),PLL2配置96M 選擇PLL2輸入二分頻到USB。有使用TU_LOG做串口輸出,可以使能CFG_TUSB_DEBUG 為需要的輸出等級(jí),同時(shí)將#define tu_printf printf 改到串口輸出,Keil Options->Target 勾選Use MicroLIB,并實(shí)現(xiàn)重定向函數(shù)。
voidSetPLL2ToUSB_HSE_96M(void) { RCC->CR&=~RCC_CR_PLL2ON_Msk; /*ResetPLL2SRC,PLL2PDIV,PLL2MUL,PLL2DIVbits*/ RCC->PLL2CFGR&=~RCC_PLL2CFGR_PLL2SRC_Msk; RCC->PLL2CFGR&=~RCC_PLL2CFGR_PLL2PDIV_Msk; RCC->PLL2CFGR&=~RCC_PLL2CFGR_PLL2MUL_Msk; RCC->PLL2CFGR&=~RCC_PLL2CFGR_PLL2DIV_Msk; /*Configpllclocksource*/ RCC->PLL2CFGR|=(0x01U<PLL2CFGR&=~RCC_PLL2CFGR_PLL2ICTRL_Msk; if(HSE_VALUE>=8000000) { RCC->PLL2CFGR|=(0x03<PLL2CFGR|=(0x01<PLL2CFGR|=((0x17<CR|=(0x01U<CR&RCC_CR_PLL2RDY_Msk)==0) { __ASM("nop");/*__NOP();*/ } }
voidUSB_DeviceClockInit(void) { /*SelectUSBCLKsource*/ RCC->CFGR|=1<19;??????????????//USB?CLK?SEL?PLL2 ????RCC->CFGR&=~(0x03<22); ????RCC->CFGR|=0x01<22; ????RCC_AHBPeriphClockCmd(RCC_AHBPeriph_USB_FS,?ENABLE); }
添加tuh_hcd_port.c 接口函數(shù)文件。
圖4 Keil添加tuh_hcd_port.c文件
移植修改和之前Device設(shè)備基本流程一致,Keil工程按如下文件樹(shù)添加對(duì)應(yīng)文件。
圖5 Keil工程添加對(duì)應(yīng).c文件
工程文件樹(shù)如下:
1.TinyUSB_Host_MSC
2. │
3. ├─APP
4. │ main.c
5. │ mm32f5330_it.c
6. │ platform.c
7. │ msc_app.c
8. │ tinyusb_msc_file_explorer.c
9. │ tuh_hcd_port.c
10. │
11. ├─TinyUSB
12. │ tusb.c
13. │ tusb_fifo.c
14. │ hub.c
15. │ usbh.c
16. │ msc_host.c
17. │
18. └─FATFS
19. ff.c
20. ffsystem.c
21. ffunicode.c
在tusb_config.h文件里面添加#define CFG_TUSB_MCU OPT_MCU_MM32F533X Tusb_mcu.h 文件里面增加:
//-------------MindMotion-------------// #elifTU_CHECK_MCU(OPT_MCU_MM32F016X) #defineTUP_DCD_ENDPOINT_MAX8 #elifTU_CHECK_MCU(OPT_MCU_MM32F327X) #defineTUP_DCD_ENDPOINT_MAX16 #elifTU_CHECK_MCU(OPT_MCU_MM32F533X) #defineTUP_DCD_ENDPOINT_MAX16
在while(1)循環(huán)里面添加tuh_task(); 然后解決基本的編譯問(wèn)題后燒錄板子插入U(xiǎn)盤,將printf接上串口調(diào)試助手即可測(cè)試。
voidTinyUSB_MSC_File_Explorer_Sample(void) { printf(" Test%s ",__FUNCTION__); TinyUSB_Device_Configure(); while(1) { //tinyusbhosttask tuh_task(); } }
插入和拔出U盤都能看到”A MassStorage device is mounted”和”A MassStorage device is unmounted” 證明已經(jīng)成功讀取到U盤。
圖6 插入和拔出U盤串口log打印
3U盤基本的文件讀寫測(cè)試
基于上述兩點(diǎn)我們已經(jīng)能通過(guò)USB設(shè)備識(shí)別到U盤了,同時(shí)TinyUSB libfatfssource里面也提供了FatFs 文件操作的接口,下面我們就基于這些文件操作接口函數(shù)對(duì)U盤里面的文件進(jìn)行讀寫操作測(cè)試。
圖7 ff.c FatFs 文件操作函數(shù)接口
首先識(shí)別到U盤我們先用f_mount 對(duì)U盤掛載,掛載成功之后使用f_getfree得到當(dāng)前U盤空間等相關(guān)信息。
printf("testf_getfree: "); fatfsCode=f_getfree((charconst*)&driverNumberBuffer[0],(DWORD*)&freeClusterNumber,&fs); if(fatfsCode) { printf("error "); returnfalse; } if(fs->fs_type==FS_FAT12) { printf("FATtype=FAT12 "); } elseif(fs->fs_type==FS_FAT16) { printf("FATtype=FAT16 "); } else { printf("FATtype=FAT32 "); } printf("bytespercluster=%d;numberofclusters=%lu ",fs->csize*512,fs->n_fatent-2); printf("Thefreesize:%dKB,thetotalsize:%dKB ",(freeClusterNumber*(fs->csize)/2), ((fs->n_fatent-2)*(fs->csize)/2));
根據(jù)那些操作接口函數(shù)我們可以對(duì)U盤里面的文件進(jìn)行讀寫操作,創(chuàng)建刪除文件/文件夾,插入U(xiǎn)盤后測(cè)試打印log如下:
圖8 f_readdir 讀取并列出U盤文件信息串口log打印
圖9 U盤文件讀寫操作串口log打印
基于 MM32F5333D7P 的USB 接口 TinyUSB應(yīng)用測(cè)試功能正常,測(cè)試在MM32F5330上能夠?qū)崿F(xiàn)對(duì)U盤里面的文件進(jìn)行讀寫操作,創(chuàng)建刪除文件/文件夾等操作。
審核編輯:湯梓紅
-
微控制器
+關(guān)注
關(guān)注
48文章
7911瀏覽量
153735 -
接口
+關(guān)注
關(guān)注
33文章
8952瀏覽量
153224 -
usb
+關(guān)注
關(guān)注
60文章
8147瀏覽量
270976 -
U盤
+關(guān)注
關(guān)注
7文章
494瀏覽量
64012 -
移植
+關(guān)注
關(guān)注
1文章
394瀏覽量
28583
原文標(biāo)題:靈動(dòng)微課堂 (第274講)|基于MM32F5333D7P的USB接口TinyUSB應(yīng)用:Host設(shè)備的移植和U盤文件讀寫
文章出處:【微信號(hào):MindMotion-MMCU,微信公眾號(hào):靈動(dòng)MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
基于MM32G5330的FlexCAN實(shí)現(xiàn)CANopenNode協(xié)議棧移植

基于MM32F5微控制器的FSMC接口外接SRAM存儲(chǔ)器的用法

MM32F5330內(nèi)存保護(hù)單元(MPU)設(shè)計(jì)

介紹STM32F107微控制器的主要片內(nèi)外設(shè)
基于靈動(dòng)微MM32F0130微控制器的OBD診斷儀系統(tǒng)參考方案
關(guān)于AVR微控制器最早期的樣品介紹
如何對(duì)TinyUSB上游倉(cāng)庫(kù)進(jìn)行移植

基于MM32F0160微控制器的機(jī)械鍵盤
Armv8-M架構(gòu)STAR-MC1處理器單片機(jī)MM32F5330系列

靈動(dòng)股份MM32F5330微控制器獲得芯片技術(shù)突破獎(jiǎng)
從STM32F42xxx/STM32F43xxx到STM32F74xxx/STM32F75xxx的微控制器應(yīng)用移植

評(píng)論