基于STM32音乐MP3闹钟的设计与实现_第1页
基于STM32音乐MP3闹钟的设计与实现_第2页
基于STM32音乐MP3闹钟的设计与实现_第3页
基于STM32音乐MP3闹钟的设计与实现_第4页
基于STM32音乐MP3闹钟的设计与实现_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本科毕业论文〔设计、创作〕题目:基于STM32音乐MP3闹钟的设计与实现学生姓名:学号:所在系院:专业:入学时间:年月导师姓名:职称/学位:导师所在单位:完成时间:年月基于STM32音乐MP3闹钟的设计与实现摘要:改革开放以来,中国迅速崛起,各种电子产品层出不穷,人们对电子产品的要求也越来越高。本设计采用ARMCortex-M3内核的STM32F103ZE作为微控器,选用开发板的SRAM&Flash模块,SD卡,LCD液晶显示屏模块,Codec音频模块等,以及移植FATFS文件系统,目的是存储SD卡中的大数据文件和管理SD卡中的文件。本设计还移植了UCOSII操作系统,任务的实时调度使得程序变得更加简单,运行环境也更加的稳定。另外,参加MP3软解码,使得系统能够识别MP3格式,正确播放出音乐。本系统设计并实现了集音乐播放,时间显示,时间设置为一体的音乐闹钟,解决了闹钟铃声单调,重复的苦恼。关键词:STM32;MP3;闹钟,UCOSII;FATFS;SD卡DesignandimplementationofSTM32MP3basedonthealarmclockmusicAbstract:Sincethereformandopeningup,China'srapidrise,allkindsofelectronicproductsemergeinendlessly,peoplealsomoreandmorehightotherequirementofelectronicproducts.ThisdesignUSEStheARMarchitecture(M3kernelSTM32F103ZEasamicrocontrolunit,choosedevelopmentboardSRAM&Flashmodule,SDcard,LCDliquidcrystaldisplaymodule,audioCodecmodule,etc,andtransplantedFATFSfilesystem,thepurposeistostorelargedatafilesinSDcard,andmanagethefilesofSDcard.ThisdesignalsotransplantUCOSIIoperatingsystem,thetaskofreal-timeschedulingmakestheprogrammoresimpleandrunningenvironmentisalsomorestable.Inaddition,addsoftdecodeMP3,enablesthesystemtoidentifyMP3format,rightplaysmusic.Thissystemwasdesignedandimplementedthecollectionofmusicplayback,timedisplay,timesettingfortheintegrationofmusicalarmclock,solvedthealarmsoundmonotonous,repetitive.Keywords:STM32,MP3,UCOSII,FATFS,SDcard目录TOC\o"1-3"\h\u第一章绪论11.1设计背景1第二章硬件介绍22.1STM32F103ZE22.2按键模块32.3I/O模块32.4存储模块设计42.5LCD液晶屏模块52.6Codec音频模块72.7USART串口模块8第三章系统软件设计93.1文件系统FAT93.2SPI驱动103.2SD卡的软件设计113.2MP3软解码123.2.1方案选择123.2.2HelixMP3解码器123.3时钟123.3.1实现的根本功能123.4固件库的使用133.5嵌入式操作系统UCOSII14第四章系统测试与开发154.1搭建开发环境154.1.1安装JLINK驱动154.1.2安装MDK154.2硬件测试154.2.1按键中断测试154.2.3LCD测试174.3软件测试174.3.1FATFS文件系统移植测试174.3.2.UCOSII操作系统移植194.4系统总体测试与调试21致谢22参考文献23第一章绪论1.1设计背景自单片机出现至今,电子技术和计算机技术迅猛开展,其应用领域随着人们的需求越来越大。现今,单片机技术已经遍满人类生活的各个领域,定时控制是不可缺少的条件,未来的物联网等对单片机的要求越来越高,智能化的道路定时必不可少。工业自动化中的数据处理以及实时控制,电子玩具,智能,游戏等等,定时的应用领域非常广泛。在以后物联网的开展中定时也是发挥着很大的作用,智能家居,智能交通系统,智能仪表等领域,或许这一刻的研究正是下一个难题的突破。因此对于定时器的学习是非常重要的。但仅仅只有单片机的只是远远不够,针对实际生活,软硬件结合。1964年,我们的前辈承当着东京奥运会的计时工作,此后,电子闹钟给我们的生活带来了意外的结果。随着需求的增加,51单片机已经不能满足社会的开展,STM32系列专为低功耗、高性能、低本钱的嵌入式设计的ARMCortex-M内核。本设计用的是STM32F103ZE是一款时钟频率能到达72MHz的增强型内核。MP3是作为一种音乐文件的播放器。第一台MP3播放器MPManF10是由Saehan公司于1998年推出的,轰动一时。MP3全称叫MPEGAudioLayer3,是一种音频压缩技术。MP3是利用MPEGAudioLayer3的技术,将音乐以1:10甚至1:12的压缩率,压缩成容量较小的file,也就是说,在非常好的保持了原来的音质的同时,把文件压缩到非常小的程度在音质丧失很小的情况下。由于MP3具有音质高,体积小等优点,使得其格式在网上非常流行,每首歌大概3,4M字节。使用MP3播放器对MP3文件进行实时的解压缩(解码),这样,高品质的MP3音乐就播放出来了。当前,MP3播放器不计其数,在各种,电脑等各种电子产品中随处可见,不少电子产品的MP3播放器音质非常好,,电脑上都可以免费下载播放器。本次的设计音乐MP3闹钟,主要研究MP3播放和闹钟的实现,MP3播放就是一个难点,但这次毕业论文的设计,不仅稳固所学知识,还锻炼了自我学习的能力。第二章硬件介绍本设计所用硬件为STM32F103ZE开发板,自带SRAM&Flash模块,SD卡模块,LCD液晶屏模块,Codec音频模块,USART串口模块等。图2-1STM32F103ZE开发板2.1STM32F103ZESTM32STM32代表ARMCortex-M内核的32位微控制器FF代表芯片子系列。103103代表增强型系列。RR这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚,I代表176脚。BB这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,G代表1M字节Flash。TT这一项代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。66这一项代表工作温度范围,其中6代表-40——85℃,7代表-40——105℃。图2-2STM32F103ZE字母表STM32F103ZE增强型系列使用ARM公司的Cortex-M332位的RISC内核,工作频率为72MHz。其功能非常强大。选择STM32F103ZE作为此次设计的微处理器,主要因为其外围接口多种多样,在实现其他功能的时候更加方便,还有一点就是其足够大的闪存和内存。Cortex-M3是一个32位处理器内核。内部的存放器、数据路径、存储器接口都是32位的。CM3采用了哈佛结构,拥有独立的数据总线和指令总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共享同一个存储器空间〔一个统一的存储器系统〕。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。2.2按键模块本次设计需要用按键对闹钟进行时间设置,共分为五个按键,上下左右中间,分别与STMF103ZE的PG15,PD3,PG14,PG13,PG7相连。在开始之前需要对按键,GPIO进行配置,直接调用库函数。2.3I/O模块I/O具有通用和复用功能〔GPIO和AFIO〕。GPIO的每个位可以由软件分别配置成8种模式:输入上拉,输入下拉,输入浮空,模拟输入,开漏输出,推挽式输出,推挽式复用功能,开漏复用功能。下列图是端口位配置表和输出模式位表。端口位配置表:图2-3STM32端口位配置表输出模式位表:图2-4STM32端口位配置表2.4存储模块设计SD卡〔SecureDigitalMemoryCard〕,译为平安数码卡,是一张只有2克,看起来像一张邮票的SD记忆卡。SD卡是这个信息化社会最为通用的数据存储卡,在我们的生活中起着重要作用。SD卡优点:存储量大、价格低、平安性强、使用方便、平安性好。SD卡有6线制的SD方式和4线制的SPI方式,本设计采用SPI方式。在此过程中,以SD卡为存储设备,必须对其内容进行读取。该系统使用STM32内部接口SPI1与SD卡进行通信。在SPI模式下其命令由6个字节构成。SD卡以命令形式来控制SD卡的读写操作,可根据命令对多块或单块进行读写操作。下列图是电路原理图,SD卡有九个引脚,最特殊的就是9号引脚。SD卡有两种方式,如何进入两种不同的模式呢?SD卡模式:SD卡从中唤醒的时候默认情况下是SD卡模式。当CS(1号引脚)保持高电平那么依然是SD卡模式,当CS信号在复位命令被接收期间被拉低进入SPI模式。图2-5SD卡电路原理图2.5LCD液晶屏模块液体:分子的方向不能找到规律的液体。“液态晶体〞简称“液晶〞是指分子的方向能找到规律的液体。液晶产品在我们的生活中随处可见,家里常看的电视,现在几乎人手一步的等等。LCD:LiquidCrystalDisplay翻译为液晶显示器,它一种是采用了液晶控制透光度技术来实现色彩的显示器,俩片玻璃中有许多的细小的电线,有的垂直有的水平,透过通电来控制水晶分子,从而到达改变分子方向的目的,并将光线折射出来产生画面。在众多LCD类型当中,STN、TFT最为常见。STN的英文为SuperTwistedNematic,是我们在平常生活中接触最多的LCD了,还记得以前的老式吗?它的屏幕就是STN的。相比于TFT,STN属于被动矩阵式LCD器件,它的优点是功耗小,因此特别省电。STN有传统单色和彩色,彩色是在单色的根底上加了一彩色滤光片,同时把单色显示矩阵中每一个像素分成三个子像素,通过彩色滤光片显示出三原色红绿蓝,因此显示出彩色画面。STN最多能显示出65536中色彩,也因此亮度不高,色泽也不是特别好,因此在强光下,图像看起来有点吃力。TFT:ThinFilmTransistor薄膜晶体管。也称为主动矩阵,因其背部设置特殊光管,能够“主动〞对各个独立像素进行控制,故得到此名。一般TFT的反响时间比拟快,约为80ms,而STN为200ms,STN假设要提高就会有闪烁现象发生。TFT那么改善了STN闪烁现象,并且提高了播放播放动态画面的能力。两者相比,TFT具有更好的复原能力、更高的比照度,以及更好的色彩饱和度,它的色彩更加的细腻,层次感也更强,色彩也更加的逼真。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都有设置一个薄膜晶体管TFT,可以有效的克服非选通时的串扰,使显示液晶屏的静态属性与扫描线数无关,大大提高了图像质量。TFT-LCD即薄膜晶体管液晶显示器。电路原理图如下:图2-6LCD电路原理图2.6Codec音频模块Codec是指在数字通信中具有编码、译码功能的编译码器。支持视频和音频压缩〔CO〕与解压缩的编解码器或软件。Codec技术能有效减少数字存储占用的空间,在计算机系统中,使用硬件完成CODEC可以节省CPU资源,提高系统的运行效率。在声卡上往往可以找到一颗或者2颗甚至3颗4面有引脚的正方形芯片,面积一般为0.5-1.0平方厘米。这就是CODEC。CODEC就是多媒体数字信号编解码器,主要负责数字->模拟信号转换〔DAC〕和模拟->数字信号的转换〔ADC〕。不管是音频加速器好,还是I/O控制器好,他们输入输出的都是纯数字信号,我们要使用声卡上的LineOut插孔输出信号的话,信号就必须经过声卡上的CODEC的转换处理。可以说,声卡模拟输入输出的品质和CODEC的转换品质有着重大的关系,音频加速器或I/O控制器决定了声卡内部数字信号的质量,而CODEC那么决定了模拟输入输出的好坏。STM32F103VET微控制器内置2个标准的I2S(IC-to-ICsound)接口(与SPI2和SPI3复用),可以工作于主或从模式,这2个接口可以配置为16位或32位传输,亦可配置为输入或输出支持音频采样频率从8kHz到48kHz。当任一个或两个I2S接口配置为主模式,它的主时钟可以以256倍采样频率输出给外部的DAC(解码器)或CODEC(编解码器)。I2S是一种数字音频设备之间的音频数据传输总线标准,STM32芯片提供I2S这样的接口,我们可以利用这个接口直接去接数模转换的DAC芯片,这样可以将数字音频转换成模拟音频,最终将美丽的音乐传入我们的耳朵。I2S有多种数据模式,右对齐音频数据格式输入〔I2SDataFormat〕,左对齐音频数据格式输入〔left-justfiedDataFormat〕,I2S音频数据格式输入〔I2SDataFormat〕,还有就是标准数据格式输入〔StandardDataFormat〕。下面是I2SDataFormat的接口时序图:图2-7I2S模式下PCM1770数字音频接口时序2.7USART串口模块串口最根本的就是波特率的设置。在调用前要进行相应的设置:第一步:翻开串口时钟;第二步:设置相应的IO口模式;第三步:配置波特率、数据位长度、就校验位每个串口都有一个自己独立的波特率存放器USART_BRR。Tx/Rx波特率=fPCLKx/(16*USARTDIV)在这里需要注意的是:USART、GPIO是两个不同的模块,USART是临时“借用〞了GPIO设备作为自己的输出通道,因此在进行配置时,USART时钟,GPIO的时钟都要翻开,还要将对应GPIO引脚设置为第二功能模式。在嵌入式中串口一般都是用于调试,因为其传送数据相对来说很慢,也不能进行大量数据传输。一般用DMA。图2-8串口调试电路图第三章系统软件设计本设计所用软件为KeiluVsion4,SourceInsight3.5,串口调试助手。KeiluVsion4是美国KeilSoftware公司推出的兼容C语言软件开发系统,比照于传统的汇编,C语言在结构上,可维护性上,结构和功能上都具有明显的优势。Keil主要包含实时操作系统的核心〔这也是嵌入式开发工程师选择此软件的重要原因〕、C编译器、库管理器、宏汇编程序、连接器和调试器、固件。KeiluVsion4相对于前面几个版本,提供一个高效,整洁的环境来开发应用程序。同时能够支持更多的ARM芯片。SourceInsight3.5实质上是一个支持多种开发语言〔java,c,c++等等〕的编辑器。具有强大的查找、定位、彩色显示等功能。是一个面向工程的源码查看器,和编辑器。它能动态的分析你的代码并自动维护它的符号信息数据库,然后把有用的上下文相关的信息提示给你。串口调试助手是串口调试的相关工具,支持几种常用波特率,如4800,9600,19200等,能设置数据位和停止位,校验,还能自动识别串口,能以十六进制或ASCII发送或接收任何数据或字符,发送的文件大小不限制,发送周期也可以自己设置。3.1文件系统FAT所谓文件系统就是负责管理和存储文件信息的软件机构称为文件管理系统。FAT文件系统〔文件配置表FileAllocationTable〕是由微软开发的。目前有三种文件系统:FAT121、FAT16、FAT32。在实际磁盘上FAT结构每一表项的大小,也就是所占的位数。FAT文件分配表每一项为12位,FAT16为16位,FAT32为32位。FatFs介绍:当今社会大点信息量越来越大,文件系统成为今后单片机的一个方展方向。由于微软Windows的广泛应用,FAT文件系统最为常用。FatFs是小型嵌入式系统中,实现FAT文件系统的一个通用的文件系统模块。且完全独立与I/O层。FatFs为单片机的使用而设计,具有很好的层次结果。从上到下依次为应用层,我们不需要了解其协议和内部结构,调用根本点接口函数就行,非常简单。中间层FatFs,实现FAT文件读写协议,一般不用修改,包含头文件就行。需要编写移植代码的是FatFs提供的底层接口。图3-1FATFS文件系统图3.2SPI驱动时钟信号的相位和极性SPI_CR存放器的时钟极性〔CPOL〕和时钟相位〔CPHA〕,可以组合成四种可能的时序关系。CPOL位对主模式和从模式下的设备都有用,没有数据传输时时钟的空闲状态电平由CPOL位控制。当CPOL位置一,SCK引脚保持高电平在空闲状态下,当CPOL位清零,那么SCK引脚那么保持低电平。数据在第一个时钟边沿被锁存。假设CPHA位为零,SCK时钟的第一边沿〔CPOL位为一就是上升沿,为零时就是下降沿〕进行数据位采样。假设CPHA位为一,SCK时钟的第二边沿〔CPOL位为一就是上升沿,为零时就是下降沿〕。CPOL和CPHA的组合选择数据捕捉的时钟边沿。注意:1、主模式和从模式必须配置成相同的时序模式。2、在必须将SPI禁止,必须去除SPE位,在改变CPOL/CPHA位之前。3、数据帧格式决定发送或接受的数据长度,由SPI_CR1存放器的DFF位选择。4、SCK的空闲状态必须和SPI_CR1存放器指定的极性一致〔CPOL为零时,空闲时应下拉SCK为低电平,为一时,SCK为高电平〕。3.2SD卡的软件设计SD卡的存放器,主要用于存储SD卡自身的一些信息。向SD卡发送相应的命令就可以读取SD卡的存放器。SD卡指令,具有一定的格式在其发送的时候。有6字节组成。驱动设计:因为此设计中采用的是SD卡的SPI总线,所以SD卡的驱动是基于SPI的驱动是根底上的。SPI最重要的函数:写函数voidSpi_Write(uint8chr)和读函数charSpi_Read()。下面是SD卡驱动最重要的几个函数的实现:复位函数:功能描述:复位SD卡,用到SD卡,用到CMD0,使用SD卡切到SPI模式。成功那么返回0x00,失败那么返回INIT_CMD0_ERRORuint8SD_Reset(),此函数是SD卡最开始调用的函数,通过发送CMD0将SD卡转到正确的工作模式下。初始化函数:功能描述:初始化SD卡,使用CMD1,成功那么返回0x00,失败那么返回0x01CharSD_Init(),此函数在SD卡执行完复位函数后开始执行。目的就是向SD卡发送CMD1,然后检测SD卡是否进入工作状态。写扇区函数:功能描述:将buffer指向的512个字节的数据写入到SD卡的addr扇区中,addr参数指扇区地址,buffer指向数据缓冲区的指针,成功那么返回0x00,失败返回0x01.读扇区函数:功能描述:读取addr扇区的512个字节到buffer指向数据缓冲区。addr参数指扇区地址,buffer指向数据缓冲区的指针,成功那么返回0x00,失败返回0x01.3.2MP3软解码3.2.1方案选择方案一:此方案采用软解MP3,直接用软件解码。节约了硬件本钱,但代码复杂,编程难度较高,工作量极大,而且对控制器的处理速度和资源要求都比拟高。方案二:此方案采用硬解MP3,直接用音频解码芯片解码。它使用高性能的VS1003MP3解码芯片,功能强大而且价格廉价,VS1003支持MP3、WAV、WMA、MIDI等诸多音频格式,音质可与市场上中档MP3播放器相媲美。由于PCM1770芯片仅仅只是进行D/A转换,并不支持硬件解码,且为了挑战自己加强对MP3文件格式的理解,所以选择了方案一作为本次设计的MP3解码方案。3.2.2HelixMP3解码器HelixMP3解码器可浮点和定点实现。将该算法移植到PIC32MX单片机时可考虑定点实现。该算法可运行在任意32位定点处理器上,并完全使用C语言编码,可选择用优化的汇编指令替换某些代码段。HelixMP3解码器提供对MPEG-1、MPEG-2和MPEG-2.5的第3层〔Layer3〕支持。它支持可变位速率、恒定位速率,以及立体声和单声道音频格式。有关实现和特性的详细信息,访问HelixMP3解码器网站:s:///Mp3dec。3.3时钟3.3.1实现的根本功能闰年的判断。如果年份不能被四整除就是平年。不能同时被四和一百整除,那么是闰年。既能被四整除,也能被一百整除,还能被四百整除的也是闰年,否那么是平年。判断日期是否合法,年月日时分秒小于零不合法,月日时分秒都不能超过最大值,合法之后在判断是否是闰年,假设为闰年,那么判断二月是否满足要求。对时间进行设置,可以很据自己的需求调节时间,闹钟的话就需要设置不同的时间,时间到了,就播放处一段音乐。下面是闰年算法的局部代码:/*闰年算法*/if((year_number%4==0)&&(year_number%100!=0)||(year_number%400==0)) { if((month_number==1)||(month_number==3)||(month_number==5)||(month_number==7)||(month_number==8) ||(month_number==10)||(month_number==12)) { if(month_number==12) { if(day_number>31) { month_number=1; //月份加一 day_number=1; //天数为一 year_number++; } }3.4固件库的使用固件库的使用很简单,先初步熟悉一下固件,通过里面提供的函数来配置微控制器并实现一些简单的分立功能。此函数库包括了微控制器所有外设的性能特征,以及每个外设的应用实例和驱动描述,同时此函数库是由程序、数据结构和宏组成的固件函数包。有了此固件库后,用户可以轻松应用每一个外设还不需要深入掌握许多细节,在一定程度上给用户带来了很大的方便,节省了大量的程序编写时间,也因此大大降低了开发本钱。3.5嵌入式操作系统UCOSIIUcosii是Micrium公司提供的,不是一个完整的实时操作系统,只是一个具有可移植、可裁剪、可固化、抢占式多任务的实时内核。其源码开放,非常适合于系统开发,从而适合于多种微处理器、数字处理芯片及微控制器。它的绝大局部源码都是ANSI_C编写的,CPU硬件相关的局部都是用汇编编写,并压缩到最低限度以便于移植到其他的CPU上。Ucosii由核心、CPU的移植、任务处理、任务同步与通信、时间处理五局部组成。核心局部〔OSCore.c〕:这局部是操作系统的核心,包括系统初始化,如voidOSInit(void);系统的运行、中断进出的前导、任务调度、事件处理、时钟节拍等。CPU的移植:因为它被广泛使用,在一些问题上还得根据cpu的具体情况作相应的移植。这局部通常用汇编写涉及SP等系统指针,难度比拟大。任务处理:主要在OSTask.c中。主要包括任务的建立INT8UOSTaskCreate(void(*task)(void*p_arg),void*p_arg,OS_STK*ptos,INT8Uprio);任务的删除:INT8UOSTaskDel(INT8Uprio);任务的挂起以及任务的恢复。任务同步与通信:此局部主要包括信号量、邮箱、邮箱队列,事件标志等局部。时钟局部:在OSTime.c中,该系统中最小时钟单位是时钟节拍,也即timetick,任务延时等都在这里完成。第四章系统测试与开发4.1搭建开发环境4.1.1安装JLINK驱动JLINK是SEGGER公司推出的,为了支持仿真ARM内核芯片的JTAG仿真器。是学习开发RAM最好的开发工具,同时与IAR,Keil等编译环境完美连接,操作起来更加方便易学。本设计就需要用到JLINK下载和调试程序,在此之前应该先安好JLINK的驱动。下载JLINK驱动后,直接双击驱动文件Setup_JLINKRAM_V486B.exe,然后根据提示进行安装即可。安好后,需要检查是否安装成功。把JLINK(如下列图)图4-1JLINK实物图插到电脑上USB接口,然后在我的电脑\管理\设备管理器\通用串行总线控制器中看到一个J-Linkdriver,说明驱动安装成功。4.1.2安装MDKMDK指的是KeilMDK,也称MDK-ARM、uVision4等。KeilMDK软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。KeilMDK简单易学而且功能非常强大,是学习嵌入式非常好的开发工具。前面有过介绍。4.2硬件测试4.2.1按键中断测试此局部测试是通过四个按键分别控制四个LED灯,假设每个按键对应的每个灯都能亮那么按键局部测试成功。//外部中断设置void

