




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一. 设计名称2二. 设计要求2三. 设计目的2四. 设计环境2五. 设计思路31总体设计方案 35.1.1控制模块35.1.2电源模块35.1.3音频解码模块35.1.4显示模块45.1.5 总结42. 硬件电路设计 55.2.1SD 卡模块55.2.2音频解码模块65.2.3液晶显示模块73. 软件程序设计MP3播放流程设计 .8.六. 调试过程 96.1设计调试部分96.1.1USB 转串口 96.1.2使用Flash loader进行串口连接 96.1.3 SD 卡设置106.2问题分析106.2.1软件部分问题分析 106.2.2硬件部分问题分析 10七. 心得体会11
2、八. 参考文献12word教育资料一. 设计名称基于STM32的嵌入式MP3设计二. 设计要求实现简单的MP3音乐播放功能,单曲循环播放,下一首,音量调节,添加歌曲 等简单功能。三. 设计目的1了解所选择的ARM芯片各个引脚的功能,工作方式,计时/定数,I/O 口,中 断等的相关原理,并巩固学习嵌入式的相关内容知识。2. 了解STM32、SPI接口、SD卡、TIMER、中断、FAT文件系统、USB等的应用。3通过MP3播放器设计掌握嵌入式开发的基本方法和步骤。4.注重培养综合运用所学知识、独立分析和解决实际问题的能力,培养创新意 识和创新能力,并获得科学研究的基础训练。四. 设计环境硬件:PC
3、机、ARM Cortex系列为控制器开发套件 USB串口线软件:windows 98/XP/2000 系统、Flash loader五设计思路1.总体设计方案本次设计采用STM32系列微控制器,结合解码芯片VSI003、SD卡、LCD 等外围设备设计并实现了 MP3播放器。其主要功能有:播放VSI003支持的所有 音频文件,如MP3、WMA、WAV文件,且音质非常好;通过 LCD显示歌曲名 字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。5.1.1控制模块此方案采用STM32 ARM板实现,它使用高性能的 ARM Corte
4、x-M3 32位 的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K 字节的SRAM),丰富的增强型I/O端口以及包含2个12位的ADC、3个通用16 位定时器和一个PWM定时器。使得处理速度大大提高,机器功耗大大降低,整 体性能得到很大提高。32位的处理器使得控制更加稳定、迅速,窗口型看门狗, 使得程序运行更加高效。另外,比较方便的是该板支持硬件仿真,通过Ulink仿真器可以方便实现在线逐步调试,这大大方便了系统的开发与调试工作。5.1.2电源模块电源设计是一个系统设计中的关键部分, 对于整个系统,一个稳定的、具有 一定功率的电源和合理的电源管理是必不可少的
5、。 本系统有以下几种电源:CPU 的内核数字和模拟电源电压+1.8 V,CPU的1/O 口数字和模拟电源电压+3.3 V、 总线的隔离电源、LCD的驱动电源、其他外围设备电源电压 +5 V等电源。出于调试的方便和即插即用性,以及本系统的侧重点在MP3播放器上,所以我采用USB为系统供电,如此一来使系统的实现变得更加简便、迅速。5.1.3音频解码模块VS1003可以作为一个微控制器的从机,通过串行SPI接口来接收输入的比特流,输入的比特流被解码后,可以通过一个数字音量控制器到达一个18位过采样多位 DAC。通过串行总线控制解码器。这样利用一个VS1003芯片与STM32F103x处理器配合,ST
6、M32处理器读取 SD卡中的MP3文件,将其通过 SPI接口送往VS1003芯片播放,然后再利用 STM32F10X处理器的一些GPIO 口 来控制VS1003即可以实现一个 MP3 Player的原形设计。5.1.4显示模块1)常见的基于单片机设计的音乐播放器基本不能显示歌曲。该音乐播放系 统设计上增加液晶显示器,LCD显示模块主要完成数据显示、 输出数据与显示数 据的同步等功能,可为使用者提供曲目信息。由于LED数码管只能显示数字而无法显示其他中英文字符,并对成本及功能考虑,因此从设计的成本及功能的角 度考虑,采用LCD1602显示模块,它可以显示每目的英文名字。LCD1602驱动电路简单
7、,可以由CPU输出命令驱动。2)又由于STM32V100开发板中没有液晶控制器的功能模块,如果所选择 的液晶屏内部也没有液晶控制器,那么,要使 CPU可以对液晶进行控制,就必 须加设计一个液晶驱动控制电路。另外,由于液晶用来显示调节播放音量的 ADC 转换值和歌曲的顺序,所以字符型的 LCD1602基本上能够满足显示要求。又由于系统设计时间的限制,因此本系统中选择自带控制器的液晶屏LCD1602液晶显示。其连接电路图如图5.1所示。LH1工仙W Wv=,£UHT 皿 nrs* HNiii血L>B1I卜M EU* 吐 5 I L.CNLODItlUJHKLCD TS1620图5.
8、1 LCD液晶管脚连接图5.1.5总结通过上述论证,本系统采用 STM32作为微控制器,VS1003作为解码芯片, 采用SD卡存储MP3/WMA文件,LCD作为显示器件,最终完成 MP3的播放设 计。同时PC机可以通过USB接口操作开发板上SD卡中的文件,也可以通过串 口通信控制音乐播放。具体方案图如图 4.2所示图4.2总体设计方案框图2.硬件电路设计本系统在硬件上分为4个模块:微控制器STM32F103、存储模块SD卡、解 码模块VSI003、和显示屏LCD。MP3播放功能模块的工作分为两个部分:第一部分是循环播放 MP3歌曲,该功能需要首先做一些初始化工作,MP3解码器一旦开始工作,就会
9、一直向 CPU请求数据,直至歌曲结束,只有通过键 盘操作才会使该功能提前结束。因为MP3文件的数据量较大,在flash存储器内 是以页为单位进行存储的,所以 MP3的播放程序初始化就是要把该文件的首地 址和页数先读出到CPU中,然后CPU可以根据如上数据进行取数据工作。第二部分则一直在等待中断发生,该程序是与键盘结合起来的,主要用于使 用者对播放过程的控制。键盘操作对 MP3播放过程的控制还包括后退、跃进、 跳到下一首、音量控制等。因为整个播放过程的键盘控制功能比较单一,没有键 的复合操作,所以程序都很容易实现。当 MP3播放器插入到USB接口时,系统 执行USB通讯功能模块,该模块主要用于对
10、flash存储器内的文件数据进行管理。STM32F103x使用 SPI2端口与 VS1003芯片的 SI、SO、SCLK连接;VS1003 芯片的控制引脚 xCS xRESET xDCS分别与STM32F103的PA1、PA0和PA2 连接,低电平有效;VS1003的状态引脚 DREQ与STM32F103处理器的PA3连 接,低电平表示需要送数据,高电平表示正在处理数据。模块化电路设计5.2.1 SD卡模块该系统使用STM32内部接口 SPIl与SD卡进行通信,下面介绍其引脚连接情况。PE3:低电平有效,连接到 SD卡的片选引脚CD/DAT3。SPI在和SD卡进 行通信时,需要将PE3拉低才能
11、对SD卡进行操作。PA7:映射为STM32内部接口 SPIl的主输出从输入(MOSI)信号线。这里 STM32是主设备,SD卡是从设备。数据流的传输方向是从STM32传输给SD卡。该信号线用于传输一些控制命令来完成 SD卡的操作,如读、写等。PA5:已连接到STM32内部接口 SPII的时钟(SCLK信号线。可设置SPI的时 钟频率来调整读取SD卡数据的快慢。PA6:已连接到STM32内部接口 SPII的主输入从输出(MISO)信号线。数据 的传输方向是从SD卡传输给STM32,主要返回SD卡的一些状态、内部寄存器 值等。PCI2:用于检测SD卡是否完全插入。当SD卡完全插入时,PCI2为低电
12、平, 否则为高电平。由于本系统采用STM103V100-II开发板,所以就以其自带的SD卡的结构及读写 方法进行介绍,STM103V100-II评估板有SD连接器,其使用SPI总线与STM32PE3 l-VW nr 歸匚 上空VW哪二vvS3.利0卑哄匸-Wv43Q.I3 1 4 tj 6 ? 8亠二处理器连接,如图5.3所示aycATiCMCwoOKUdpQATlCDOOMMWJ*图5.3 SD连接器与STM32处理器SPI连接图5.2.2音频解码模块该系统使用STM32内部接口 SPI2与VSI003进行通信,下面具体介绍其引 脚连接以及使用情况。PA3: VSI003的中断请求引脚。当
13、VSI003内部数据已处理完毕,需要新的 数据时,将DREQ拉高。STM32根据这个信号来给VSI003发送新的数据流。PBI3:已连接到STM32内部接口 SPI2的时钟(SCLK信号线。PBI4:已连接到STM32内部接口 SPI2的主输入从输出(MISO)信号线。这里STM32是主设备,VSI003是从设备。数据流的传输方向是从VSI003传输给STM32。主要用于读取 VSI003的一些状态和内部寄存器值,比如寄存器测试返 回的内部寄存器的值。PBI5:已连接到STM32内部接口 SPI2的主输出从输入(MOSI)信号线。这里STM32是主设备,VSI003是从设备。数据流方向是从ST
14、M32传输给VSI003,主 要传输给VSI003一些控制命令、MP3/WMA数据流等。PAI:低电平有效,如果拉低该引脚,那么通过 SPI传输的是控制信号。控制信 号包括读写VSI003的内部寄存器、对VSI003进行初始化、设置左右声道音量等。PA2:低电平有效,如果拉低该引脚,那么通过SPI传输的是数据信号。比如在向VSI003传输MP3/WMA的数据流时需要拉低该引脚。PA0:低电平有效,拉低该引脚则硬件复位 VSI003。5.2.3液晶显示模块LCD液晶显示模块主要完成数据显示、输出数据与显示数据的同步等功能, 可为使用者提供曲目信息。由3.3.4显示模块方案可知,前期为了简化电路的
15、设 计,以及充分利用开发板资源,此次系统显示模块设计采用STM32V100开发板有自带的LCD液晶屏,如果时间允许,我将对支持汉字液晶屏进行研究以用于显示歌词,曰量等。LCD液晶屏硬件电路如图5.4所示图5.4 LCD硬件电路图3. 软件程序设计本系统的工作过程大致为:STM32通过SPII从SD卡中读取 MP3/WMA文件,将所读取的数据流通过 SPI2发送到VSI003解码中播放;PC机可通过USB 总线读写SD卡的内容,传送 MP3/WMA等文件;LCD显示屏用于显示 MP3 的文件名、播放状态。有硬件系统可得软件的系统流程图:裁VfL111hip珂理吟序U旳样體杆帯£n 斛
16、si n 宇制 序F ATn翌 W软件系统流程图5.3.1MP3播放流程设计通过SPI1从SD卡中读取声波文件,将所读取的部分存放在一个缓冲器中, 利用TIMER2通道1定期产生的中断,从缓冲器中读取声音数据,然后根据声音 数据通过TIMER4的通道3产生不同频率方波输出。这里使用了两个缓冲器,一 个用于存放从SD卡读到的声音数据,另一个用于将声音数据输出到PWM,两个缓冲区的功能不断交替,形成一个由2个缓冲区构成的环形缓冲。具体流程如 图所示六调试过程6.1设计调试部分6.1.1USB 转串口如果使用的电脑是笔记本电脑或者没有串口的电脑,则需要安装USB串口驱动程序和转换线。(1) 安装US
17、B驱动程序CH341SER.EXE(2) 将USB串口线连接到笔记本电脑的USB接口,右击“我的电脑”在“属 性”一一高级系统设置”一一硬件”一一设备管理器”中找到新生成的 USB-SERIAL CH340端口,端口编号为 COM3注意:要记住是COM几,每台电脑每个USB 口会有不同的值6.1.2使用Flash loader进行串口连接(1) 用串口线一头插在STM32开发板的串口座上,一头插在电脑串口上(若 使用笔记本,请自备USB转串口线)。(2) 设置 BOOT:使得 BOOTO=1,且 BOOT1=0。(3) 给目标板上电。(4) 打开ISP下载软件如下,在开始菜单 ?程序? STM
18、icroelectronics?FlashLoaderdemostrator ? FlashLoaderDemo,点击打开该软件。(5) 点击UART,然后选择串口 COM1,波特率为115200 (9600 115200 间的波特率都OK)。一定要注意,第3步,校验方式选择为None然后点击Next”。 如果连接正常,电源上电,则会进入上面这个界面,提示 Flash是512KB大小。(6) 界面提示目标板上的flash的详细信息。再点击下一步 Next。(7) 选择Downloadtodevice,然后第2步选择需要下载的HEX文件,这里 选择了 GPIO-LED-V1.0例程中的HEX文件
19、。点击下一步,即可开始下载。(8) 目标板关掉电源,重新设置 BOOT: BOOT0=0 BOOT1=0,重新上电, 则就会看到LED灯在闪烁。6.1.3 SD卡设置在SD卡根目录下创建文件夹 SYSTEM拷贝 汉字库.bin至该目录, 在SD卡根目录下创建文件夹 Music,拷贝MP3文件至该目录将SD Card插入SD卡座。(3) 请将配套LCD模块插上板子CN6。(4) HEX文件下载到板子后丄ED灯闪烁丄CD模块显示MP3播放界面。6.2问题分析6.2.1软件部分问题分析问题:白屏设计刚开始,我们小组就出现了程序烧入开发板后出现严重白屏的问题。 对于这一问题,我们小组展开多方猜测,细心
20、调试,最终得以克服。猜想一:程序没有烧入开发板烧入不带LCD显示屏的USB鼠标控制程序,发现可以通过按键控制鼠标左 右上下移动,猜想不成立。猜想二:LCD显示屏未驱动成功出厂程序自带循环播放的LCD显示画面,猜想不成立。猜想三:程序兼容性问题通过查阅资料,发现硬件设备和程序设计存在版本更新问题,下载最新的 LCD程序,依然存在白屏问题,猜想不成立。经过多次实践,最终得以克服白屏问题。原因是多次程序载入导致开发板的 Flash产生混乱,从而无法正常显示 LCD屏幕内容。解决方法:对先前载入的程 序进行彻底的擦除。6.2.2硬件部分问题分析问题:SD卡无法读取烧入MP3 Player程序之后,开发
21、板屏幕显示“No Detect HZLib Writing HZLib HZLib Error” 字样。无法检测到SD中的汉字库.bin文件,猜想SD的内存出现问题,我们对 SD 卡进行多次格式化,重复实验,依然无法检测到汉字库,MP3屏幕无法显示。由此我们小组猜想SD卡与STM32连接的端口可能出现硬件故障导致无法读 出SD卡中的内容。七心得体会本次的课程设计我们虽然没有完成 MP3成品的设计,但是在调试和测试的 过程中我们依然学习和掌握到了许多嵌入式系统的知识。 对于嵌入式开发的基本 流程也有所掌握。在硬件电路部分,通过查阅资料和自我学习,加深了解了STM32芯片的一些基本功能和外部引脚,
22、对于 VS1003解码芯片也有了一定的了解。通过文献和 原理图的介绍理解MP3的工作原理,提高了自己的自主学习能力。在软件设计过程中,我接触到了嵌入式系统的软件设计,这不同与以往在 PC机上的程序设计,其程序规模也远远大于类似科创系列课程中所设计到的软 件,同时在很多地方需要移植现成的代码,。在次过程中,我接触到了平时不大 涉及的位操作,宏定义,多进程多线程等等。大多数的知识是在课本之外,而且是比较新的技术,课程设计的目的就是要 求我们有足够的搜索资源寻找答案的能力,借助互联网的强大力量和老师的帮 助,使我们接触到了许多新新的知识,大大开拓了这方面的见识。总而言之,本次的课程设计使我受益良多。
23、八.参考文献(1) STM32F103V8e n.pdf, 2009(2) UM0306_STM32F10XXX 使用手册.pdf(3) 基于MDK的STM32处理器开发应用 北京航空航天大学出版社,李宁编著2008年(4) 嵌入式系统程序设计清华大学出版社,赖晓晨、原旭、孙宁编著2010年(5) ARM系统开发一一从实践到提高中国电力出版社,丁峰 2007年附录:程序代码* Function Name:TargetI nit* Descripti on:初始化系统和外设* In put:None* Output:No ne* Retur n:No ne* Atte ntion:Nonesta
24、tic void Targetl nit(void)uint8_t HZLib2; INT8U err;SPI_FLASH _ln it();SPI_FLASH_Test();GPIO_C on figuratio n();NVIC_Co nfigurati on ();USART_Co nfiguratio n();prin tf("- Basic MP3 Project %srn", SOFTPACK_VERSION);prin tf("-%s -rn",BOARD_NAME);prin tf("- Compiled: %s %s rn&q
25、uot;, _DATE_, _TIME_);/*检测SD卡存在*/LCD_Clear(Black);if( SD_Detect() = SD_PRESENT)Jelseprintf("- Please connect aSD card rn");GUI_Text(36,100,"Pleasein sert SD card",White,Black);while(SD_Detect()!=SD_PRESENT);prin tf("-SD cardconn ecti on detected rn");GUI_Text(44,120,&qu
26、ot;SD carddetected OK",White,Black);OSTimeDlyHMSM(0, 0, 1,0);/* 1 seco nd */SearchMusic(MUSIC_DIRECTORY);df_read_ope n( 0);df_read(HZLib,2);/*写入字库*/if( !( HZLib0 = 0xaa &&HZLib1 = 0x55 )LCD_Clear(Black);GUI_Text(60,100,"No DetectHZLib",White,Black);GUI_Text(68,120,"Writ i
27、ngHZLib",White,Black); df_write_ope n( HZLIB_ADDR );f_mount(0,&fs);/* 挂载文件系统*/res=f_ope n(&mp3FileObject,SYSTEM_FILE_HZLIB,FA_OPEN_EXISTING | FA_READ);if( res != 0 )GUI_Text(76,140,"HZLib Error",White,Black);while(1);SSTF016B_Erase( HZLIB_ADD R/SEC_SIZE,mp3FileObject.fsize/SEC
28、_SIZE + 1 );doOSTimeDlyHMSM(0, 0, 1, 0);res=f_read(&mp3FileObject,readBuf,READ BUF_SIZE,&n_Read);df_write(readBuf, n_Read);while(n _Read=READBUF_SIZE && res = 0 );if( mp3FileObject.fptr != mp3FileObject.fsize )GUI_Text(76,140,"HZLibError",White,Black);while(1);GUI_Text(88,1
29、40,"HZLib OK",White,Black);/*字库存在标志*/HZLib0 = 0xaa; HZLib1=0x55;df_write_ope n( 0);df_write(HZLib,2);/* 1 seco nd */OSFIagPost(Sem_F,2,OS_FLAG_SET, & err); /* Target Ini初始化完成*/*Fun ction Name : GetMP3Time* Description:计算MP3播放时间* In put:-path: MP3存放路径* Output:None* Retur n:None* Atte nt
30、ion:None*/int GetMP3Time(char* path)int TotalTime=0; /* 音乐播放的总时间*/uin t16_t mp3recordstart=0;res=f_ope n(&mp3FileObject,path,FA_OPEN_EXISTING | FA_READ);/*获取MP3文件的播放时间*/if(mp3FileObject.fsize !=0)/*歌曲长度不为零*/*计算歌曲播放总时间*/while(mp3recordstart < mp3FileObject.fsize)/*调整读取位置*/mp3recordstart=mp3rec
31、ordstart - reco unt + jump;/*从SD卡中读取数据 到缓存*/res=f_read(&mp3FileObject,readBuf,READBUF_SIZE, & n_Read);if(TotalTime = 0)/*对MP3文件头分析 得到播放时间*/TotalTime=GetMP3MaxTime(readBuf,READBUF_SIZE, mp3FileObject.fsize);else if(TotalTime = 1)break;elsebreak;/*调整读取位置*/mp3recordstart +=READBUF_SIZE;return T
32、otalTime;* Function Name:SearchMusic* Description:在指定目录搜索MP3文件并存入链表* In put:-path: 目录* Output:None* Retur nNone* Atte ntion:No ne*/void SearchMusic(char* path)IDIR dirs;dli nkbefore_ nodeNULL, new_node = NULL;FILINFO MusicFi nfo;TIME destime;char *ShortFileName;char CurFileType; /* 当 前所读 取的文件类型*/cha
33、r Filepath30;/* 记录完整的文件信息*/f_mount(O, &fs);/* 挂 载文件系统*/res = f_ope ndir( &dirs, path);if(res = FR_OK)while (f_readdir( &dirs,&M usicFi nfo)= FR_OK )&&MusicFi nfo.fname0)ShortFileName=MusicF in fo.fname;/*获取文件类型 */if(strstr(ShortFileName,"MP3")!=NULL)|(strstr(ShortFi
34、leName,"mp3") !=NULL) )CurFileType=mp3File;elseif( (strstr(ShortFileName,"WAV") !=NULL) | (strstr(ShortFileName,"wav") !=NULL)CurFileType=wavFile;elseCurFileType=unknownF ile;if( CurFileType =mp3File )MusicFileCou nt+;if( MusicFileCount =1 )PlayFile =(dli nk)malloc(size
35、of( struct PlayFileList );if( PlayFile = NULL) return ;memset(PlayFile->file name,' ',sizeof(PlayFile->file name) );/* 空格*/strcpy(PlayFile->file name,ShortFileName);printf("-search %s”,ShortFileName);PlayFile-> nextPlayFile->file name sizeof(PlayFile->filNULL;PlayFile-
36、>back=NULL;before_ node=PlayFile;strcpy(Filepath,path); strcat(Filepath,"/");strcat(Filepath,ShortFileName);prin tf("-filepath %s ",Filepath);TimeFormat(GetMP3Time(Filepath), &destime);/*保存播放时间*/prin tf("-playtime %d:%d rn", destime.mi nute destime.sec ond );Play
37、File->file namestrle n(PlayFile->file name) = ' '/*寻找字符串结束符 */PlayFile->file name sizeof(PlayFile->fil en ame) -6 = destime. minu te/10 + 'O'/*分钟*/PlayFile->file name sizeof(PlayFile->fil en ame) -5 = destime. minu te%10 + '0'/*分钟*/PlayFile->file name siz
38、eof(PlayFile->fil en ame) -4 =':'PlayFile->file name sizeof(PlayFile->fil en ame) -3 = destime.sec on d/10 + '0'/* 秒 */PlayFile->file name sizeof(PlayFile->fil en ame) -2 = destime.seco nd%10 + '0'/* 秒 */ename) -1 = 0;/*字符串结束符 */prin tf("-listboxdisplay %s rn", PlayFile->file name );elsenew_node = (dli nk) malloc(sizeof( struct PlayF
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课题申报书:高校生涯课程体系对人才培养质量提升效果评价
- 地毯购销合同范本
- 网站动态广告投放合同书
- 离婚案婚内财产协议
- 高校讲师科研能力提升计划
- 三年级语文教学方法改革计划
- 骨科数据统计与分析工作计划
- 春节期间生产线停工及复工流程计划
- 纺织行业车间管理年度总结及未来计划
- 二年级数学实践课程开发计划
- KA的铝电解槽的设计
- 2022年北京事业单位招聘考试真题及答案解析
- 高中英语 选必二 Unit3 Times change 第4课时-developing ideas- Emojis a new language 课件
- 机动车检测站突发环境污染事件应急预案
- 关于赴XXX医院参观学习联系函
- 【汇总】高二政治选择性必修三(统编版) 重点知识点汇总
- T∕CIS 71001-2021 化工安全仪表系统安全要求规格书编制导则
- 体医融合与健康中国课件
- 福利院装修改造工程施工组织设计(225页)
- 基因表达的调控
- 华师大版九年级下册数学全册教案
评论
0/150
提交评论