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

下载本文档

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

文档简介

1、 本科毕业论文(设计、创作) 题 目:基于STM32音乐MP3闹钟的设计与实现 学生姓名: 学号: 所在系院: 专业: 入学时间: 年 月导师姓名: 职称/学位 : 导师所在单位: 完成时间: 年 月基于STM32音乐MP3闹钟的设计与实现摘要 :改革开放以来,中国迅速崛起,各种电子产品层出不穷,人们对电子产品的要求也越来越高。本设计采用ARM Cortex-M3内核的STM32F103ZE作为微控器,选用开发板的SRAM&Flash模块,SD卡,LCD液晶显示屏模块,Codec音频模块等,以及移植FATFS文件系统,目的是存储SD卡中的大数据文件和管理SD卡中的文件。本设计还移植了UCOSI

2、I操作系统,任务的实时调度使得程序变得更加简单,运行环境也更加的稳定。另外,加入MP3软解码,使得系统能够识别MP3格式,正确播放出音乐。本系统设计并实现了集音乐播放,时间显示,时间设置为一体的音乐闹钟,解决了闹钟铃声单调,重复的苦恼。关键词:STM32;MP3;闹钟,UCOSII;FATFS;SD卡Design and implementation of STM32 MP3 based on the alarm clock musicAbstract: Since the reform and opening up, Chinas rapid rise, all kinds of elect

