点击蓝字添加“星标★” 关注咱们
1►
基本介绍
MM32F5330微掌控器搭载了由安谋科技授权的Armv8-M架构“星辰”STAR-MC1处理器,最高工作频率达到180MHz。内置了128KB Flash,32KB SRAM,并集成为了丰富的I/O端口和外设模块,包含ADC,DAC,模拟比较器,高级按时器,通用按时器,基本按时器和低功耗按时器,还包括通信接口如I2C,I3C从机,SPI或I2S,UART,USART,低功耗UART,集成为了内部PHY的USB 2.0全速Device/Host掌控器,以及FlexCAN-FD接口。
180MHz“星辰” STAR-MC1 处理器,内置单精度浮点运算单元 FPU,支持DSP 扩展
128KB Flash,32KB SRAM,集成丰富的 I/O 端口和外设模块
4 个UART,1 个 USART,1 个 LPUART
1 个集成内部 PHY 的 USB 2.0
1 个 FlexCAN-FD 接口
2 个 I2C,1 个 I3C 从机,3 个 SPI 或 I2S
2 个 3MSPS 12 位的 ADC, 1 个 12 位的 DAC
2 个 16 位 Adv Timer, 6 个 GP Timer,1 个 LP Timer
工作电压:1.8V ~ 5.5V
工作温度范围:-40℃ ∼ +105℃
封装形式:LQFP64/48,QFN32
TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备协议栈,源码是托管在GitHub上面,位置是:https://github.com/hathach/tinyusb。
2►
TinyUSB Host基本移植介绍
之前咱们有讲过TinyUSB Device的移植,本期咱们就来介绍一下Host设备的移植。一样的咱们介绍的移植修改是基于TinyUSB examples\host下已然有参考示例的设备。将TinyUSB 从GitHub上克隆下来,example\host文件夹里面就有对应的示例,这次咱们以msc_file_explorer为示例演示怎样移植一个host设备。
图1 TinyUSB Host示例
将tinyusb 目录下examples\host\msc_file_explorer下的对应三个文件copy到例程TinyUSB_Host_MSC工程目录文件夹里面。
图2 TinyUSB msc_file_explore文件
图3 TinyUSB_Host_MSC工程目录
MM32F5333有两个PLL,PLL1可以设置高主频180M给CPU和其他外设运用,PLL2能够单独配置给USB运用。增多一个USB时钟配置函数void USB_DeviceClockInit(void)和void SetPLL2ToUSB_HSE_96M(void),PLL2配置96M 选取PLL2输入二分频到USB。有运用TU_LOG做串口输出,能够使能CFG_TUSB_DEBUG 为需要的输出等级,同期将#define tu_printf printf 改到串口输出,Keil Options->Target 勾选Use MicroLIB,并实现重定向函数。
void SetPLL2ToUSB_HSE_96M(void)
{
RCC->CR &= ~RCC_CR_PLL2ON_Msk; /* Reset LL2SRC, LL2PDIV, LL2MUL, LL2DIV bits */
RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2SRC_Msk;
RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2PDIV_Msk;
RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2MUL_Msk;
RCC->LL2CFGR &= ~RCC_PLL2CFGR_PLL2DIV_Msk; /* Config pll clock source*/RCC->LL2CFGR |= (0x01
U << RCC_PLL2CFGR_PLL2SRC_Pos); /* set LL2 CP Current Control Signals */
RCC->PLL2CFGR &= ~RCC_PLL2CFGR_PLL2ICTRL_Msk; if (HSE_VALUE >= 8000000
)
{ RCC->PLL2CFGR |= (0x03
<< RCC_PLL2CFGR_PLL2ICTRL_Pos);
} else
{ RCC->PLL2CFGR |= (0x01
<< RCC_PLL2CFGR_PLL2ICTRL_Pos);
} RCC->PLL2CFGR |= ((0x17<< RCC_PLL2CFGR_PLL2MUL_Pos) | (0x01
<< RCC_PLL2CFGR_PLL2DIV_Pos)); /* Enable PLL2 */ RCC->CR |= (0x01
U << RCC_CR_PLL2ON_Pos); /* Wait till PLL2 is ready */ while((RCC->CR & RCC_CR_PLL2RDY_Msk) ==0
)
{ __ASM("nop"); /* __NOP(); */
}
} void USB_DeviceClockInit(void
)
{ /* Select USBCLK source */ RCC->CFGR |= 1 << 19; //USB CLK SEL PLL2RCC->CFGR &= ~(0x03 << 22
); RCC->CFGR |= 0x01 << 22
;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_USB_FS, ENABLE);
}
添加tuh_hcd_port.c 接口函数文件。
图4 Keil添加tuh_hcd_port.c文件
移植修改和之前Device设备基本流程一致,Keil工程按如下文件树添加对应文件。
图5 Keil工程添加对应.c文件
工程文件树如下:
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) #define TUP_DCD_ENDPOINT_MAX 8#elif TU_CHECK_MCU(OPT_MCU_MM32F327X) #define TUP_DCD_ENDPOINT_MAX 16 #elif TU_CHECK_MCU(OPT_MCU_MM32F533X) #defineTUP_DCD_ENDPOINT_MAX 16
在while(1)循环里面添加tuh_task(); 而后处理基本的编译问题后烧录板子插进U盘,将printf接上串口调试助手就可测试。 void TinyUSB_MSC_File_Explorer_Sample(void)
{ printf("\r\nTest %s \r\n"
, __FUNCTION__);
TinyUSB_Device_Configure(); while (1
)
{ // tinyusb host task
tuh_task();
}
}
插进和拔出U盘都能看到”A MassStorage device is mounted”和”A MassStorage device is unmounted” 证明已然成功读取到U盘。
图6 插进和拔出U盘串口log打印
3►
U盘基本的文件读写测试
基于以上两点咱们已然能经过USB设备识别到U盘了,同期TinyUSB lib\fatfs\source里面亦供给了FatFs 文件操作的接口,下面咱们就基于这些文件操作接口函数对U盘里面的文件进行读写操作测试。
图7 ff.c FatFs 文件操作函数接口
首要识别到U盘咱们先用f_mount 对U盘挂载,挂载成功之后运用f_getfree得到当前U盘空间等关联信息。 printf("test f_getfree:\r\n"
); fatfsCode = f_getfree((char const *)&driverNumberBuffer[0
], (DWORD *)&freeClusterNumber, &fs); if
(fatfsCode)
{ printf("error\r\n"
); return
false;
} if
(fs->fs_type == FS_FAT12)
{ printf(" FAT type = FAT12\r\n"
);
} else if
(fs->fs_type == FS_FAT16)
{ printf(" FAT type = FAT16\r\n"
);
} else
{ printf(" FAT type = FAT32\r\n"
);
} printf(" bytes per cluster = %d; number of clusters=%lu \r\n", fs->csize * 512, fs->n_fatent - 2
); printf(" The free size: %dKB, the total size:%dKB\r\n", (freeClusterNumber * (fs->csize) / 2
), ((fs->n_fatent - 2) * (fs->csize) / 2
));
按照哪些操作接口函数咱们能够对U盘里面的文件进行读写操作,创建删除文件/文件夹,插进U盘后测试打印log如下:
图8 f_readdir 读取并列出U盘文件信息串口log打印
图9 U盘文件读写操作串口log打印
基于 MM32F5333D7P 的USB 接口 TinyUSB应用测试功能正常,测试在MM32F5330上能够实现对U盘里面的文件进行读写操作,创建删除文件/文件夹等操作。
往期精彩
第273讲|运用MM32-Link MINI对MM32G0001恢复出厂设置
第272讲|基于MM32F0140的I2C与24C02通信
第271讲|基于MM32F0140的SPI与W25Q80通信
第270讲|CLASS B内部时钟检测在MM32SPIN0280上的实现
第269讲|MM32F5330内存守护单元(MPU)
第268讲|MindSDK应用基本——ADC模块样例
第267讲|MindSDK应用基本——SPI模块样例
第266讲|MM32F0163D7P的ADC内部1.2V参考电压的运用
第265讲|基于MM32F0163D7P的USB Audio Class(UAC)音频设备
第264讲|基于MM32F0163D7P的USB接口TinyUSB应用:移植和新增设备(二)
第263讲|基于MM32F0163D7P的USB接口TinyUSB应用:移植和新增设备(一)
第262讲|基于MM32F0163D7P的I2S接口的音乐播放器实验
第261讲|MindSDK应用基本——TIM模块样例
第260讲|mm32-2nd-bootloader技术白皮书(9)——OTA升级
第259讲|mm32-2nd-bootloader技术白皮书(8)——进阶:实现 Ymodem 更新代码
第258讲|mm32-2nd-bootloader技术白皮书(7)——性能评定
第257讲|MM32F5270平台ADC注入通道的单周期采样的实现
第256讲|MM32G0140 I2C驱动EEPROM
第255讲|MM32SPIN0280内部时钟捕捉外边HSE时钟
第254讲|Mini-F0160实现USB转3路虚拟串口
第253讲|为MindSDK搭建Keil MDK研发环境
第252讲|开源项目:基于MM32F0160微掌控器的机械键盘
第251讲|为MindSDK搭建armgcc编译环境(Windows版)
第250讲|mm32-2nd-bootloader技术白皮书(6)——总结及注意事项
第249讲|mm32-2nd-bootloader技术白皮书(5)——编译可在QSPI Flash上运行的程序
第248讲|mm32-2nd-bootloader技术白皮书(4)——设计实现简单的2nd bootloader
第247讲|mm32-2nd-bootloader技术白皮书(3)——设计实现QSPI Flash的下载算法
第246讲|mm32-2nd-bootloader技术白皮书(2)——QSPI外设简介
第245讲|mm32-2nd-bootloader技术白皮书(1)——配置软硬件环境
第244讲|FlexCAN OTA
第243讲|单独下载可执行文件到MM32F5微掌控器
灵动微课堂大合辑
公众号推送机制改版
感兴趣的动态频频“失联”?
简单两步点亮“星标★”
再也不错失每一篇灵动动态!
关于灵动
上海灵动微电子股份有限机构成立于 2011 年,是中国本土领先的通用 32 位 MCU 制品及处理方法供应商。机构基于 Arm Cortex-M 系列内核研发的 MM32 MCU 制品持有 F/G/L/A/SPIN/W 六大系列,日前已量产近 300 款型号,累计交付超 4 亿颗,每年都有近亿台配备了灵动 MM32MCU 的优秀制品交付到客户手中,在本土通用 32 位 MCU 机构中位居前列。
灵动客户涵盖智能工业、汽车电子、通信基建、医疗健康、智慧家电、物联网、个人设备、手机和电脑等应用行业。灵动是中国为数不多的同期得到了 Arm-KEIL、IAR、SEGGER 官方支持的本土 MCU 机构,并创立了独立、完整的通用 MCU 生态体系。灵动始终秉承着“诚信、承诺、创新、合作”的精神,为客户供给从硬件芯片到软件算法、从参考方法到系统设计的全方位支持。
灵动股份
微X号:MindMotion-MMCU
长按识别二维码关注咱们
MORE
官网:www.mm32mcu.com
微X公众号:灵动MM32MCU
灵动MM32MCU技术论坛:
bbs.21ic.com/iclist-696-1.html
|