EXTI_Configuration(void)

{

EXTI_InitTypeDef

EXTI_InitStruct;

GPIO_EXTILineConfig(GPIO_PortSourceGPIOD,

GPIO_PinSource3);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,

GPIO_PinSource7);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,

GPIO_PinSource13);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,

GPIO_PinSource14);

GPIO_EXTILineConfig(GPIO_PortSourceGPIOG,

GPIO_PinSource15);

EXTI_InitStruct.EXTI_Mode

=

EXTI_Mode_Interrupt;

EXTI_InitStruct.EXTI_Trigger

=

EXTI_Trigger_Falling;

EXTI_InitStruct.EXTI_Line

=

EXTI_Line3

|

EXTI_Line7

|

EXTI_Line13

|

EXTI_Line14

|

EXTI_Line15;

EXTI_InitStruct.EXTI_LineCmd

=

ENABLE;

EXTI_Init(&EXTI_InitStruct);

}

//中断优先级设置

void

NVIC_Configuration(void)

{

NVIC_InitTypeDef

NVIC_InitStruct;

//三个通道三次配置,否那么会被覆盖NVIC_InitStruct.NVIC_IRQChannelCmd

=

ENABLE;/*指定中断源*/NVIC_InitStruct.NVIC_IRQChannel

=

EXTI3_IRQn;/*抢占优先级设定*/NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority

=

1;/*副优先级设定*/NVIC_InitStruct.NVIC_IRQChannelSubPriority

=

1;

NVIC_Init(

&NVIC_InitStruct

);

//下面还有EXTI15_10_IRQn及EXTI9_5_IRQn的配置,为了简便此处就省略。}在stm32f10x_it.c中参加按键触发后LED灯的状态。如:/*中断效劳程序*/VoidEXTI9_5_IRQHandle(void){EXTI_ClearITPendingBit(EXTI_Line5);GPIO_SetBits(GPIOD,GPIO_Pin_3);}4.2.3LCD测试LCD的测试,就是简单的在LCD上画一个圆,假设能显示出来那么测试通过。下面就是局部代码:void

LCD_configuration(void)

{

LCD_BL_Pin_Config();

Delay(20);

LCD_BL_Cmd(ENABLE);

STM3210E_LCD_Init();

LCD_SetTextColor(Red);

}

void

LCD_BL_Pin_Config(void)

{

GPIO_InitTypeDef

GPIO_InitStruct;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,

ENABLE);

GPIO_InitStruct.GPIO_Pin

=

GPIO_Pin_8;

GPIO_InitStruct.GPIO_Mode

=

GPIO_Mode_Out_PP;

GPIO_InitStruct.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_Init(GPIOA,

&GPIO_InitStruct);

}

