CUBEMX里FATFS下边的SDCard和USBdisk1.cab在哪里下载什么情况下能点

& &本文针对在水动力实验研究中数据量集中、数量多的问题,提出了一种基于FatFS文件系统的SD卡存储系统设计方案。该系统以ST公司的STM32F103ZET6为核心,通过O接口实现大量数据文件存储。详细讲解了系统的USB模块、RTC模块等硬件设计,探讨了在系统上移植FatFS文件系统的要点,并在SD卡上实现了FAT文件的读写功能。该系统传输速度快、可靠性强,具有一定的应用价值。
& & 在水动力的实验中,通过改变模型外形设计、迎水角度、水流速度等参数观察空化现象对模型的影响。参数变化对应记录一组实验数据,而整个实验过程,共有几十组实验数据需要分别采集、记录。同时,实验中空化产生到溃灭过程最好都能记录下来以供后续研究。因此,对实验中采用的数据采集系统提出了数据短时集中、文件数量多的要求。 & & 本文采用了以SD卡为存储体,采用FAT文件系统记录数据的架构来处理数据。SD卡的核心是NANDFlash,由于体积小、功耗低的优点被广泛应用于各类电子产品中。采用文件系统能够对大容量存储媒介进行高效的管理,并且适合于主流的操作系统。文件系统采用开源的FatFS,实现了使用FAT文件系统的数据存储系统。FatFS是专门为嵌入式系统设计的FAT文件系统模块,它是免费开源的,完全用标准C语言编写,具有良好的硬件平台独立性,可以移植到多种嵌入式处理器上。
1 系统结构 & & 数据存储系统结构如图1所示。该数据存储系统以ST公司的STM32F103ZET6为核心控制芯片,与上位机通过串行通信接口发送数据,或者USB接口直接写数据,控制芯片以FAT文件的形式存储在SD卡中。其自带的RTC单元将存储的数据文件以实时的系统时间命名,并在文件内容中也加入时间戳等信息,方便多个文件后期处理。由于实现了文件系统,用户利用USB接口时,该系统被识别为U盘,可以用PC机进行任意的文件读写操作。
& & 2 硬件结构
& & 2.1 微控制器
& & STM32是ST公司推出的基于Cortex&M3内核的32位ARM芯片系列,本系统选用了STM32F103ZET6作为主控MCU,这个芯片属于STM32F103系列的高容量芯片,片内Flash容量为512 KB,片内SRAM容量为64KB,144封装,72 M主频。具备完整的FSMC总线,26位地址线和16位数据宽度,即支持各种类型的SD卡接口。
& & 2.2 MroSD模块
& & STM32F103ZET6微控制器的SDIO单元在AHB外设总线和SD卡设备问提供了操作接口,支持不同的数据总线模式。SD规范协议中定义了对SD卡的两种访问模式:SD模式和SPI模式。SD模式允许4线的高速数据传输。SPI模式允许简单地通过SPI接口来和SD卡通信,这种模式同SD模式相比丧失了速度优势。在本系统中,采用了SDIO接口来访问SD卡,即SD模式。STM32F103ZET6和MicroSD模块接口如图2所示。
2.3 USB接口硬件 & & STM32F103ZET6的USB单元实现了USB2.0全速总线和APB1总线间的接口,增强了系统的兼容性。还采用USB接口防护器件NUP4114,满足ESD防护标准IEC(ESD15kV air,8 kV Contact)。其USB外设支持USB挂起/回复操作,可以停止设备时钟实现低功耗。USB接口如图3所示。
& & 2.4 RTC模块
& & STM32F103ZET6的实时时钟RTC模块是一个独立的定时器。RTC模块拥有一组连续计数的计数器,在软件配置下,可提供时钟日历的功能。RTC硬件都集成在处理器内部,包含了40 kHz低速内部RC振荡LSE。
& & 但是,其精准度不是很高,本系统又增加了32.768 kHz的电路驱动RTC实时时钟。外围电路增加纽扣电池即可长时间工作。
&&&&&往下看有更多相关资料
本网站试开通微、小企业商家广告业务;维修点推荐项目。收费实惠有效果!欢迎在QQ或邮箱联系!
试试再找找您想看的资料
资料搜索:
查看相关资料 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款
copyright & &广电电器(中国梧州) -all right reserved& 若您有什么意见或建议请mail: & &
地址: 电话:(86)774-2826670& & &&)只需一步,快速开始
后使用快捷导航没有帐号?
STM32CubeMX系列教程18:文件系统FATFS
查看: 11628|
评论: |原作者: MyMX1213
摘要: 上一章我们介绍了SD卡读写操作,本章讲过如何通过FATFS文件系统读写SD卡内部的文件
FATFS简介& &&FatFS是一个为小型嵌入式系统设计的通用FAT(File&Allocation&Table)文件系统模块。FatFs&的编写遵循ANSI&C,并且完全与磁盘I/O层分开。它可以被嵌入到低成本的微控制器中,如AVR,&8051,&PIC,&ARM等等。兼容Windows文件系统。关于FATFS文件系统的API函数介绍,底层移植接口和例程等可以查到FATFS官网。FATFS官网:& & & & 结合STM32cubeMX软件移植FATFS文件系统非常简单。本章程序在上一章SDMMC工程的基础上修改,复制串口SDMMC的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。在中间件中选择SD卡,在SD上建立文件系统。在FATFS配置中选择简体中文字GBK编码支持中文,使能长文件名,缓存存储在堆(STACK)中。& & & & 点击菜单栏中Project-&Setting修改堆的大小,堆设置为0x1000。(注意:由于刚才设置长文件名动态缓存存储在堆中,故需要增大堆大小,如果不修改则程序运行时堆会生成溢出,程序进入硬件错误中断(HardFault),死循环)。& & & & 生成报告以及代码,编译程序。在fatfs.c文件中可以看到FATFS初始化函数。在bsp_drver_sd.c文件中可以看到SD卡的板级操作函数,包括SD初始化,读写擦除块操作函数。在sd_diskio.c文件中可以看到FATFS文件系统移植的底层操作函数。 删除上一章SDMMC的应用程序。在main.c文件前添加变量。fs为文件系统工作区,fil为文件对象结构的指针。rtext/wtext分别为读写缓存,bytesread/byteswritten分别存储读写的字节数。filename存储文件名(FATFS文件系统配置时使能了长文件名,最长255字节,若不支持长文件名,则文件名最多8个字节)。/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
// Work area (file system object) for logical drive
// file objects
/* File write counts */
/* File read counts */
uint8_t wtext[] = "This is STM32 working with FatFs"; /* File write buffer */
uint8_t rtext[100];
/* File read buffers */
char filename[] = "STM32cube.txt";
/* USER CODE END PV */ 在main函数中添加应用程序。程序中首先注册一个文件系统对象,然后新建STM32cube.txt文件,将数据写文件中再读出来,判断文件系统是否工作正常。/* USER CODE BEGIN 2 */
printf("\r\n ****** FatFs Example ******\r\n\r\n");
/*##-1- Register the file system object to the FatFs module ##############*/
retSD = f_mount(&fs, "", 0);
printf(" mount error : %d \r\n",retSD);
Error_Handler();
printf(" mount sucess!!! \r\n");
/*##-2- Create and Open new text file objects with write access ######*/
retSD = f_open(&fil, filename, FA_CREATE_ALWAYS | FA_WRITE);
printf(" open file error : %d\r\n",retSD);
printf(" open file sucess!!! \r\n");
/*##-3- Write data to the text files ###############################*/
retSD = f_write(&fil, wtext, sizeof(wtext), (void *)&byteswritten);
printf(" write file error : %d\r\n",retSD);
printf(" write file sucess!!! \r\n");
printf(" write Data : %s\r\n",wtext);
/*##-4- Close the open text files ################################*/
retSD = f_close(&fil);
printf(" close error : %d\r\n",retSD);
printf(" close sucess!!! \r\n");
/*##-5- Open the text files object with read access ##############*/
retSD = f_open(&fil, filename, FA_READ);
printf(" open file error : %d\r\n",retSD);
printf(" open file sucess!!! \r\n");
/*##-6- Read data from the text files ##########################*/
retSD = f_read(&fil, rtext, sizeof(rtext), (UINT*)&bytesread);
printf(" read error!!! %d\r\n",retSD);
printf(" read sucess!!! \r\n");
printf(" read Data : %s\r\n",rtext);
/*##-7- Close the open text files ############################*/
retSD = f_close(&fil);
printf(" close error!!! %d\r\n",retSD);
printf(" close sucess!!! \r\n");
/*##-8- Compare read data with the expected data ############*/
if(bytesread == byteswritten)
printf(" FatFs is working well!!!\r\n");
/* USER CODE END 2 */在main.c文件后面添加错误处理函数。/* USER CODE BEGIN 4 */
static void Error_Handler(void)
printf("something wrong ....\r\n");
/* User may add here some code to deal with this error */
/* USER CODE END 4 */ 在main.c文件前面添加错误处理函数声明。/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/
static void Error_Handler(void);
/* USER CODE END PFP */ 编译程序并下载到开发板。将Micro SD卡插入Micro&SD&Storage&Board中,再插到Open746I-C开发的SDMMC接口中。打开串口调试助手,设置波特率为115200,按下复位串口助手上面会显示如下信息。下载简介一下FATFS的几个操作函数。1.f_mount在FatFs模块上注册、注销一个工作区(文件系统对象)。FRESULT f_mount (
FATFS* fs,
/* Pointer to the file system object (NULL:unmount)*/
const TCHAR* path,
/* Logical drive number to be mounted/unmounted */
/* 0:Do not mount (delayed mount), 1:Mount immediately */
) 参数fs 工作区(文件系统对象)指针path &注册/注销工作区的逻辑驱动器号opt & & &注册或注销选项2.f_open创建/打开一个文件对象FRESULT f_open (
/* Pointer to the blank file object */
const TCHAR* path,
/* Pointer to the file name */
/* Access mode and file open mode flags */
)fp & 将被创建的文件对象结构的指针path &文件名指针,指定将创建或打开的文件名mode 访问类型和打开方法,由一下标准的一个组合指定的。模式&&&&&&&&&&&&&&&&&&&&&&描述&&FA_READ&&&指定读访问对象。可以从文件中读取数据。&与FA_WRITE&结&合可以进行读写访问。&&&FA_WRITE&&&指定写访问对象。可以向文件中写入数据。与FA_READ&结合&可以进行读写访问。&&&FA_OPEN_EXISTING&&打开文件。如果文件不存在,则打开失败。(默认)&&FA_OPEN_ALWAYS&&&如果文件存在,则打开;否则,创建一个新文件。&&FA_CREATE_NEW&&&创建一个新文件。如果文件已存在,则创建失败。&&&FA_CREATE_ALWAYS&&创建一个新文件。如果文件已存在,则它将被截断并覆盖。3.f_close关闭一个打开的文件FRESULT f_close (
/* Pointer to the file object to be closed */
) fp 指向将被关闭的已打开的文件对象结构的指针。4.f_read从一个打开的文件中读取数据FRESULT f_read (
/* Pointer to the file object */
void* buff,
/* Pointer to data buffer */
/* Number of bytes to read */
/* Pointer to number of bytes read */
) fp & 指向将被读取的已打开的文件对象结构的指针buff &指向存储读取数据的缓冲区的指针btr &要读取的字节数br 指向返回已读取字节数的UINT变量的指针,返回为实际读取的字节数。5.f_write写入数据到一个已打开的文件FRESULT f_write (
/* Pointer to the file object */
const void *buff, /* Pointer to the data to be written */
/* Number of bytes to write */
/* Pointer to number of bytes written */
) fp & 指向将被写入的已打开的文件对象结构的指针buff &指向存储写入数据的缓冲区的指针btr &要写入的字节数br 指向返回已写入字节数的UINT变量的指针,返回为实际写入的字节数。另外FatFs还有很多API操作函数,在这里不再作详细的介绍,详细信息请查看FatFs文件系统官网。
刚表态过的朋友 ()
上一篇:下一篇:
CubeMX教程
本章讲解LwIP协议栈实现HTTP服务器
本章讲解USB作为主机使用的例程。
本章讲解USB作为设备使用的例程。
本章教程带领大家移植StmemWin 5.22到STM32的LDTC接口控制的RGB接口屏幕。
本章讲解微雪7inch Capacitive Touch LCD (F)屏幕的触摸控制。
本章讲解LDTC接口控制7寸
LCD屏幕显示。
本章讲解通过FMS接口控制Nand Flash K9F1G08U0E (1G Bit)
本章讲解通过FMS接口控制Nand Flash K9F1G08U0E (1G Bit)
本章介绍Quad-SPI总线,通过Quad-SPI接口控制W25Qxx芯片
上一章我们介绍了SD卡读写操作,本章讲过如何通过FATFS文件系统读写SD卡内部的文件
本章介绍SD/SDIO MMC卡主机接口(SDMMC),通过SDMMC接口读写SD卡。
本章介绍stm32F7系列芯片的随机数发生器(RNG)和循环冗余校验(CRC)。
本章介绍STM32Fxx的两种看门狗:独立看门狗(IWDG)和窗口看门狗(WWDG)
本章介绍STM32Fxx系统低功耗模式。
摘要:本章介绍实时时钟(RTC)。1.RTC简介
实时时钟(RTC)是一个独立的BCD定时器/计
本章介绍CAN总线协议。
本章介绍如何用程序通过SPI控制w25Q125fv。
本章介绍SPI总线。以及介绍串行flash芯片W25Q128FV
本章介绍I2C总线。通过I2C控制AT24Cxx芯片。
本章通过两个例程介绍STM32的数模转换器(DAC),第一个通过软件控制ADC单次转换输出
本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通
上一章讲解了串口的轮询和中断模式,这一章介绍一下通过DMA模式控制串口传输。
本章以串口为例讲解,HAL 库轮询,中断,DMA 三种编程模型。
上一章我们讲解了定时器的基本应用,以及定时器中断。这一章我们讲解通过定时器控制管
stm32的定时器功能非常强大,包括基本定时器,通用定时器以及高级定时器。 本章介绍定
本章讲解STM32的外部中断已经中断的运行流程。
本章讲解stm32的GPIO使用,通过按键控制LED灯亮灭
本章通过如何点亮一个LED灯讲解STM32CubeMX软件的使用以及STM32最新的HAL固件库
Powered byCube+SDIO+FATFS使用时SD卡读块卡死问题!! - STM32 - 意法半导体STM32/STM8技术社区
后使用快捷导航没有帐号?
查看: 7688|回复: 17
Cube+SDIO+FATFS使用时SD卡读块卡死问题!!
在线时间403 小时
ST金币1269
该用户从未签到主题帖子好友
本帖最后由 adlu 于
15:09 编辑
MCU型号:STM32F407ZET6开发软件:STM32CubeMX V4.11,MDK V5
使用STM32CubeMX配置生成程序框架,使用SDIO 4bit模式操作SD卡,并配置了使用FATFS。截图如下
QQ图片21.png (50.36 KB, 下载次数: 1)
14:59 上传
QQ图片34.png (63.15 KB, 下载次数: 1)
14:59 上传
SDIO时钟分频系数为2,即SDIO_CK=48MHz/(2+2)=12MHz.SDIO其他配置默认。
QQ图片05.png (38.33 KB, 下载次数: 0)
15:00 上传
FATFS配置,仅改变CODE_PAGE为简体中文,其他默认。
a.png (108.31 KB, 下载次数: 0)
15:01 上传
问题描述:SD卡读写操作时,经常出现卡死的情况。通过J-Link调试,发现卡死时程序在HAL_SD_ReadBlocks()函数的两个语句之间来回运行,如下图。
b.png (69.08 KB, 下载次数: 3)
15:02 上传
&&/* Read block(s) in polling mode */
&&if(NumberOfBlocks & 1)
&&{
}
&&else
&&{
& & /* Check for error conditions */
& & errorstate = SD_CmdResp1Error(hsd, SD_CMD_READ_SINGLE_BLOCK);
& & if (errorstate != SD_OK)
& & {
& && &
& & }& &
& & /* In case of single block transfer, no need of stop transfer at all */
#ifdef SDIO_STA_STBITERR
& & while(!__HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND | SDIO_FLAG_STBITERR)) /*卡在此句1*/
#else /* SDIO_STA_STBITERR not defined */
& & while(!__HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND))& && &
#endif /* SDIO_STA_STBITERR */
& & {
& && &if (__HAL_SD_SDIO_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF)) /*卡在此句2*/
& && &{
& && &&&/* Read data from SDIO Rx FIFO */
& && &&&for (count = 0; count & 8; count++)
& && &&&{
& && && & *(tempbuff + count) = SDIO_ReadFIFO(hsd-&Instance);
& && &&&}
& && &&&
& && &&&tempbuff += 8;
& && &}
& & }
&&}复制代码
降低SDIO的时钟或配置为1bit模式,也无法避免该现象的发生。
请高人指点迷津!!
找到while(hsd->SdTransferCplt == 0)这个语句并屏蔽....
你的SDIO global interrupt的优先级是多少? SDIO的Tx,Rx的DMA的中断优先级又是多少?
我也碰到你的问题,但我将SDIO global interrupt的优先级设置为小于或等于SDIO的Tx,Rx的DMA的中断优先级后,问题好像解决了。
在线时间105 小时
该用户从未签到主题帖子好友
金牌会员, 积分 1479, 距离下一级还需 3521 积分
金牌会员, 积分 1479, 距离下一级还需 3521 积分
已经解决。
CubeMX生成的代码SDIO polling模式可能真的有问题。
配置SDIO使用DMA模式,SDIO_RX和SDIO_TX配 ...
找到while(hsd-&SdTransferCplt == 0)这个语句并屏蔽....
你的SDIO global interrupt的优先级是多少? SDIO的Tx,Rx的DMA的中断优先级又是多少?
我也碰到你的问题,但我将SDIO global interrupt的优先级设置为小于或等于SDIO的Tx,Rx的DMA的中断优先级后,问题好像解决了。
在线时间123 小时
ST金币2075
该用户从未签到主题帖子好友
金牌会员, 积分 2369, 距离下一级还需 2631 积分
金牌会员, 积分 2369, 距离下一级还需 2631 积分
,看能不能帮助你...
在线时间403 小时
ST金币1269
该用户从未签到主题帖子好友
参考 http://www.stmcu.org/module/forum/thread--1.html
,看能不能帮助你...
这个贴我看过,只是讲SD卡读写的基本操作。这部分操作我已经实现,包括FATFS对文件的读和写操作。
而且已经实现文件的读取,创建,写入,保存,删除等操作。
我遇到的问题是:很容易卡死在上面贴出的那两行代码中。
在线时间123 小时
ST金币2075
该用户从未签到主题帖子好友
金牌会员, 积分 2369, 距离下一级还需 2631 积分
金牌会员, 积分 2369, 距离下一级还需 2631 积分
明白,好像是什么状态不满足时卡死了,有没有可能是硬件原因,如信号不稳定等...
在线时间403 小时
ST金币1269
该用户从未签到主题帖子好友
本帖最后由 adlu 于
18:22 编辑
问题已解决。
在线时间403 小时
ST金币1269
该用户从未签到主题帖子好友
本帖最后由 adlu 于
18:23 编辑
已经解决。
CubeMX生成的代码SDIO polling模式可能真的有问题。
配置SDIO使用DMA模式,SDIO_RX和SDIO_TX配置相同。
a.jpg (89.72 KB, 下载次数: 2)
18:21 上传
生成代码,然后需要手动修改部分代码。
1.如果是用CubeMX 4.11及更早版本的,要修改stm32f4xx_hal_msp.c中HAL_SD_MspInit( )函数的两个DMA配置参数,将DMA_NORMAL改为DMA_PFCTRL。
2.修改sd_diskio.c中SD_read( )和SD_write( )函数,
分别将BSP_SD_ReadBlocks( )改为BSP_SD_ReadBlocks_DMA( );
将BSP_SD_WriteBlocks( )改为BSP_SD_WriteBlocks_DMA( ).
3.全局搜索SdTransferCplt变量,找到while(hsd-&SdTransferCplt == 0)这个语句并屏蔽,否则会卡死在词句,我也不知道为什么。
经过上述步骤,就可以顺利的使用SDIO DMA功能进行SD卡读写了。
配合CubeMX生成的FATFS架构,就可以进行SD卡的文件操作了。目前未发现其他问题。
谢谢分享!&
在线时间7 小时
该用户从未签到主题帖子好友
初级会员, 积分 121, 距离下一级还需 79 积分
初级会员, 积分 121, 距离下一级还需 79 积分
估计F103可以用来参考。先谢谢经验分享!
在线时间76 小时
该用户从未签到主题帖子好友
金牌会员, 积分 1043, 距离下一级还需 3957 积分
金牌会员, 积分 1043, 距离下一级还需 3957 积分
按照您的方法没有解决呢
在线时间227 小时
ST金币2428
该用户从未签到主题帖子好友
金牌会员, 积分 4349, 距离下一级还需 651 积分
金牌会员, 积分 4349, 距离下一级还需 651 积分
谢谢分享!!!
STM32粉丝勋章Ⅳ
狂欢节专属(智多星)
STM32粉丝勋章Ⅰ
狂欢节专属(微信上墙)
STM32粉丝勋章Ⅱ
狂欢节专属(研讨会问答)
站长推荐 /1
Tel: 3-8064
备案号: 苏ICP备号-2
|||意法半导体STM32/STM8技术社区
Powered bystm32(5)
1.问题描述:使用STM32CubeMX配置SD基于SD卡的FATFS文件系统,并进行测试文件的读写。
2.测试准备:
(1)测试环境:
软件平台:STM32CubeMX -4.22.0;KEIL5
硬件平台:原子战舰V3
测试代码参考硬石例程,下方有附资料链接。此外这是我收藏的帖子地址
(2)测试环境搭建:
硬件图就不发了,基本都是一样的。
I.Stm32CubeMX配置:下面是主要配置,其中SD等部分配置可参考前一文章或者自行下载源码查看。
首先是选择开启FATFS,勾选SD Card。
接着是Configuration界面。
配置中间层FATFS选项。
然后下图我开启的是动态的时间戳,硬石的教程里用的是静态的,实际测试两者均能够通过。至此FATS设置基本上完毕,其他默认就好。由此可以体会到这软件是多强大。
由于开启长文件名,且是将缓存放在STACK中的,所以对应在设置工程选项时,堆部分空间也要设置大一点。在cube软件里按ALT+P即可调出设置界面。主要更改下图Minimum Stack Size的值即可。
II.测试代码:
有教程的好处就是拿别人敲好的直接复制过来就可,然后根据具体情况调试更改。嘿嘿
下面先是变量申请:
然后就是测试代码咯:
画横线的部分是对源码做出的主要改动,硬石源码是通过cube生成工程后自己再添加了很多自己的部分。这里本人直接使用软件生成初始化函数,用自带声明的参数去进行判断。不然每一次重新生成工程都要手动屏蔽一大堆代码想想都烦。
但做到这儿,满以为搞定完成,但实际测试时系统卡在下图这个地方。
经DEBUG后发现是系统滴答定时器中断没有进去,仔细检查代码后发现是自己智障勒。。。实际使用时,是可以通过的。但我本身基本不使用系统自带的延时函数,所以直接对这个函数用自己的延时函数重构了。毕竟系统提供的这个延时函数并不是很好。如果有要使用系统自带的延时,可以把测试代码main中的delay_init()屏蔽即可。
3.测试结果:
把SD拔下,用读卡器接入电脑。
测试完成。[]~( ̄▽ ̄)~*
4.参考资料及测试源码:
首先贴出硬石YS-F1Pro开发板HAL库例程参考源码地址下载:
密码 : 416v
然后是测试代码:
访问:4010次
排名:千里之外FatFs with Kinetis | MCU on Eclipse

我要回帖

更多关于 win32diskimager 的文章

 

随机推荐