3、ronic products emerge in endlessly, people also more and more high to the requirement of electronic products.This design USES the ARM architecture (M3 kernel STM32F103ZE as a micro control unit, choose development board SRAM&Flash module, SD card, LCD liquid crystal display module, audio Codec modul

4、e, etc, and transplanted FATFS file system, the purpose is to store large data files in SD card, and manage the files of SD card.This design also transplant UCOSII operating system, the task of real-time scheduling makes the program more simple and running environment is also more stable.In addition

5、, add soft decode MP3, enables the system to identify MP3 format, right plays music.This system was designed and implemented the collection of music playback, time display, time setting for the integration of music alarm clock, solved the alarm sound monotonous, repetitive.Keywords :STM32,MP3,UCOSII

6、,FATFS ,SD card 目录第一章 绪论11.1 设计背景1第二章 硬件介绍22.1 STM32F103ZE22.2 按键模块32.3 I/O 模块32.4 存储模块设计42.5 LCD液晶屏模块52.6 Codec音频模块72.7 USART串口模块8第三章 系统软件设计93.1 文件系统FAT93.2 SPI驱动103.2 SD卡的软件设计113.2 MP3软解码123.2.1 方案选择123.2.2 Helix MP3 解码器123.3 时 钟123.3.1 实现的基本功能123.4 固件库的使用133.5 嵌入式操作系统UCOSII14第四章 系统测试与开发154.1 搭建开发

7、环境154.1.1 安装 JLINK 驱动154.1.2 安装 MDK154.2 硬件测试154.2.1 按键中断测试154.2.3 LCD测试174.3 软件测试174.3.1 FATFS文件系统移植测试174.3.2. UCOSII 操作系统移植194.4 系统总体测试与调试21致谢22参考文献23第一章 绪论1.1 设计背景自单片机出现至今,电子技术和计算机技术迅猛发展,其应用领域随着人们的需求越来越大。现今,单片机技术已经遍满人类生活的各个领域,定时控制是不可缺少的条件,未来的物联网等对单片机的要求越来越高,智能化的道路定时必不可少。工业自动化中的数据处理以及实时控制,电子玩具,智能手

8、机,游戏等等,定时的应用领域非常广泛。在以后物联网的发展中定时也是发挥着很大的作用,智能家居,智能交通系统,智能仪表等领域,或许这一刻的研究正是下一个难题的突破。因此对于定时器的学习是非常重要的。但仅仅只有单片机的只是远远不够,针对实际生活,软硬件结合。1964年,我们的前辈承担着东京奥运会的计时工作,此后,电子闹钟给我们的生活带来了意外的结果。随着需求的增加,51单片机已经不能满足社会的发展,STM32系列专为低功耗、高性能、低成本的嵌入式设计的ARM Cortex-M内核。本设计用的是STM32F103ZE是一款时钟频率能达到72MHz的增强型内核。MP3是作为一种音乐文件的播放器。第一台

9、MP3播放器-MPMan F10是由Saehan公司于1998年推出的,轰动一时。MP3全称叫MPEG Audio Layer3,是一种音频压缩技术。MP3是利用 MPEG Audio Layer 3 的技术,将音乐以1:10 甚至 1:12 的压缩率,压缩成容量较小的file,也就是说,在非常好的保持了原来的音质的同时,把文件压缩到非常小的程度在音质丢失很小的情况下。由于MP3具有音质高,体积小等优点,使得其格式在网上非常流行,每首歌大概3,4M字节。使用MP3播放器对MP3文件进行实时的解压缩(解码),这样,高品质的MP3音乐就播放出来了。当前,MP3播放器不计其数,在各种手机,电脑等各种

10、电子产品中随处可见,不少电子产品的MP3播放器音质非常好,手机,电脑上都可以免费下载播放器。 本次的设计音乐MP3闹钟,主要研究MP3播放和闹钟的实现,MP3播放就是一个难点,但这次毕业论文的设计,不仅巩固所学知识,还锻炼了自我学习的能力。 第二章 硬件介绍 本设计所用硬件为STM32F103ZE开发板,自带SRAM & Flash模块,SD卡模块,LCD液晶屏模块,Codec音频模块,USART串口模块等。图 2-1 STM32F103ZE开发板2.1 STM32F103ZE STM32 STM32代表ARM Cortex-M内核的32位微控制器 F F代表芯片子系列。 103103代表增强

11、型系列。 R R这一项代表引脚数,其中T代表36脚,C代表48脚,R代表64脚,V代表100脚,Z代表144脚,I代表176脚。 B B这一项代表内嵌Flash容量,其中6代表32K字节Flash,8代表64K字节Flash,B代表128K字节Flash,C代表256K字节Flash,D代表384K字节Flash,E代表512K字节Flash,G代表1M字节Flash。 T T这一项代表封装,其中H代表BGA封装,T代表LQFP封装,U代表VFQFPN封装。 66这一项代表工作温度范围,其中6代表-4085,7代表-40105。图2-2 STM32F103ZE字母表 STM32F103ZE 增

12、强型系列使用ARM公司的Cortex-M3 32位的RISC内核,工作频率为72MHz。其功能非常强大。选择STM32F103ZE作为此次设计的微处理器,主要因为其外围接口多种多样,在实现其他功能的时候更加方便,还有一点就是其足够大的闪存和内存。Cortex-M3是一个32位处理器内核。内部的寄存器、数据路径、存储器接口都是32位的。CM3采用了哈佛结构,拥有独立的数据总线和指令总线,可以让取指与数据访问并行不悖。这样一来数据访问不再占用指令总线,从而提升了性能。为实现这个特性,CM3内部含有好几条总线接口,每条都为自己的应用场合优化过,并且它们可以并行工作。但是另一方面,指令总线和数据总线共

13、享同一个存储器空间(一个统一的存储器系统)。换句话说,不是因为有两条总线,可寻址空间就变成8GB了。2.2 按键模块本次设计需要用按键对闹钟进行时间设置,共分为五个按键,上下左右中间,分别与STMF103ZE的PG15,PD3,PG14,PG13,PG7相连。在开始之前需要对按键,GPIO进行配置,直接调用库函数。2.3 I/O 模块I/O具有通用和复用功能(GPIO和AFIO)。GPIO的每个位可以由软件分别配置成8种模式:输入上拉,输入下拉,输入浮空,模拟输入,开漏输出,推挽式输出,推挽式复用功能,开漏复用功能。下图是端口位配置表和输出模式位表。端口位配置表: 图2-3 STM32端口位配

14、置表输出模式位表:图2-4 STM32端口位配置表2.4 存储模块设计SD卡(Secure Digital Memory Card),译为安全数码卡,是一张只有2克,看起来像一张邮票的SD记忆卡。SD卡是这个信息化社会最为通用的数据存储卡,在我们的生活中起着重要作用。SD卡优点:存储量大、价格低、安全性强、使用方便、安全性好。SD卡有6线制的SD方式和4线制的SPI方式,本设计采用SPI方式。在此过程中,以SD卡为存储设备,必须对其内容进行读取。该系统使用STM32内部接口SPI1与SD卡进行通信。在SPI模式下其命令由6个字节构成。SD卡以命令形式来控制SD卡的读写操作,可根据命令对多块或单

15、块进行读写操作。 下图是电路原理图,SD卡有九个引脚,最特殊的就是9号引脚。SD卡有两种方式,如何进入两种不同的模式呢?SD卡模式:SD卡从中唤醒的时候默认情况下是SD卡模式。当CS(1号引脚)保持高电平则依然是SD卡模式,当CS信号在复位命令被接收期间被拉低进入SPI模式。 图2-5 SD卡电路原理图2.5 LCD液晶屏模块液体 :分子的方向不能找到规律的液体。“液态晶体”简称“液晶”是指分子的方向能找到规律的液体。液晶产品在我们的生活中随处可见,家里常看的电视,现在几乎人手一步的手机等等。LCD : Liquid Crystal Display翻译为液晶显示器,它一种是采用了液晶控制透光度

16、技术来实现色彩的显示器,俩片玻璃中有许多的细小的电线,有的垂直有的水平,透过通电来控制水晶分子,从而达到改变分子方向的目的,并将光线折射出来产生画面。在众多LCD类型当中,STN、TFT最为常见。STN的英文为Super Twisted Nematic,是我们在平常生活中接触最多的LCD了,还记得以前的老式手机吗?它的屏幕就是STN的。相比于TFT,STN属于被动矩阵式LCD器件,它的优点是功耗小,因此特别省电。STN有传统单色和彩色,彩色是在单色的基础上加了一彩色滤光片,同时把单色显示矩阵中每一个像素分成三个子像素,通过彩色滤光片显示出三原色红绿蓝,因此显示出彩色画面。STN最多能显示出65

17、536中色彩,也因此亮度不高,色泽也不是特别好,因此在强光下,图像看起来有点吃力。TFT : Thin Film Transistor薄膜晶体管。也称为主动矩阵,因其背部设置特殊光管,能够“主动”对各个独立像素进行控制,故得到此名。一般TFT的反应时间比较快,约为80ms,而STN为200ms,STN若要提高就会有闪烁现象发生。TFT则改善了STN闪烁现象,并且提高了播放播放动态画面的能力。两者相比,TFT具有更好的还原能力、更高的对比度,以及更好的色彩饱和度,它的色彩更加的细腻,层次感也更强,色彩也更加的逼真。TFT-LCD与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每

18、一个像素上都有设置一个薄膜晶体管TFT,可以有效的克服非选通时的串扰,使显示液晶屏的静态属性与扫描线数无关,大大提高了图像质量。TFT-LCD 即薄膜晶体管液晶显示器。电路原理图如下: 图2-6 LCD电路原理图2.6 Codec音频模块Codec 是指在数字通信中具有编码、译码功能的编译码器。支持视频和音频压缩(CO)与解压缩的编解码器或软件。Codec技术能有效减少数字存储占用的空间,在计算机系统中,使用硬件完成CODEC可以节省CPU资源,提高系统的运行效率。在声卡上往往可以找到一颗或者2颗甚至3颗4面有引脚的正方形芯片,面积一般为0.5-1.0平方厘米。这就是CODEC。CODEC就是

19、多媒体数字信号编解码器,主要负责数字-模拟信号转换(DAC)和模拟-数字信号的转换(ADC)。不管是音频加速器好,还是I/O控制器好,他们输入输出的都是纯数字信号,我们要使用声卡上的Line Out插孔输出信号的话,信号就必须经过声卡上的CODEC的转换处理。可以说,声卡模拟输入输出的品质和CODEC的转换品质有着重大的关系,音频加速器或I/O控制器决定了声卡内部数字信号的质量,而CODEC则决定了模拟输入输出的好坏。STM32F103VET微控制器内置2个标准的I2S(IC-to-ICsound)接口(与SPI2和SPI3复用),可以工作于主或从模式,这2个接口可以配置为16位或32位传输,

20、亦可配置为输入或输出支持音频采样频率从8kHz到48kHz。当任一个或两个I2S接口配置为主模式,它的主时钟可以以256倍采样频率输出给外部的DAC(解码器)或CODEC(编解码器)。I2S是一种数字音频设备之间的音频数据传输总线标准,STM32芯片提供I2S这样的接口,我们可以利用这个接口直接去接数模转换的DAC芯片,这样可以将数字音频转换成模拟音频,最终将美丽的音乐传入我们的耳朵。I2S有多种数据模式,右对齐音频数据格式输入(I2S Data Format),左对齐音频数据格式输入(left-justfied Data Format),I2S音频数据格式输入(I2S Data Format

21、),还有就是标准数据格式输入(Standard Data Format)。下面是I2S Data Format的接口时序图: 图2-7 I2S 模式下PCM1770数字音频接口时序2.7 USART串口模块串口最基本的就是波特率的设置。在调用前要进行相应的设置 :第一步 :打开串口时钟;第二步 :设置相应的IO口模式;第三步 :配置波特率、数据位长度、就校验位每个串口都有一个自己独立的波特率寄存器USART_BRR。Tx/Rx波特率=fPCLKx/(16*USARTDIV)在这里需要注意的是:USART、GPIO是两个不同的模块,USART是临时“借用”了GPIO设备作为自己的输出通道,因此在

22、进行配置时,USART时钟,GPIO的时钟都要打开,还要将对应GPIO引脚设置为第二功能模式。在嵌入式中串口一般都是用于调试,因为其传送数据相对来说很慢,也不能进行大量数据传输。一般用DMA。图2-8 串口调试电路图第三章 系统软件设计 本设计所用软件为Keil uVsion4, Source Insight3.5, 串口调试助手。Keil uVsion4是美国Keil Software公司推出的兼容C语言软件开发系统,对比于传统的汇编,C语言在结构上,可维护性上,结构和功能上都具有明显的优势。Keil主要包含实时操作系统的核心(这也是嵌入式开发工程师选择此软件的重要原因)、C编译器、库管理器

23、、宏汇编程序、连接器和调试器、固件。Keil uVsion4 相对于前面几个版本,提供一个高效,整洁的环境来开发应用程序。同时能够支持更多的ARM芯片。Source Insight3.5 实质上是一个支持多种开发语言(java,c,c+等等)的编辑器。具有强大的查找、定位、彩色显示等功能。是一个面向项目的源码查看器,和编辑器。它能动态的分析你的代码并自动维护它的符号信息数据库,然后把有用的上下文相关的信息提示给你。串口调试助手是串口调试的相关工具,支持几种常用波特率,如4800,9600,19200等,能设置数据位和停止位,校验,还能自动识别串口,能以十六进制或ASCII发送或接收任何数据或字

24、符,发送的文件大小不限制,发送周期也可以自己设置。3.1 文件系统FAT所谓文件系统就是负责管理和存储文件信息的软件机构称为文件管理系统。FAT文件系统(文件配置表 File Allocation Table)是由微软开发的。目前有三种文件系统:FAT121、FAT16、FAT32。在实际磁盘上FAT结构每一表项的大小,也就是所占的位数。FAT文件分配表每一项为12位,FAT16为16位,FAT32为32位。FatFs介绍 :当今社会大点信息量越来越大,文件系统成为今后单片机的一个方展方向。由于微软Windows的广泛应用,FAT文件系统最为常用。FatFs是小型嵌入式系统中,实现FAT文件系

25、统的一个通用的文件系统模块。且完全独立与I/O层。FatFs为单片机的使用而设计,具有很好的层次结果。从上到下依次为应用层,我们不需要了解其协议和内部结构,调用基本点接口函数就行,非常简单。中间层FatFs,实现FAT文件读写协议,一般不用修改,包含头文件就行。需要编写移植代码的是FatFs提供的底层接口。图 3-1 FATFS文件系统图3.2 SPI驱动时钟信号的相位和极性SPI_CR寄存器的时钟极性(CPOL)和时钟相位(CPHA),可以组合成四种可能的时序关系。CPOL位对主模式和从模式下的设备都有用,没有数据传输时时钟的空闲状态电平由CPOL位控制。当CPOL位置一,SCK引脚保持高电

26、平在空闲状态下,当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

27、为零时,空闲时应下拉SCK为低电平,为一时,SCK为高电平)。3.2 SD卡的软件设计SD卡的寄存器,主要用于存储SD卡自身的一些信息。向SD卡发送相应的命令就可以读取SD卡的寄存器。SD卡指令,具有一定的格式在其发送的时候。有6字节组成。驱动设计 : 因为此设计中采用的是SD卡的SPI总线,所以SD卡的驱动是基于SPI的驱动是基础上的。SPI最重要的函数 : 写函数 void Spi_Write(uint8 chr) 和读函数 char Spi_Read()。下面是SD卡驱动最重要的几个函数的实现:1. 复位函数:功能描述:复位SD卡,用到SD卡,用到CMD0,使用SD卡切到SPI模式。成功