void

LCD_BL_Cmd(FunctionalState

NewState)

{

if(NewState

!=

DISABLE)

{

GPIO_SetBits(GPIOA,

GPIO_Pin_8);

}

else

{

GPIO_ResetBits(GPIOA,

GPIO_Pin_8);

}

}4.3软件测试4.3.1FATFS文件系统移植测试FATFS源代码的获取,可以到官网下载。1、解压文件会得到两个文件夹,一个是doc文件夹,这里是FATFS的一些使用文档和说明,以后在文件编程的时候可以查看该文档。另一个是src文件夹,里面就是我们所要的源文件。2、建立一个STM32的工程,为方便调试,我们应重载printf()底层函数实现串口打印输出。可以参考已经建立好的printf()打印输出工程:3、在已经建立好的工程目录User文件夹下新建两个文件夹,FATFS和SPI_SD_Card,FATFS用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驱动文件。4、将ff.c添加到工程文件夹中,并新建diskio.c文件,在diskio.c文件中实现五个函数:DSTATUSdisk_initialize(BYTE);//SD卡的初始化DSTATUSdisk_status(BYTE);//获取SD卡的状态,这里可以不用管DRESULTdisk_read(BYTE,BYTE*,DWORD,BYTE);//从SD卡读取数据DRESULTdisk_write(BYTE,constBYTE*,DWORD,BYTE);//将数据写入SD 卡,假设该文件系统为只读文件系统那么不用实现该函数DRESULTdisk_ioctl(BYTE,BYTE,void*);//获取SD卡文件系统相关信息diskio.c函数都实现后接着实现SPI_MSDO_Driver.c文件中的相关函数,此文件可上网下载。测试//写文件测试

