芯源半导体CW32
直播中

jennyzhaojie

2年用户 67经验值
擅长:测量仪表 嵌入式技术 模拟技术 处理器/DSP 控制/MCU
私信 关注
[经验]

【CW32饭盒派开发板试用体验】+串行通信与MP3播放控制

CW32饭盒派提供了多个串行接口,提供串口可进行数据的交互和串口设备的控制,这里是利用串口来控制MP3播放模块,从而使饭盒派能轻松地实现音乐播放功能。

为了控制MP3模块,所用的串行接口为J8,见图1所示,这里只用引脚PA9来发送控制指令。

1.串行通讯
image.png

图1 串行接口

为发送控制指令,是讲指令放置在数组中,其格式为:

unsigned char
cmd[10] = {0X7E, 0xFF, 0x06, 0X06, 0x00, 0x00, 0x10, 0xFE, 0xE5, 0XEF};

验证指令发送的主程序为:

int32_t main(void)
{ 
RCC_Configuration(); 
GPIO_Configuration(); 
UART_Configuration();
USART_SendBuf_Polling(DEBUG_USARTx,cmd, 10);
while(1);
}

经下载,其运行结果如图1所示,说明程序正确。
image.png

图1 运行结果

2.界面设计
为了便于MP3模块的播放控制,可利用开发板所配置的TFT屏来显示播放菜单,其形式如图2所示。
image.png

图2 播放菜单

image.png

图3 提取字模

该字库的存储结构如下:

#define hz16_num
100

const struct typFNT_GB162 hz16[] = {

#if
USE_ONCHIP_FLASH_FONT

"鸿",0x00,0x10,0x80,0x20,0x40,0x7C,0x1F,0x44,0x84,0x64,0x44,0x54,0x44,0x44,0x04,0x4C,0x24,0x40,0x44,0x7E,0xC4,0x02,0x47,0x02,0x5C,0x7A,0x48,0x02,0x40,0x0A,0x00,0x04,/"鸿",0/

"雁",0x00,0x00,0x3F,0xFE,0x20,0x00,0x22,0x50,0x22,0x48,0x24,0xFE,0x24,0x90,0x2D,0x90,0x36,0xFE,0x24,0x90,0x24,0x90,0x24,0xFE,0x24,0x90,0x44,0x90,0x44,0xFE,0x84,0x80,/"雁",1/

...

"℃",0x60,0x00,0x91,0xF4,0x96,0x0C,0x6C,0x04,0x08,0x04,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x08,0x00,0x0C,0x04,0x06,0x08,0x01,0xF0,0x00,0x00,/"℃",0/

"%",0x00,0x00,0x00,0x44,0xA4,0xA8,0xA8,0xB0,0x54,0x1A,0x2A,0x2A,0x4A,0x44,0x00,0x00,/"%",0/

#endif

0x00,

};

显示播放菜单的主程序为:

int32_t main(void)
{
  RCC_Configuration();
  GPIO_Configuration();
  UART_Configuration();
  setVolume(18);
  USART_SendBuf_Polling(DEBUG_USARTx, cmd6,10);
  LED();
  key();
  Lcd_Init();
  Lcd_Clear(RED);
  Gui_DrawFont_GBK16(10,3,YELLOW,RED,"MP3 音乐播放器");
  Gui_DrawLine(0, 22,139, 22,WHITE);  
  Gui_DrawFont_GBK16(10,32,WHITE,RED,"1--鸿雁");
  Gui_DrawFont_GBK16(10,52,WHITE,RED,"2--光阴的故事");
  Gui_DrawFont_GBK16(10,72,WHITE,RED,"3--风吹麦浪");
  Gui_DrawFont_GBK16(10,92,WHITE,RED,"4--贝加尔湖畔");
  Gui_DrawFont_GBK16(10,112,WHITE,RED,"5--传奇");
  Gui_DrawFont_GBK16(10,132,WHITE,RED,"6--走过咖啡屋");
  n=0;
  while(1)
  {          
         menu_cotrl();
  }
}

3.按键控制
在播放控制方面,可利用开发板上的3个按键,其中K1用于选择选择下一首,K2用于选择选择上一首,K3用于确认播放。
image.png

图4 按键电路

实现按键处理的函数为:

void menu_cotrl(void)
{   
    if(GPIO_ReadPin(CW_GPIOB, PIO_PIN_13)==GPIO_Pin_RESET)
    {        
             if(n>0) Gui_DrawFont_GBK16(18,12+n*20,WHITE,RED,"--");
             n=n+1;        
             if(n>6) n=1;
             while(GPIO_ReadPin(CW_GPIOB,GPIO_PIN_13)==GPIO_Pin_RESET);
             Gui_DrawFont_GBK16(18,12+n*20,BLUE,RED,"--");
    }   
    if(GPIO_ReadPin(CW_GPIOB, PIO_PIN_14)==GPIO_Pin_RESET)
    {        
              if(n<6) Gui_DrawFont_GBK16(18,12+n*20,WHITE,RED,"--");
              else
Gui_DrawFont_GBK16(18,12+n*20,WHITE,RED,"--");
               if(n>1) n=n-1;        
               else n=6;          
               while(GPIO_ReadPin(CW_GPIOB, GPIO_PIN_14)==GPIO_Pin_RESET);        
               Gui_DrawFont_GBK16(18,12+n*20,BLUE,RED,"--");  
    }
    if(GPIO_ReadPin(CW_GPIOB,
GPIO_PIN_15)==GPIO_Pin_RESET)
    {        
                while(GPIO_ReadPin(CW_GPIOB, GPIO_PIN_15)==GPIO_Pin_RESET);
                playn(n);        
                USART_SendBuf_Polling(DEBUG_USARTx, cmd3, 10);
    }
}

image.png

图5控制效果

注:蓝色横线表示当前的播放选择

4.MP3播放控制
MP3播放模块是一款可通过串行通讯来控制的功能模块,它将MP3格式的音乐文件存放在TF卡中,并通过模块上的卡槽来连接,该模块的引脚排列如图6所示,其中RX引脚接开发板的PA9来接收指令,SPK_1和SPK_2则用于连接扬声器,VCC和GND用于连接5V电源,其他的引脚则可以不用。

image.png

图6引脚排列

用于该模块的通讯波特率是固定的,以此要将串口通讯的波特率设为9600bps,可用如下语句来定义:

#define DEBUG_USART_BaudRate 9600

播放指令被存放在数组中,其格式如下:

unsigned char
cmd[10] = {0X7E, 0xFF, 0x06, 0X03, 0x00, 0x00, 0x01, 0xFE, 0xF7, 0XEF};

其中,数组中的第6和第7元素是指定的歌曲编号,最后一个元素为校验码。

这样,就在饭盒派的基础上实现了中文菜单下的MP3音乐播放控制。

更多回帖

发帖
×
20
完善资料,
赚取积分