




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成绩课程设计报告题 目:基于stm32的fm电台课程名称: arm嵌入式系统 学生姓名: 学生学号: 1214040227 系 别: 电子工程学院 专 业: 电子信息科学与技术 届 别: 2012 指导教师: 电子工程学院制2015年4月基于stm32的fm电台学生:王超指导教师:吴琰电子工程学院 电子信息科学与技术1 fm部件介绍1. 主要芯片介绍1.1rda5820介绍 rda5820是北京锐迪科推出的一款集成度非常高的立体声fm收发芯片。rda5820的模式设置通过40h(寄存器地址0x40)寄存器的chip_func3:0位来设置,rda5820可以工作在rx模式、tx模式、pa模式和dac模式等,本章我们只介绍rx模式和tx模。通过设置chip_func3:0=0即可定义当前工作模式为fm接收模式。在该模式下,我们即可实现fm收音机功能。通过设置chip_func3:0=1即可定义当前工作模式为fm发送模式。在该模式下,我们即可实现fm电台的功能。1.2 1053简介vs1053是继vs1003后荷兰vlsi公司出品的又一款高性能解码芯片。该芯片可以实现对mp3/ogg/wma/flac/wav/aac/midi等音频格式的解码,同时还可以支持adpcm/ogg等格式的编码,性能相对以往的vs1003提升不少。vs1053拥有一个高性能的dsp处理器核vs_dsp,16k的指令ram,0.5k的数据ram,通过spi控制,具有8个可用的通用io口和一个串口,芯片内部还带了一个可变采样率的立体声adc(支持咪头/咪头+线路/2线路)、一个高性能立体声dac及音频耳机放大器。vs1053通过spi接口来接受输入的音频数据流,它可以是一个系统的从机,也可以作为独立的主机。这里我们只把它当成从机使用。我们通过spi口向vs1053不停的输入音频数据,它就会自动帮我们解码了,然后从输出通道输出音乐,这时我们接上耳机就能听到所播放的歌曲了,如图1所示。图1 vs1053封装图1.3 74hc4052 简介74hc4052是一款高速cmos器件,74hc4052引脚兼容hef4052b。74hc4052遵循jedec标准no.7a。 e为低时,4个开关的其中之一将被s0和s1选中(低阻态)。e为高时,所有开关都进入高阻态,直接无视s0和s1。vcc和gnd是数字控制端(s0和s1,e)的供电引脚,74hc4052的vcc至gnd范围为2.0 v10.0 v。74hc4052的模拟输入/输出端(ny0至ny3,nz)在上限vcc和下限vee之间摆动,vcc-vee应当不超过10.0 v。作为一个数字多路选择器/多路分配器,vee将被连接到gnd上(一般是接地)宽模拟输入电压范围:-5 v+5 v。1.4 tftlcd简介tft-lcd即薄膜晶体管液晶显示器。其英文全称为:thin film transistor-liquid crystal display。tft-lcd与无源tn-lcd、stn-lcd的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(tft),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。tft-lcd也被叫做真彩液晶显示器。2 硬件设计及模块功能实现2.1硬件设计实验设计为fm发射模式,设计发射频率为92.2mhz,开机显示发射频率,key_up键选择音源输入等信息。按一下key_up键即进入sd卡音源输入模式,这时key0:m+(下一曲) key2:m-(上一曲)起效,再按第二下进入mic音源模式,这时key_down键起效,可以用它来选择直接播放或者录音储存后播放模式。同时用ds0提示程序正在运行。所要用到的部分硬件资源如下:1) 指示灯ds0, 2) key0、key1、key2和wk_up等四个按键, 3) tftlcd模块 ,4) sd卡 ,5) rda5820 ,6) 74hc4052, 7) vs1053b。 2.1.1 rda5820与stm32的连接电路这里rda5820用iic总线,接在stm32的pb10和pb11两个脚上,下图中outl和outr接在rda5820的lin和rin,outr和outl是来自音频选择器(74hc4052)的输出端,作为fm发送时的音源输入。如图2所示。图2 rda5820与stm32的连接图2.1.2 vs1053解码芯片电路原理vs1053通过7根线同stm32连接,他们是:vs_miso、vs_mosi、vs_sck、vs_xcs、vs_xdcs、vs_dreq和vs_rst。其中vs_rst是vs1053的复位信号线,低电平有效。vs_dreq是一个数据请求信号,用来通知主机,vs1053可以接收数据与否。vs_miso、vs_mosi和vs_sck则是vs1053的spi接口他们在vs_xcs和vs_xdcs下面来执行不同的操作。从上表可以看出,vs1053的spi是接在stm32的spi1上面的。 1) 复位vs1053 这里包括了硬复位和软复位,是为了让vs1053的状态回到原始状态,准备解码下一首歌曲。2) 配置vs1053的相关寄存器这里我们配置的寄存器包括vs1053的模式寄存器(mode)、时钟寄存器(clockf)、音调寄存器(bass)、音量寄存器(vol)等。如图3所示。图3 vs1053b音频解码模块原理图2.1.3 sd卡接口和stm32的连接 我们用跳线帽将p10的sd_dt3、sd_cmd、sd_sck、sd_dt0分别同p12的sd_cs、spi2_mosi、spi2_sck、spi2_miso连接起来,即实现sd卡的spi模式连接。硬件连接示意图如图4所示:图4 sd卡spi方式硬件连接示意图 将图中所示的4处,用跳线帽短接,接口实现sd卡与stm32的spi连接。最后,你还得自备一个sd卡,将其插入板子下面的sd卡接口。2.1.4 tftlcd显示模块,模块原理图如图5所示:图 5 alientek 2.8寸tftlcd模块原理图tftlcd模块采用2*17的2.54公排针与外部连接,接口定义如图6所示:图6 alientek 2.8寸tftlcd模块接口图从图6可以看出,alientek tftlcd模块采用16位的并方式与外部连接,之所以不采用8位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用8位数据线,就会比16位方式慢一倍以上,我们当然希望速度越快越好,所以我们选择16位的接口。关于触摸屏本章我们不多介绍,后面的章节会有详细的介绍。该模块的80并口有如下一些信号线:cs:tftlcd片选信号。wr:向tftlcd写入数据。rd:从tftlcd读取数据。d15:0:16位双向数据线。rst:硬复位tftlcd。rs:命令/数据标志(0,读写命令;1,读写数据)。2.2 模块功能实现22.1 tftlcd模块控制我们仅以ili9320控制器为例进行介绍,其他的控制基本都类似。位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565方式,如图7所示:图7 16位数据与显存对应关系图最低5位代表蓝色,中间6位为绿色,最高5位为红色。数值越大,表示该颜色越深。接下来,我们介绍一下ili9320的几个重要命令,因为ili9320的命令很多,我们这里不可能一一介绍,有兴趣的大家可以找到ili9320的datasheet看看。里面对这些命令有详细的介绍。r0,这个命令,有两个功能,如果对它写,则最低位为osc,用于开启或关闭振荡器。而如果对它读操作,则返回的是控制器的型号。这个命令最大的功能就是通过读它可以得到控制器的型号,而我们代码在知道了控制器的型号之后,可以针对不同型号的控制器,进行不同的初始化。因为93xx系列的初始化,其实都比较类似,我们完全可以用一个代码兼容好几个控制器。i/d1:0:当更新了一个数据之后,根据这两个位的设置来控制地址计数器自动增加/减少1,其关系如图8所示:图8 gram显示方向设置图通过这几个位的设置,我们就可以控制屏幕的显示方向了,这种方法虽然简单,但是不是很通用,比如不同的液晶,可能这里差别就比较大,有的甚至无法通用!比如9341和9320就完全不通用。3 软件设计3.1 主函数介绍3.1.1 系统初始化该模块实现对系统各模块的初始化工作,以便后面程序使用这些模块时正常工作。以下是所有初始化函数:delay_init(); /延时函数初始化nvic_configuration(); /设置nvic中断分组2:2位抢占优先级,2位响应优先级uart_init(9600); /串口初始化为9600lcd_init(); /显示屏初始化key_init(); /按键初始化font_init(); /初始化字库audiosel_init(); /初始化音源选择usmart_dev.init(72); /usmart初始化mem_init(sramin); /初始化内部内存池vs_init(); /初始化vs1053 exfuns_init();/为fatfs相关变量申请内存 f_mount(0,fs0); /挂载sd卡 f_mount(1,fs1); /挂载flash.usmart_dev.init(72); /初始化usmartrda5820_init(); /初始化fm收发3.1.2 fm信号发射设置该模块实现对rda5820配置,根据需要这里将模式设置为发射,频率配置为93.6,发射功率设置为最大。以下是所有相关配置函数的调用:rda5820_band_set(0); /设置频段为87108mhzrda5820_space_set(0); /设置步进为100khzrda5820_txpga_set(3); /信号增益设置为3rda5820_txpag_set(63); /发射功率为最大.rda5820_tx_mode();/发送模式freqset=9360; /默认为93.6mhzrda5820_freq_set(freqset);/设置频率3.1.3 tftlcd显示基本信息该模块部分主要在tftlcd上显示必要的信息,提示用户如何操作。以下是程序内容:point_color=red; /设置字体为红色 show_str(60,10,200,16,电台实验,16,0); show_str(60,30,200,16,调频92.2mhz,16,0);show_str(60,50,200,16,*,16,0);lcd_showstring(60,70,200,16,16,2013/11/13); show_str(60,90,200,16,key0:m+ key2:m-,16,0);show_str(60,110,200,16,key_up:modeset,16,0);3.2 iic驱动rda5820 fm收发芯片 该模块部分实现了用iic驱动rda5820,从而实现了rda5820的各种设置。以下是iic控制rda5820寄存器读写的具体函数:void rda5820_wr_reg(u8 addr,u16 val) /写rda5820寄存器 iic_start(); iic_send_byte(rda5820_write);/发送写命令 iic_wait_ack(); iic_send_byte(addr); /发送地址iic_wait_ack(); iic_send_byte(val8); /发送高字节iic_wait_ack(); iic_send_byte(val&0xff); /发送低字节iic_wait_ack(); iic_stop();/产生一个停止条件 u16 rda5820_rd_reg(u8 addr) /读rda5820寄存器u16 res;iic_start(); iic_send_byte(rda5820_write);/发送写命令 iic_wait_ack();iic_send_byte(addr); /发送地址iic_wait_ack(); iic_start(); iic_send_byte(rda5820_read); /发送读命令iic_wait_ack(); res=iic_read_byte(1); /读高字节,发送ackres=8;res|=iic_read_byte(0); /读低字节,发送nackiic_stop();/产生一个停止条件 return res;/返回读到的数据以下是利用以上两个函数实现rda5820具体配置的函数:u8 rda5820_init(void); /初始化函数void rda5820_rx_mode(void); /设置rda5820为rx模式void rda5820_tx_mode(void); /设置rda5820为tx模式void rda5820_txpag_set(u8 gain); /设置tx发送功率void rda5820_txpga_set(u8 gain); /设置tx 输入信号增益void rda5820_band_set(u8 band); /设置rda5820的工作频段void rda5820_space_set(u8 spc); /设置rda5820的步进频率3.3 sd卡读写驱动该模块利用spi实现对sd卡的数据读写。 以下是sd卡控制的主要函数:void sd_spi_init(void); /spi硬件层初始化void sd_disselect(void); /取消选择,释放spi总线u8 sd_select(void); /选择sd卡,并且等待卡准备oku8 sd_waitready(void); /等待卡准备好u8 sd_getresponse(u8 response); /等待sd卡回应u8 sd_recvdata(u8*buf,u16 len); /从sd卡读取一个数据包的内容u8 sd_sendblock(u8*buf,u8 cmd); /向sd卡写入一个数据包的内容 512字节u8 sd_initialize(void); /初始化sd卡u8 sd_readdisk(u8*buf,u32 sector,u8 cnt);/读sd卡u8 sd_writedisk(u8*buf,u32 sector,u8 cnt);/写sd卡3.4 tft-lcd显示驱动该模块实现tft-lcd屏幕的显示驱动,这里只简单列举以下基本函数,不作具体展开:void lcd_init(void);/初始化void lcd_displayon(void);/开显示void lcd_displayoff(void);/关显示void lcd_clear(u16 color);/清屏void lcd_setcursor(u16 xpos, u16 ypos); /设置光标void lcd_drawpoint(u16 x,u16 y); /画点void lcd_fast_drawpoint(u16 x,u16 y,u16 color); /快速画点u16 lcd_readpoint(u16 x,u16 y); /读点 void draw_circle(u16 x0,u16 y0,u8 r);/画圆void lcd_drawline(u16 x1, u16 y1, u16 x2, u16 y2);/画线void lcd_drawrectangle(u16 x1, u16 y1, u16 x2, u16 y2);/画矩形void lcd_fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);/填充单色void lcd_color_fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color);/填充指定颜色void lcd_showchar(u16 x,u16 y,u8 num,u8 size,u8 mode);/显示一个字符void lcd_shownum(u16 x,u16 y,u32 num,u8 len,u8 size); /显示一个数字
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医联体建设成效评估报告:医联体与医教研协同发展
- 私下配送免责协议书模板
- 自建别墅房出售合同范本
- 纸板原材料销售合同范本
- 网络教育三方就业协议书
- 游泳馆合作协议合同范本
- 自动化顾问协议合同范本
- 离婚协议孩子户口协议书
- 空地出租停车合同协议书
- 电力安装三方合同协议书
- 消防接警调度(一级)理论考试题库(含答案)
- 双行星真空动力混合机使用说明书
- 《蔬菜嫁接技术》课件
- 初级心理治疗师职业技能鉴定理论考试题库(浓缩500题)
- 【教案】平行线的判定教学设计七年级数学下册(人教版2024)
- 清扫道路简易合同范例
- 试岗七天签试岗协议书范文
- DB11T 211-2017 园林绿化用植物材料 木本苗
- 前程无忧国企招聘笔试题库
- 中国绿色算力发展研究报告(2024年)
- TD/T 1057-2020 国土调查数据库标准(正式版)
评论
0/150
提交评论