基于STM32的语音导览系统的设计
3主要功能软件设计
3.1软件初始化
3.1.1外设时钟的使能
本设计中涉及的外设时钟可以通过APB2外设时钟使能寄存器来使能。当外设时钟没有启用时,软件无法读出外设寄存器的值,返回的数值始终为0.设计中用到的PA口、PB口、PD口的时钟分别通过APB2ENR寄存器的第2、3、5位来设置,SPI1的时钟通过APB2ENR的第12位来设置。
3.1.2 I/O口的初始化
本设计涉及的I/O口包括:用于控制片选扩展的PA.3、PB.0口,需设置成开端输出模式;用于实现按键控制的PA.15(录音键)、PA.0(强制停止键)等需设置为上拉输入模式;用于实现SPI通信的PA.5、PA.6、PA.7口,它们分别对应SPI1的SCK、MISO、MOSI口,应由软件设置这三个口为复用I/O口即第二功能;用于检测放音结束时语音芯片INT端低电平输出的PA.8和PD.2设置为上拉输入模式。
3.1.3外部中断的初始化
外部中断初始化中主要完成的工作是设置I/O口与中断线的对应关系、开启与该I/O口对应的线上中断/事件以及设置中断的触发条件、配置中断分组并使能中断。本设计中,将强制停止键连接到的PA.0口对应的中断触发条件设置为上升沿触发,对应的中断优先级最高;其余按键连接的I/O口对应的中断触发条件都设置为下降沿触发。把所有的中断都分配到第二组,把所有按键的次优先级设置成一样,而抢占优先级不同。其中,几个放音键连接的I/O口对应的中断共用一个中断服务程序,也就是多个中断线上的中断共用一个中断服务函数,在该中断服务程序里先对进入中断的信号进行区分(通过中断输入I/O口上的电平判断),再分别处理。
3.1.4 SPI模块的初始化
本设计中,通过对CR1寄存器的设置,将SPI1模块设置成全双工模式、软件NSS管理、主机模式、8 b MSB数据格式,并且把SPI1的波特率设置成了最低(281.25 kHz,为系统时钟的256分频),其中最重要的是SPI模块输出串行同步时钟极性和相位的配置,SPI主模块和与之通信的外设备时钟相位和极性应该一致。最后,发送0xff启动传输。
根据ISD4004不同相位下的SPI总线传输时序和SPI操作时序关系,要想实现STM32和ISD4004之间的SPI通信,须将其控制位CPHA和CPOL都设置为1.
3.2 SPI控制功能软件实现
3.2.1 SPI1读写字节函数
在读数据时,接收到的数据被存放在一个内部的接收缓冲器中;在写数据时,在被发送之前,数据将首先被存放在一个内部的发送缓冲器中。对SPI_DR寄存器的读操作,将返回接收缓冲器的内容;写入SPI_DR寄存器的数据将被写入发送缓冲器中。
SPI_SR是16位状态寄存器,它的最低位为RXNE,该位为0则接收缓冲为空,为1则接收缓冲非空;SPI_SR的次低位为TXE,该位为0说明发送缓冲非空,为1则发送缓冲为空。不断地查询发送/接收缓冲区是否为空,进而实现数据的有序发送和接收。
3.2.2发送指令函数
首先,语音芯片ISD4004有如下操作规则:
(1)串行外设接口,SPI协议设定微控制器的SPI移位寄存器在SCLK下降沿动作,在时钟上升沿锁存MOSI引脚数据,在下降沿将数据送至MISO引脚。
(2)上电顺序,器件延时TPUD(8 kHz采样时,约为25 ms)后才能开始操作。因此,用户发完上电指令后,必须等待TPUD,才能发出下一条操作指令。
例如,从00处放音,应遵循如下时序:
①发POWER UP命令;
②等待TPUD(上电延时);
③发地址值为00的SET PLAY命令;
④发PLAY命令。
器件会从00地址开始放音,当出现EOM时,立即中断,停止放音。
如果从00处录音,则按以下时序:
①发POWER UP指令;
②等待TPUD(上电延时);
③发POWER UP命令;
④等待2倍TPUD;
⑤发地址值为00的SET REC命令;
⑥发REC命令。
器件便从00地址开始录音,一直到出现OVF(存储器末尾)时,录音停止。
3.3中断服务程序
录音中断服务程序流程如图5所示。它实现的功能是在一次长按录音键时,将一个景点的语音信息录入ISD4004中以预先设定的起始地址存储空间中,松开录音键后,本景点语音内容录音停止。每个景点的导览语音存储的位置,以其起始地址为标示。起始地址的安排根据每段语音的长度决定。每个景点语音录音时需保持录音按键锁下不松开,直至本段景点语音录音结束。
景点语音播放中断服务程序流程如图6所示。系统在获得RFID读卡器的中断申请之后,根据读卡器接口协议,MCU经SPI2接口接收到读卡器传来的数据信息,分析出RFID所含的ID信息内容,并根据ID所对应的景点位置,即原设置的景点语音首地址,将此首地址发送到ISD4004芯片组,并发送放音命令,即可实现对应景点事先录制好的导览语音自动播放。开始播放语音信息期间,ISD4004的I-N-T-端连接到了STM32的I/O口上,不断查询它的状态。当这段语音信息放完时,语音芯片ISD4004的I-N-T-端会置低,由此发送停止播放指令,则实现播音结束,并等待下一个RFID信息的输入和读卡器中断申请。
语音导览 SPI通信 STMFRBT STM32 相关文章:
- STM8 SPI 例程 通信出错(11-10)
- STM32学习笔记:在IAR中建立FWlib 3.0项目(08-13)
- 基于STM32单片机的火控系统信号采集测试(11-14)
- 基于LabVIEW的STM32调试平台设计(11-17)
- 基于STM32的LF RFID识别系统设计(11-25)
- STM32中断与嵌套NVIC快速入门(01-25)