0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MM32F5330微控制器基本介绍 TinyUSB Host基本移植介绍

灵动MM32MCU 来源:灵动MM32MCU 2023-10-20 09:27 次阅读

1基本介绍

MM32F5330微控制器搭载了由安谋科技授权的Armv8-M架构“星辰”STAR-MC1处理器,最高工作频率可达180MHz。内置了128KB Flash,32KB SRAM,并集成了丰富的I/O端口和外设模块,包括ADCDAC模拟比较器,高级定时器,通用定时器,基础定时器和低功耗定时器,还包含通信接口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 位 AdvTimer, 6 个 GP Timer,1 个 LP Timer

工作电压:1.8V ~ 5.5V

工作温度范围:-40℃ ∼ +105℃

封装形式:LQFP64/48,QFN32

TinyUSB 是一个用于嵌入式系统的开源跨平台 USB 主机/设备协议栈,源码是托管在GitHub上面,地址是:https://github.com/hathach/tinyusb。

2TinyUSB Host基本移植介绍

之前我们有讲过TinyUSB Device的移植,本期我们就来介绍一下Host设备的移植。同样的我们介绍的移植修改是基于TinyUSB exampleshost下已经有参考示例的设备。将TinyUSB 从GitHub上克隆下来,examplehost文件夹里面就有对应的示例,本次我们以msc_file_explorer为示例演示如何移植一个host设备。

b92b4a90-6ea0-11ee-939d-92fbcf53809c.png

图1 TinyUSB Host示例

将tinyusb 目录下exampleshostmsc_file_explorer下的对应三个文件copy到例程TinyUSB_Host_MSC工程目录文件夹里面。

b9710f8a-6ea0-11ee-939d-92fbcf53809c.png

图2 TinyUSB msc_file_explore文件

b9aa6e92-6ea0-11ee-939d-92fbcf53809c.png

图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,并实现重定向函数。

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<< RCC_PLL2CFGR_PLL2SRC_Pos);

    /* set PLL2 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|=(0x01U<< RCC_CR_PLL2ON_Pos);

    /* Wait till PLL2 is ready */
    while ((RCC->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 接口函数文件。

b9eb9d36-6ea0-11ee-939d-92fbcf53809c.png

图4 Keil添加tuh_hcd_port.c文件

移植修改和之前Device设备基本流程一致,Keil工程按如下文件树添加对应文件。

ba2c0970-6ea0-11ee-939d-92fbcf53809c.png

图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)
#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)循环里面添加tuh_task(); 然后解决基本的编译问题后烧录板子插入U盘,将printf接上串口调试助手即可测试。

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” 证明已经成功读取到U盘。

ba7c0402-6ea0-11ee-939d-92fbcf53809c.png

图6 插入和拔出U盘串口log打印

3U盘基本的文件读写测试

基于上述两点我们已经能通过USB设备识别到U盘了,同时TinyUSB libfatfssource里面也提供了FatFs 文件操作的接口,下面我们就基于这些文件操作接口函数对U盘里面的文件进行读写操作测试。

babc2758-6ea0-11ee-939d-92fbcf53809c.png

图7 ff.c FatFs 文件操作函数接口

首先识别到U盘我们先用f_mount 对U盘挂载,挂载成功之后使用f_getfree得到当前U盘空间等相关信息

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));

根据那些操作接口函数我们可以对U盘里面的文件进行读写操作,创建删除文件/文件夹,插入U盘后测试打印log如下:

bb591a04-6ea0-11ee-939d-92fbcf53809c.png

图8 f_readdir 读取并列出U盘文件信息串口log打印

bb8c6c42-6ea0-11ee-939d-92fbcf53809c.png

图9 U盘文件读写操作串口log打印

基于 MM32F5333D7P 的USB 接口 TinyUSB应用测试功能正常,测试在MM32F5330上能够实现对U盘里面的文件进行读写操作,创建删除文件/文件夹等操作。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    6809

    浏览量

    147636
  • 接口
    +关注

    关注

    33

    文章

    7639

    浏览量

    148485
  • usb
    usb
    +关注

    关注

    59

    文章

    7432

    浏览量

    258161
  • U盘
    +关注

    关注

    7

    文章

    481

    浏览量

    62785
  • 移植
    +关注

    关注

    1

    文章

    367

    浏览量

    27854

原文标题:灵动微课堂 (第274讲)|基于MM32F5333D7P的USB接口TinyUSB应用:Host设备的移植和U盘文件读写