28、则返回0x00,失败则返回INIT_CMD0_ERROR uint8 SD_Reset(),此函数是SD卡最开始调用的函数,通过发送CMD0将SD卡转到正确的工作模式下。2. 初始化函数:功能描述:初始化SD卡,使用CMD1,成功则返回0x00,失败则返回0x01Char SD_Init(),此函数在SD卡执行完复位函数后开始执行。目的就是向SD卡发送CMD1,然后检测SD卡是否进入工作状态。3. 写扇区函数:功能描述:将buffer指向的512个字节的数据写入到SD卡的addr扇区中,addr参数指扇区地址,buffer指向数据缓冲区的指针,成功则返回0x00,失败返回0x01.4. 读扇区

29、函数:功能描述:读取addr扇区的512个字节到buffer指向数据缓冲区。addr参数指扇区地址,buffer指向数据缓冲区的指针,成功则返回0x00,失败返回0x01.3.2 MP3软解码3.2.1 方案选择方案一: 此方案采用软解MP3,直接用软件解码。节约了硬件成本,但代码复杂,编程难度较高,工作量极大,而且对控制器的处理速度和资源要求都比较高。 方案二:此方案采用硬解MP3,直接用音频解码芯片解码。它使用高性能的VS1003 MP3解码芯片,功能强大而且价格便宜,VS1003支持MP3、WAV、WMA、MIDI等诸多音频格式,音质可与市场上中档MP3播放器相媲美。由于PCM1770芯

