基于STM32的FM电台 下载本文

内容发布更新时间 : 2024/5/16 6:31:35星期一 下面是文章的全部内容请认真阅读。

数字FM电台设计开发

2) 配置VS1053的相关寄存器

这里我们配置的寄存器包括VS1053的模式寄存器(MODE)、时钟寄存器(CLOCKF)、音调寄存器(BASS)、音量寄存器(VOL)等。

图2.2 VS1053B音频解码模块原理图

3) 发送音频数据

当经过以上两步配置以后,我们剩下来要做的事情,就是往VS1053里面扔音频数据了,只要是VS1053支持的音频格式,直接往里面丢就可以了,VS1053会自动识别,并进行播放。不过发送数据要在DREQ信号的控制下有序的进行,不能乱发。这个规则很简单:只要DREQ变高,就向VS1053发送32个字节。然后继续等待DREQ变高,直到音频数据发送完。经过以上三步,我们就可以播放音乐了。

2.2.3 SD卡接口和STM32的连接

我们用跳线帽将P10的SD_DT3、SD_CMD、SD_SCK、SD_DT0分别同P12的SD_CS、SPI2_MOSI、SPI2_SCK、SPI2_MISO连接起来,即实现SD卡的SPI模式连接。硬件连接示意图如图2.4所示:

12

数字FM电台设计开发

图2.3 SD卡接口与STM32连接原理图

图2.4 SD卡SPI方式硬件连接示意图

将图中所示的4处,用跳线帽短接,接口实现SD卡与STM32的SPI连接。最后,你还得自备一个SD卡,将其插入板子下面的SD卡接口。

13

数字FM电台设计开发

2.2.4 TFTLCD显示模块

模块原理图如图2.5所示:

图 2.5 ALIENTEK 2.8寸TFTLCD模块原理图

TFTLCD模块采用2*17的2.54公排针与外部连接,接口定义如图2.6所示:

图2.6 ALIENTEK 2.8寸TFTLCD模块接口图

从图2.6可以看出,ALIENTEK TFTLCD模块采用16位的并方式与外部连接,

14

数字FM电台设计开发

之所以不采用8位的方式,是因为彩屏的数据量比较大,尤其在显示图片的时候,如果用8位数据线,就会比16位方式慢一倍以上,我们当然希望速度越快越好,所以我们选择16位的接口。图18.1.3还列出了触摸屏芯片的接口,关于触摸屏本章我们不多介绍,后面的章节会有详细的介绍。该模块的80并口有如下一些信号线:

CS:TFTLCD片选信号。 WR:向TFTLCD写入数据。 RD:从TFTLCD读取数据。 D[15:0]:16位双向数据线。 RST:硬复位TFTLCD。

RS:命令/数据标志(0,读写命令;1,读写数据)。

80并口在上一节我们已经有详细的介绍了,这里我们就不再介绍,需要说明的是,TFTLCD模块的RST信号线是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个IO口。另外我们还需要一个背光控制线来控制TFTLCD的背光。所以,我们总共需要的IO口数目为21个。这里还需要注意,我们标注的DB1~DB8,DB10~DB17,是相对于LCD控制IC标注的,实际上大家可以把他们就等同于D0~D15,这样理解起来就比较简单一点。

TFTLCD显示需要的相关设置步骤如下: 1)设置STM32与TFTLCD模块相连接的IO。

这一步,先将我们与TFTLCD模块相连的IO口进行初始化,以便驱动LCD。这里我们用到的是FSMC,FSMC将在18.1.2节向大家详细介绍。

2)初始化TFTLCD模块。

其实这里就是上和上面OLED模块的初始化过程差不多。通过向TFTLCD写入一系列的设置,来启动TFTLCD的显示。为后续显示字符和数字做准备。

3) 通过函数将字符和数字显示到TFTLCD模块上。

2.3 模块功能实现

2.3.1 SD卡模块指令

SD卡的命令格式,如表2.2所示: 字节1 7 0

6 1

字节2--5 5 0 command

31 0 命令参数

字节6 7 1 CRC

0 1

表2.2 SD卡命令格式

SD卡的指令由6个字节组成,字节1的最高2位固定为01,低6位为命令号(比如CMD16,为10000即16进制的0X10,完整的CMD16,第一个字节为01010000,即0X10+0X40)。

15

数字FM电台设计开发

字节2~5为命令参数,有些命令是没有参数的。 字节6的高七位为CRC值,最低位恒定为1。

SD卡的命令总共有12类,分为Class0~Class11,下面几个比较重要的命令,如表2.3所示:

命令 参数 CMD0(0X00) NONE

CMD8(0X08) VHS+Check pattern CMD9(0X09) NONE CMD10(0X0A) NONE CMD16(0X10) 块大小 CMD17(0X11) 地址 CMD24(0X18) 地址 CMD41(0X29) NONE CMD55(0X37) NONE CMD58(0X3A) NONE

回应 R1 R7 R1 R1 R1 R1 R1 R3 R1 R3

描述 复位SD卡

发送接口状态命令 读取卡特定数据寄存器 读取卡标志数据寄存器 设置块大小(字节数) 读取一个块的数据 写入一个块的数据

发送给主机容量支持信息和激活 卡初始化过程 告诉SD卡,下一个是特定应用命令 读取OCR寄存器

表 2.3 SD卡部分命令

上表中,大部分的命令是初始化的时候用的。表中的R1、R3和R7等是SD卡的回应,SD卡和单片机的通信采用发送应答机制,如图2.7所示:

图2.7 SD卡命令传输过程

每发送一个命令,SD卡都会给出一个应答,以告知主机该命令的执行情况,或者返回主机需要获取的数据。SPI模式下,SD卡针对不同的命令,应答可以使R1~R7,R1的应答,各位描述如表2.4所示:

7

6

5

R1响应格式 4 3

2

1

0

含义 开始位 参数 地址 擦除序列 CRC非法 擦除 闲置

始终为0 错误 错误 错误 错误 命令 复位 状态

表2.4 R1响应各位描述

2.3.2 TFTLCD模块控制

16