文章出处:【微信号:MindMotion-MMCU,微信公众号:灵动MM32MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于MM32G5330的FlexCAN实现CANopenNode协议栈移植

    本文将介绍如何基于灵动MM32G5330的FlexCAN实现CANopenNode协议栈的移植,并使用灵动官方提供的开发板Mini-G5333进行验证。
    发表于 04-12 09:15 318次阅读
    基于<b class='flag-5'>MM32G5330</b>的FlexCAN实现CANopenNode协议栈<b class='flag-5'>移植</b>

    微控制器(MCU)架构介绍

    来源电子工程专辑微控制器(MicroController)又可简称MCU或μC,也有人称为单芯片微控制器(Single Chip Microcontroller),将ROM、RAM、CPU、I/O
    发表于 06-29 11:31

    LPC800系列微控制器介绍PPT.zip

    LPC800系列微控制器介绍PPT.zip
    发表于 09-19 08:21

    LPC81x系列微控制器介绍PPT.zip

    LPC81x系列微控制器介绍PPT.zip
    发表于 09-19 08:30

    LPC800系列微控制器介绍PPT

    LPC800系列微控制器介绍PPT
    发表于 09-23 11:08

    介绍STM32F107微控制器的主要片内外设

    2.2 主要板载资源本节介绍STM32F107微控制器的主要片内外设,着重介绍10/100M以太网接口、CAN总线接口和RS485总线接口。2.2.1 10/100M以太网接口1.功能
    发表于 08-05 06:19

    MM32F031K6系列介绍

    MM32F系列是灵动微电子新一代MM32系列中率先升级推出的通用高性能MCU微控制器平台。灵动微MM32F系列和经典MM32F引脚兼容,并在
    发表于 08-10 06:40

    MM32系列微控制器

    MM32系列是灵动微电子于2020年推出的新一代通用MCU平台,旨在为客户提供更高性能、更低功耗、更高可靠性、稳定性和健壮性的微控制器。全新MM32硬件上与经典MM32全兼容,保留了2
    发表于 09-02 08:16

    基于灵动微MM32F0130微控制器的OBD诊断仪系统参考方案

    控:-本机通过片上的CAN通信引擎,及移植MM32F0130微控制器平台上的J1850协议,引出OBD-II接口接入到车载系统-OBD-II接口还将从车载系统中捕获电源管理命令,从而调整本机的功耗
    发表于 11-29 06:03

    SHPM6000系列微控制器DSP/FFT使用介绍

    HPM6000系列微控制器DSP与FFT使用介绍
    发表于 05-30 06:23

    基于FatFs在32位微控制器STM32上的移植

    基于FatFs在32位微控制器STM32上的移植
    发表于 09-26 09:31 9次下载
    基于FatFs在32位<b class='flag-5'>微控制器</b>STM32上的<b class='flag-5'>移植</b>

    如何对TinyUSB上游仓库进行移植

    TinyUSB 是一个用于嵌入式系统的开源跨平台 USB Host/Device 协议栈,其为了内存安全而设计,没有动态分配,同时也是线程安全的,所有中断事件都会被推迟,然后在非 ISR 任务函数中处理,支持多种 MCU。目前 Tiny
    的头像 发表于 05-06 11:26 2952次阅读
    如何对<b class='flag-5'>TinyUSB</b>上游仓库进行<b class='flag-5'>移植</b>

    灵动股份推出基于STAR-MC1的MM32G5330

    MM32G5330微控制器搭载了由安谋科技授权的 Armv8-M 架构“星辰”STAR-MC1 内核,性能上比传统的Cortex-M3/M4提升了近20%
    的头像 发表于 05-23 17:24 879次阅读

    Armv8-M架构STAR-MC1处理器单片机MM32F5330系列

    MM32F5330微控制器工作电压为1.8V~5.5V,工作温度范围为扩展工业型-40℃∼+105℃。内置多种省电工作模式保证低功耗应用的要求。封装采用LQFP64/48,QFN32。适合于工业控制、电机
    的头像 发表于 05-23 17:27 573次阅读
    Armv8-M架构STAR-MC1处理器单片机<b class='flag-5'>MM32F5330</b>系列

    灵动股份MM32F5330微控制器获得芯片技术突破奖

    8月,在OFweek维科网主办的“OFweek 2023(第八届)物联网产业大会”暨“维科杯·OFweek 物联网行业年度评选”中,灵动股份MM32F5330荣获“维科杯·OFweek 2023
    的头像 发表于 09-04 17:12 596次阅读