30、片仅仅只是进行D/A转换,并不支持硬件解码,且为了挑战自己加强对MP3文件格式的理解,所以选择了方案一作为本次设计的MP3解码方案。3.2.2 Helix MP3 解码器Helix MP3 解码器可浮点和定点实现。将该算法移植到PIC32MX 单片机时可考虑定点实现。该算法可运行在任意 32 位定点处理器上,并完全使用 C 语言编码,可选择用优化的汇编指令替换某些代码段。Helix MP3 解码器提供对 MPEG-1 、 MPEG-2 和 MPEG-2.5的第 3 层 ( Layer 3)支持。它支持可变位速率、恒定位速率,以及立体声和单声道音频格式。有关实现和特性的详细信息,访问 Helix

31、 MP3 解码器网站:/Mp3dec。3.3 时 钟3.3.1 实现的基本功能 1. 闰年的判断。如果年份不能被四整除就是平年。不能同时被四和一百整除,则是闰年。既能被四整除,也能被一百整除,还能被四百整除的也是闰年,否则是平年。2. 判断日期是否合法,年月日时分秒小于零不合法,月日时分秒都不能超过最大值,合法之后在判断是否是闰年,若为闰年,则判断二月是否满足要求。3. 对时间进行设置,可以很据自己的需求调节时间,闹钟的话就需要设置不同的时间,时间到了,就播放处一段音乐。下面是闰年算法的部分代码:/*闰年算法*/if( (ye

32、ar_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_numbe

33、r = 1; /天数为一 year_number+; 3.4 固件库的使用固件库的使用很简单,先初步熟悉一下固件,通过里面提供的函数来配置微控制器并实现一些简单的分立功能。此函数库包括了微控制器所有外设的性能特征,以及每个外设的应用实例和驱动描述,同时此函数库是由程序、数据结构和宏组成的固件函数包。有了此固件库后,用户可以轻松应用每一个外设还不需要深入掌握许多细节,在一定程度上给用户带来了很大的方便,节省了大量的程序编写时间,也因此大大降低了开发成本。3.5 嵌入式操作系统UCOSII Ucosii 是Micrium公司提供的,不是一个完整的实时操作系统,只是一个具有可移植、可裁剪、可固化、抢

34、占式多任务的实时内核。其源码开放,非常适合于系统开发,从而适合于多种微处理器、数字处理芯片及微控制器。它的绝大部分源码都是ANSI_C编写的,CPU硬件相关的部分都是用汇编编写,并压缩到最低限度以便于移植到其他的CPU上。Ucosii由核心、CPU的移植、任务处理、任务同步与通信、时间处理五部分组成。1、 核心部分(OSCore.c):这部分是操作系统的核心,包括系统初始化,如void OSInit (void);系统的运行、中断进出的前导、任务调度、事件处理、时钟节拍等。2、 CPU的移植:因为它被广泛使用,在一些问题上还得根据cpu的具体情况作相应的移植。这部分通常用汇编写涉及SP等系统指

35、针,难度比较大。3、 任务处理:主要在OSTask.c中。主要包括任务的建立INT8U OSTaskCreate (void (*task)(void *p_arg), void *p_arg, OS_STK *ptos, INT8U prio);任务的删除:INT8U OSTaskDel (INT8U prio);任务的挂起以及任务的恢复。4、 任务同步与通信:此部分主要包括信号量、邮箱、邮箱队列,事件标志等部分。5、 时钟部分:在OSTime.c中,该系统中最小时钟单位是时钟节拍,也即timetick,任务延时等都在这里完成。第四章 系统测试与开发4.1 搭建开发环境4.1.1 安装 JL

36、INK 驱动JLINK 是SEGGER公司推出的,为了支持仿真ARM内核芯片的JTAG仿真器。是学习开发RAM最好的开发工具,同时与IAR,Keil等编译环境完美连接,操作起来更加方便易学。本设计就需要用到JLINK下载和调试程序,在此之前应该先安好JLINK的驱动。下载JLINK驱动后,直接双击驱动文件Setup_JLINKRAM_V486B.exe,然后根据提示进行安装即可。安好后,需要检查是否安装成功。把JLINK(如下图) 图4-1 JLINK实物图插到电脑上USB接口,然后在我的电脑管理设备管理器通用串行总线控制器中看到一个 J-Link driver,表明驱动安装成功。4.1.2

37、安装 MDKMDK指的是Keil MDK,也称MDK-ARM、uVision4等。Keil MDK软件为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境。Keil MDK 简单易学而且功能非常强大,是学习嵌入式非常好的开发工具。前面有过介绍。4.2 硬件测试4.2.1 按键中断测试此部分测试是通过四个按键分别控制四个LED灯,若每个按键对应的每个灯都能亮则按键部分测试成功。/外部中断设置voidEXTI_Configuration(void)EXTI_InitTypeDefEXTI_InitStruct;GPIO_EXTILineConfig(GP

38、IO_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=EX

39、TI_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);/中断优先级设置voidNVIC_Configuration(void)NVIC_InitTypeDefNVIC_InitStruct;/三个通道三次配置,否则会被覆盖

40、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

41、.c中加入按键触发后LED灯的状态。如:/*中断服务程序*/Void EXTI9_5_IRQHandle(void)EXTI_ClearITPendingBit(EXTI_Line5);GPIO_SetBits(GPIOD,GPIO_Pin_3);4.2.3 LCD测试LCD的测试,就是简单的在LCD上画一个圆,若能显示出来则测试通过。下面就是部分代码:voidLCD_configuration(void)LCD_BL_Pin_Config();Delay(20);LCD_BL_Cmd(ENABLE);STM3210E_LCD_Init();LCD_SetTextColor(Red);void

42、LCD_BL_Pin_Config(void)GPIO_InitTypeDefGPIO_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);voidLCD_BL_Cmd(FunctionalStateNewSt

43、ate)if(NewState!=DISABLE)GPIO_SetBits(GPIOA,GPIO_Pin_8);elseGPIO_ResetBits(GPIOA,GPIO_Pin_8);4.3 软件测试4.3.1 FATFS文件系统移植测试FATFS源代码的获取,可以到官网下载。1、解压文件会得到两个文件夹,一个是doc文件夹,这里是FATFS的一些使用文档和说明,以后在文件编程的时候可以查看该文档。另一个是src文件夹,里面就是我们所要的源文件。2、建立一个STM32的工程,为方便调试,我们应重载printf()底层函数实现串口打印输出。可以参考已经建立好的printf()打印输出工程:3、

44、在已经建立好的工程目录User文件夹下新建两个文件夹,FATFS和SPI_SD_Card,FATFS用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驱动文件。4、将ff.c添加到工程文件夹中,并新建diskio.c文件,在diskio.c文件中实现五个函数:DSTATUS disk_initialize (BYTE);/SD卡的初始化DSTATUS disk_status (BYTE);/获取SD卡的状态,这里可以不用管DRESULT disk_read (BYTE, BYTE*, DWORD, BYTE);/从SD卡读取数据DRESULT disk_write (BYTE,

45、const BYTE*, DWORD, BYTE);/将数据写入SD卡,若该文件系统为只读文件系统则不用实现该函数DRESULT disk_ioctl (BYTE, BYTE, void*);/获取SD卡文件系统相关信息5、 diskio.c函数都实现后接着实现SPI_MSDO_Driver.c文件中的相关函数,此文件可上网下载。6、 测试/写文件测试printf(writefiletest.nr);res=f_open(&fdst,0:/test.txt,FA_CREATE_ALWAYS|FA_WRITE);if(res!=FR_OK)printf(openfileerror:%dnr,re

46、s);elseres=f_write(&fdst,textFileBuffer,sizeof(textFileBuffer),&bw); if(res=FR_OK)printf(writedataok!%dnr,bw); elseprintf(writedataerror:%dnr,res);f_close(&fdst);/*关闭文件,必须执行,否则数据无法写入SD卡中*/还有读文件测试,这里就不一一写出来啦。4.3.2. UCOSII 操作系统移植1、从micrium官方下载移植版本:下载地址:解压缩后得到如下:图4-2 UCOSII 操作系统移植文件夹UC/OS-II是操作系统源码,移植时

47、基本不需要改动。Arch :与体系架构相关的,不能用C代码实现,必须用汇编实现的代码,比如:任务切换时的寄存器切换。BSP:与单板配置相关的代码,主要是单板工作频率的配置和获取。App:应用程序代码示例。 2、文件目录 :Libraries、MDK-Proj不变;uCOS新增加uCOS源码;App改为uCOS的App源码。MicriumSoftwareuCOS-IIPortsARM-Cortex-M3GenericIAR图4-3 工程文件展示图3、工程目录结构:StartUp、Core、StdPheriph不变;Bsp、Source、Arch新增加uCOS源码;App改为uCOS的App文件。4、 mC/OS-异常服务例程 uC/OS-系统文件中定义的PendSV和SysTickHandler的入口函数应该分别是OS_CPU_PendSVHandler和OS_CPU_SysTickHandler,改过来即可。5、汇编文件修改由于官方提供的汇编文件,是基于IAR的开发环

温馨提示

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

评论

0/150

提交评论