printf("write

file

test\n\r");

res

=

f_open(&fdst,

"0:/test.txt",

FA_CREATE_ALWAYS

|

FA_WRITE);

if(res

!=

FR_OK){

printf("open

file

error

:

%d\n\r",res);

}else{

res

=

f_write(&fdst,

textFileBuffer,

sizeof(textFileBuffer),&bw);

if(res

==

FR_OK){

printf("write

data

ok!

%d\n\r",bw);

}else{

printf("write

data

error

:

%d\n\r",res);

}f_close(&fdst);/*关闭文件,必须执行,否那么数据无法写入SD卡中*/

}还有读文件测试,这里就不一一写出来啦。4.3.2.UCOSII操作系统移植1、从micrium官方下载移植版本:下载地址:://micrium/page/downloads/ports/st/stm32

解压缩后得到如下:图4-2UCOSII操作系统移植文件夹UC/OS-II是操作系统源码,移植时根本不需要改动。Arch:与体系架构相关的,不能用C代码实现,必须用汇编实现的代码,比方:任务切换时的存放器切换。

BSP:与单板配置相关的代码,主要是单板工作频率的配置和获取。

App:应用程序代码例如。2、文件目录:Libraries、MDK-Proj不变;

uCOS新增加uCOS源码;App改为uCOS的App源码。Micrium\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\IAR图4-3工程文件展示图3、工程目录结构:StartUp、Core、StdPheriph不变;

Bsp、Source、Arch新增加uCOS源码;

App改为uCOS的App文件。mC/OS-Ⅱ异常效劳例程uC/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论