回答

收藏

[评测分享] 【NXP OKdo E1双核Cortex M33开发板】测评+ MP3语音模块控制(兼...

#板卡评测 #板卡评测 2203 人阅读 | 0 人回复 | 2020-11-30

日子过的飞快,眨眼间测评期就要结束了,收获还是满多的,从零积累到多种功能配置的灵活使用。
本次介绍的是使用串口来控制MP3播放模块,以选取歌曲的播放内容,其硬件构成包括:
1.双色OLED屏,以显示歌曲名称等;
2.MP3播放模块,及朋友送的T卡以存放MP3音乐;
3.扬声器以产生音箱效果;
4. NXP OKdo E1开发板,及其板载的小按键以选择播放内容;
5.USB接口来提供电源支持。
1  硬件构成

由于MP3播放模块的控制要用到串口,故先对串口的通讯功能进行了测试及功能修改。
在测试过程中,所用的串口为USART2,占用的引脚为PIO0_27PIO1_24,见图2所示。
2  USART2的引脚占用

经程序的修改及测试,串口能以字节的方式来发送MP3播放模块的控制指令,见图3所示。
有了串口的控制功能,设计的目标就基本实现了一半,接上MP3播放模块就已经能听音乐了!
3  发送MP3控制指令

下面就该MP3播放模块上场了,该模块的引脚分别如图4所示。
图4  MP3 播放模块引脚图

其中,SPK_1和SPK_2连接扬声器,VCC和GND连接电源,RX和TX则交换连接串口的USART2
MP3播放模块的指令集比较小,故可以将其存放在数组中以便调用。
其形式为:
uint8_tcmd[10]  = {0X7E, 0xFF, 0x06, 0X0D, 0x00,0x00, 0x00, 0xFE, 0xEE, 0XEF};  //play
uint8_tcmd3[10] = {0x7E, 0xFF, 0x06, 0x03, 0x00, 0x00, 0x01, 0xFE, 0xF7, 0XEF};   //*play index
uint8_tcmd6[10] = {0X7E, 0xFF, 0x06, 0X06, 0x00, 0x00, 0x10, 0xFE, 0xE5, 0XEF};   //*set Volume
指令测试的主程序为:
  1. int main(void)
  2. {
  3. POWER_SetBodVbatLevel(kPOWER_BodVbatLevel1650mv, kPOWER_BodHystLevel50mv, false);
  4. BOARD_BootClockFROHF96M();
  5. CLOCK_EnableClock(kCLOCK_Iocon);
  6. //FC2_RXD  PIO1_24
  7. IOCON->PIO[1][24] = (IOCON_FUNC1 | IOCON_MODE_INACT  | IOCON_DIGITAL_EN );
  8. //FC2_TXD  PIO0_27
  9. IOCON->PIO[0][27] = (IOCON_FUNC1 | IOCON_MODE_INACT  | IOCON_DIGITAL_EN );
  10. CLOCK_DisableClock(kCLOCK_Iocon);
  11. usart_config_t      s_UARTConfig;
  12. CLOCK_AttachClk(kFRO12M_to_FLEXCOMM2);
  13. USART_GetDefaultConfig(&s_UARTConfig);
  14. s_UARTConfig.baudRate_Bps = 9600;
  15. s_UARTConfig.enableTx = true;
  16. s_UARTConfig.enableRx = false;
  17. USART_Init(USART2, &s_UARTConfig, 12000000);
  18. USART_WriteBlocking(USART2, g_WelcomeBuffer, strlen((const char *)g_WelcomeBuffer));
  19. USART_WriteBlocking(USART2, cmd, 10);
  20. while (1)
  21. {
  22. }
  23. }
复制代码

实现了播放功能后,我们还要为它配上中文的歌单选择界面,并由OLED屏来显示,其效果如图5所示。
图5  歌曲播放及选择界面

在板载按键的配合下,歌单的处理程序如下:
  1. while (1)
  2. {
  3. if(key_read()== KEY3_NUM)  // WAKE
  4. {                                          
  5. while(key_read()== KEY3_NUM);
  6. num++;
  7. if(num >= 6) num=0;
  8. }
  9. if(key_read()== KEY1_NUM)  // USER
  10. {
  11. while(key_read()== KEY1_NUM);
  12. if(num >0) num--;
  13. }
  14. if(key_read()== KEY2_NUM)  // ISP
  15. {
  16. playn(num); //play index
  17. USART_WriteBlocking(USART2, cmd3, 10);
  18. }
  19. }
  20. OLED_ShowNum(0,4,num,1,16);
  21. if(num== 0)
  22. {
  23. OLED_ShowString(24,4,"        ",16);
  24. OLED_ShowCHinese(24,4,0);
  25. OLED_ShowCHinese(40,4,1);
  26. }
  27. if(num== 1)
  28. {
  29. OLED_ShowString(24,4,"        ",16);
  30. OLED_ShowCHinese(24,4,2);
  31. OLED_ShowCHinese(40,4,3);
  32. }
  33. if(num== 2)
  34. {
  35. OLED_ShowCHinese(24,4,4);
  36. OLED_ShowCHinese(40,4,5);
  37. OLED_ShowCHinese(56,4,6);
  38. }
  39. 。。。
  40. SysTick_DelayTicks(200U);
  41. }
复制代码
在按键的功能分配上,其功能划分为:
WAKE键:向下选取歌曲;
USER键:向上选取歌曲;
ISP键: 控制歌曲的播放
此外,若使用I/O来读取MP3的运行状态,还能对MP3的播放音量加以调节。

尽管试用有期限,但对NXP OKdo E1发板的探索之路还会继续,在此再次对活动的组织者及开发板的资助方表示感谢,并祝大家事业兴旺发达!

分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条