指令 校验_mm32芯片使用心得(四)通过指令控制播放声音

在音频程序移植成功之后,由芯片控制的声音播放器就可以播放声音了,接下来的主要工作就是将整个音频程序写到外部的芯片单中去,由于没有专用的闪存擦写器,只能通过程序利用SPI通信方式进行读写。每页256个字节,一次擦写4096个字节。这就是麻烦一些,通过编辑器分行的形式,每次算出来4096个字节写入即可。在程序中本身就可以通过一串指令来操作,比如说播放、写入等等。

5692a99cffa8921f4053fdd1923f66e9.png

接下来先利用串口对其进行操作,直接利用串口发送相对应的指令即可,对于播放的指令很是简单,a0为开始标志05格式为播放声音,num 为第几段声音,vol为音量的大小,0xff预留,0b为结束标志。但是写相对麻烦一些,需要先下发指令开始写入,然后写入数据,再停止写入数据。只是要注意到从哪开始写,并且写入之后怎样在播放出来。

9b089c5bec2ff81ad5e206b8fe51bf87.png

上图即为开始写入的地址。

9877c36e985ebfefa58225fdc5348dd3.png

上图中为读出的地址。校验位此时可以利用程序计算出来,接入EFM32后可以利用EFM32的程序进行计算,然后再与MM32中的校验位作对比,保证整个程序的正确性。

下一步就接入EFM32芯片,让其控制MM32芯片进行播放声音。只是EFM32芯片类型众多,从例程EFM32TG的程序写入到EFM32GG的芯片当中,本以为芯片寄存器大致相同,但是发现下面图中的UART传输一直调不通。

f192ea35f975634233bcf33f3ae72a21.png

这样只能将system_efm32tg单中的程序全都换掉更换为system_efm32gg,在进行编译发现程序可以执行。并将对应的指令通过UART传到串口当中去,这需要将字符型转换为16进制,毕竟指令是一串,而传输时还是16进制。可以直接通过sscanf(pcString+i*2,"%02x",b+i);将字符类型直接转换为16进制进行传输。通过串口助手发现,其16进制可以进行输出。接入到MM32芯片,发现也可以播放声音。

160cf622cb01cce09c43a8457d369dad.png

接着就利用EFM32的按键进行切换音频。EFM32芯片是一个低功耗芯片,在他不执行指令时,会执行低功耗段代码。它的按键与传统的STM32芯片不相同,只有奇数和偶数状态,有时开发板上的按键并不好用,那么可以直接使用外在引脚来模拟按键,可以初始化一个引脚作为按键,然后通过杜邦线连接GND或者是VCC,进行触发,来模拟整个按键的运行,这样就可以对声音程序进行切换。接下来就是通过其他的模块进一步来扩充其功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值