嵌入式系统课程设计报告Word下载.docx
- 文档编号:19935491
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:11
- 大小:124.68KB
嵌入式系统课程设计报告Word下载.docx
《嵌入式系统课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统课程设计报告Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
将音乐存储在SD卡内,通过文件的地址来判别将要播放哪一首音乐,通过地址的递增和循环来实现音乐的自动循环播放。
按键对曲目的控制,可通过键盘扫描函数,判断哪一个键被按下,使键盘扫描函数返回不同的返回值,实现对文件地址的控制。
将此返回值设置为全局变量,可实现在音乐播放中曲目的切换。
另外,我们还利用解码模块实现对音量的控制,使用按键控制音量的提高或降低。
使用SPI1总线将TFT显示屏连接到内核,显示按键功能、当前曲目、当前模式等信息。
由于开发板只有5个按键,按键数量有限,需要对按键实现曲目切换和音量功能的复用。
我们小组设置了两种模式,切歌模式和音量模式,并定义左键为模式切换键,实现不同模式的选择和按键的复用。
根本思路是通过定时器中断来产生一定频率的50%空占比的脉宽调制波,用此脉宽调制波鼓励扬声器,从而使扬声器发出一定频率的声音。
所以只要将不同按键的中断子程序设置为对定时器进展不同数据的配置,即可实现不同按键与不同扬声器发生频率的对应。
然后使一个按键的按下与松开均进入中断,且分别实现开启〔扬声器发声〕与关闭〔扬声器不发声〕定时器的功能,从而使课题的附加功能表现地更自然。
三、硬件配置
〔1〕SD卡:
存储音频数据
配置方法:
根据开发板原理图,配置方法如以下图所示
〔2〕VS1053解码芯片:
将输入的比特流解码后送入DAC
音频解码模块与开发板接线方式:
//5V---5V
//GND--GND
//XRST--PG8
//MISO--PA6
//MOSI--PA7
//SCLK--PA5
//DREQ--PG7
//XCS--PE6
//XDCS--PG6
〔3〕TFT显示屏
(4)外放音响
PC机一台;
P42.06CPU/40GHD/512MRAM以上配置,STM32F103开发板一套;
外接扬声器一个
四、设计步骤或流程图
1.初始化包括单片机本身的初始化和VS1053的初始化
〔1〕初始化STM32的IO口和SPI;
〔2〕VS1053进展存储器测试;
〔3〕初始化设置音频输出,设置音频输入要设置成VS1053;
〔4〕VS1053进展正弦波测试;
〔5〕VS1053进展一些根本设置,包括音效模式等。
2.输入音频文件数据
〔1〕通过FATFS翻开音频文件;
〔2〕VS1053进展软件复位;
〔3〕使用FATFS读取音频文件数据;
〔4〕发送文件件,每次发送32个字节,直到音频文件发送完成。
3.对TFT显示屏进展根底设置
1.按键初始配置:
对所用到的按键进展相应的IO口配置,且完成按键中断的中断通道配置。
2.中断通道的中断子程序:
由于会不只一个键配置在同一个中断通道中,所以中断通道的中断子程序首先进展对按下按键的识别。
然后读取与按键相对应的IO口电平,假设为低电平〔=下降沿=按下键〕,那么对定时器进展数据配置,并翻开定时器;
假设为高电平〔=上升沿=松开键〕,那么关闭定时器。
3.定时器的中断子程序:
定时器产生中断时,定时器继续工作,且翻转与扬声器相连的IO口的输出电平。
五、采用的技术、技巧、功能模块介绍
〔1〕技术和技巧
音乐播放模块的过程中,我们分为两个功能,其中有切歌功能,即四个按键对应于四首歌,另外一个就是可以实现模式切换的功能,该功能包括两种模式,即切歌模式和音量加减模式,其中有一个按键来实现两个功能之间的切换,在切歌模式中,另外的三个按键对应三首歌曲,音量加减模式中,两个键分别对应于音量加和音量减。
播放歌曲的主要步骤为,首先对模块进展一系列的初始化,并在显示屏上显示每个按键对应的歌曲或音量加减的功能,设置初始音量为230,然后对SD卡进展读取数据的操作,并找到对应的存放歌曲的文件夹MUSIC,对文件中MP3文件名称读取并存储,同时记录文件的地址,然后跳转到音乐播放的函数,该函数中对按键进展扫描并跳转到所按下按键对应的功能,从而实现音乐的播放和音量的加减。
在切歌功能中,我们通过对所扫描的歌曲文件进展排序,并将四个按键对应到所排的序号中,所以当我们扫描到哪个按键按下的时候,就在其后面赋予一个返回值,返回该按键对应音乐的序号,通过返回值我们可以在主函数中得到该序号所对应歌曲的地址,通过该地址我们可以实现对音乐文件名称的读取,以及音乐数据的解码,从而实现在LCD显示屏上显示音乐的名称和播放音乐这些功能。
〔2〕功能模块
1〕解码模块
本次实验音乐的播放主要是通过读取SD卡的中的mp3文件,再将其输送至VS1053解码器中进展解码,从而实现音乐的播放。
其中VS1053通过串行数据接口SDI和串行控制接口SCI进展通信。
VS1053引脚分配图VS1053封装图
VS1053中重要的几个引脚如下:
1)VS_MISO:
SPI输入线
2)VS_MOSI:
SPI输出线
3)VS_SCK:
SPI时钟线
4)VS_XCS:
器件片选
5)VS_XDCS:
数据片选和字节同步
6)VS_DREQ:
数据请求,输入总线。
7)VS_RST:
复位端
实验中VS1053主要实现播放一个完整的音乐文件和取消播放这两个功能
〔一〕播放一个完整文件
1、发送音频文件到VS1053;
2、读取附加参数endFillByte的值;
3、发送endFillByte[7:
0]中的值最少2052个字节;
4、设置SCI_MODE的SM_CANCEL位;
5、发送endFillByte[7:
0]中的值最少32个字节;
6、读取SCI_MODE,如果SM_CANCEL位依然是设置的,那么跳到步骤5;
如果SM_CANCEL始终没有被去除,在发送2048个字节之后,执行软件复位;
7、这首歌曲现在已经成功被发送了。
HDAT0和HDAT1都应该包含0来说明现在已经没有正在解码的格式了。
现在返回步骤1。
〔二〕取消播放
在播放音乐时,当用户想跳到下一首,可通过取消当前的歌曲播放来实现,它用以下步骤来实现:
1、发送一个音频文件的局部到VS1053;
2、设置SCI_MODE的SM_CANCEL位;
3、继续发送音频文件,但要在发送32字节的数据之后检查SM_CANCEL,如果它还是被设置,那么重新进展步骤3。
如果SM_CANCEL始终没有被除,在发送2048个字节之后,执行软件复位;
4、当SM_CANCEL被去除,读取附加的参数值endFillByte;
5、发送endFillByte[7:
0]中的值,共计2052个字节;
6、HDATO和HDAT1都应该包含0来说明现在已经没有正在解码的格式了,你现在可以开场发送下一个音频文件了。
2〕SD卡
SD卡中用于存放我们需要播放的mp3文件,音乐文件放在一个叫MUSIC的文件夹,在播放时通过对SD卡中的文件夹进展扫描匹配,来得到播放音乐的正确路径。
本次实验SD卡的操作模式为SD卡模式,即通过SDIO进展通信,允许4线的高速数据传输。
SD卡的引脚排序如下:
SD卡模块引脚图
以下为SD卡在正常工作时的三个过程,包括初始化和读写数据。
〔一〕SD卡初始化过程:
1、初始化与SD卡连接的硬件条件〔MCU的SPI配置,I0口配置〕;
2、上电延时(大于74个CLK);
3、复位卡〔CMD0〕,进入IDLE状态;
4、发送CMD8,检查是否支持2.0协议;
5、根据不同协议检查SD卡〔命令包括:
CMD55、CMD41、CMD58和CMD1等〕;
6、取消片选,发送8个CLK,完毕初始化
在完成了初始化之后,就可以开场读写数据了
〔二〕从SD卡中读取数据
SD卡读取数据,这里通过CMD17来实现,具体过程如下:
1、发送CMD17;
2、接收卡响应R1;
3、接收数据起始令牌0XFE;
4、接收数据;
5、接收2个字节的CRC,如果不使用CRC,这两个字节在读取后可以丢掉;
6、制止片选之后,发多8个CLK;
〔三〕向SD卡中写数据
1、发送CMD24;
3、发送写数据起始令牌OXFE;
4、发送数据;
5、发送2字节的伪CRC;
6、制止片选之后,发多8个CLK
3〕LCD显示屏
本次实验中我们用的是TFTLCD显示屏,该模块主要用来显示当前播放的歌曲,切歌时每个按键对应的歌曲,以及音量增减时加减音量所对应的按键。
LCD模块原理图
实验中对TFTLCD模块的使用主要有以下几个过程
〔一〕设置STM32F103与TFTLCD模块相连接的I0口
要让TFTLCD模块显示,首先得初始化TFTLCD模块与STM32F103相连的I0以便控制TFTLCD,这里我们用使用的是STM32F103的FSMC
〔二〕初始化TFTLCD模块
初始化I0口,接着就是对TFTLCD进展配置,首先就是要对LCD复位,由于模块的复位引脚是接在SI32F103复位上的,所以直接按下开发板复位键即可,然后就是初始化序列,即向LCD控制器写入一系列的设置值,初始化完成之后,LCD即可正常使用。
〔三〕将要显示的内容写到TFTLCD模块内
这一步需要对照:
设置坐标→写GRAM指令→写GRA来实现,但是这个步骤,只是一个点的处理,如果我们想要显示字符或数字,就必须要屡次使用这个步骤,从而到达显示字符或数字的目的,因此我们设计一个函数来封装这些过程(实现字符或数字的显示),之后只调用该函数,就可以实现字符或数字的显示。
4〕按键模块
本次实验通过按键来实现切歌和音量的加减
通过读取与按键相对应的IO口电平,来判别按键是按下还是松开。
1.按键初始配置:
第一局部,对IOC8口〔8号按键〕初始化;
第二局部,将中断分配在8号中断通道,且是下降沿与上升沿均触发中断;
第三局部,将5至9号中断通道优先级均设为0。
类似的还有IOC9口,IOC10口,IOC11口,10至15号中断通道。
2.中断通道的中断子程序:
if(EXTI_GetITStatus(EXTI_Line8)==1),判别是否是8号键触发中断。
if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_8)==0),判别8号键是否是按下触发中断。
TIM_TimeBaseStructure.TIM_Period=1915;
TIM_TimeBaseStructure.TIM_Prescaler=71;
,对定时器进展数据配置,数字根据所需扬声器发声频率来定。
TIM_Cmd(TIM2,ENABLE);
,开启定时器。
{TIM_Cmd(TIM2,DISABLE);
},关闭定时器。
9号按键,10号按键,11号按键类似。
3.定时器的中断子程序
IOE2口是与扬声器相连的口,定时器中断时,翻转此口的输出电平。
六、心得体会
本次的课程实践是培养我们综合运用所学知识,发现、提出、分析和解决实际问题、锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程。
在经过了长达五个星期的摸索与实验,我们终于完成了课程设计所要求的内容并且还实现了拓展功能,有了一个圆满的结果,但这其中的过程却是很曲折的。
虽然在做课程设计以前我们已经系统地学习了课本上是内容,但是理论与实践往往会有一些差距,在一开场拿到课题我们还是没有头绪。
经过上网查询并学习,我们首先有了系统地思路及整体的设计方向,但是在做的过程中还是遇到了很多问题。
我们原本使用的是实验室开发板,音频解码模块需要三个额外的引脚,数据请求选引脚DREQ,数据片选引脚DXCS,器件片选引脚XCS,实验室的开发板有SPI可以完成与模块的通信,但是没有与上面三个端口直接相连的引脚,在我们尝试自己按照数据传输的方式配置觉察成功率较低后,我们决定更换开发板,这样也方便我们课后进展调试。
在选择发声器件时,我们一开场想使用蜂鸣器来发声,后来在实现的过程中发现蜂鸣器的音调变识度很差,很难发出一个准确的音调,因此我们选择更换为扬声器,但是因为输入扬声器的信号很小,使得扬声器发出的声音也很小,我们决定使用放大器来放大声音。
一开场我们选择用三级管放大,但是电路连接好后发现信号容易失真,并且使用一个放大器放大倍数也不够,我们就尝试用多个三级管,但是它们不仅电路非常复杂,要考虑到整流、滤波等等问题,经过上网查询我们发现可以直接使用一个音频放大模块来放大,tda2822m这个放大模块可接扬声器的功率和电阻范围正好符合我们所使用的扬声器,在做了屡次尝试后成功放大了声音,但比拟可惜的是最终因为模块内部器件损坏原因没有成功。
而在这局部最大的缺陷是受于单片机上按键的数目〔四个〕限制,而使扬声器只能发出四个频率的音。
这其实是一个取舍问题,我们可以选择外接一个4*4的键盘,从而可以使扬声器最多发出16个频率的音。
但由于键盘本身的电路设计原因,很难设计出让按键松开时也能触发中断的程序,这样扬声器的发声时长就不能人为的控制,而只能通过内置一个设定好的延时程序来使扬声器停顿发声,这样功能的实现显得很不自然。
最后经过权衡,选择了通过牺牲扬声器的发声频率数,来使功能的实现显得更自然一些。
在实验过程的每一步我们都做了大量的尝试,从软件编写、调试到软硬件联机调试,倾注了我们大量的时间与心血,曾经为程序的编写冥思苦想过,为无法找出错误郁闷苦恼过,也为某一功能无法实现犹豫彷徨过,但是在教师的帮助及大家团结一心下,难题都被一一克制,我们最终成功实现MP3音乐盒的功能。
在本次课程设计中,我们不仅稳固了课本上所学的知识,加深了我们对理论知识的理解,而且还学到了很多课本上没有的知识,懂得了理论与实际相结合的重要性。
使我们认识到只有理论知识是远远不够的,只有把所学的理论知识与与实践相结合,才能提高自己的实际动手能力和独立思考能力。
经历也是是我们的收获,并且还增强了我们自身解决未知问题的能力,使我们受益匪浅。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)