找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8040|回复: 8
收起左侧

基于stm32 DIY的网络收音机 播放mp3(DM9000A+PCM1770源码+电路)带触摸屏

  [复制链接]
ID:221028 发表于 2019-1-4 15:50 | 显示全部楼层 |阅读模式
使用STM32F103ZE芯片,通过DM9000AEP把互联网上的网络音频流(支持shoutcast、http mp3流)抓取下来,先在板子上外扩的SRAM上缓存。然后在STM32F103ZE上通过mp3软件解码器解码变成PCM音频,通过DMA方式送到PCM1770进行回放;

它也可以流畅播放SD卡上的mp3、wav格式文件。(支持大于4G的SD卡);

通过3.2寸240*320的TFT触摸屏、五向按键、红外遥控器进行控制;

红外遥控器具备自学习功能;

系统信息显示;

LCD背光、音量可调,触摸灵敏度可随时校准;

编译说明:编译时报 关于‘;’的error时,请直接注释掉错误所在行即可

需要将resource文件夹放到tf卡根目录,方可正常工作
Fl9_hzABCX7veqkXJl5HIwVy6TyV.jpg Foj6jPv07bWYqjNnV3hOvF3coiPT.png

电路原理图如下:
0.jpg

单片机源程序如下:
  1. /**********************************************************************************************************
  2. *                                      
  3. *    模块名称 : da驱动模块
  4. *    文件名称 : pcm1770.c
  5. *    版    本 : V1.0
  6. *    说    明 : 通过iis接口驱动da芯片
  7. *
  8. **********************************************************************************************************/
  9. #include "stm32f10x.h"
  10. #include "codec.h"
  11. #include <rtthread.h>

  12. #define PCM_PD              // (1 <<  14)//PB14       PD口接到主ic reset脚
  13. #define PCM_PD_SET_L        //GPIOB->ODR&=~(PCM_PD)     //GPIOB->ODR = (GPIOB->ODR & ~PCM_PD) | (x ? PCM_PD : 0);   
  14. #define PCM_PD_SET_H        //GPIOB->ODR|=(PCM_PD)

  15. #define PCM_CS               (1 <<  3)//PC3
  16. #define PCM_CS_SET_L         GPIOC->ODR&=~(PCM_CS)      //GPIOB->ODR = (GPIOB->ODR & ~PCM_CS) | (x ? PCM_CS : 0);   
  17. #define PCM_CS_SET_H         GPIOC->ODR|=(PCM_CS)

  18.    
  19. #define PCM_CLK              (1 <<  4)//PC4
  20. #define PCM_CLK_SET_L        GPIOC->ODR&=~(PCM_CLK)    //     GPIOB->ODR = (GPIOB->ODR & ~PCM_CLK) | (x ? PCM_CLK : 0);   
  21. #define PCM_CLK_SET_H         GPIOC->ODR|=(PCM_CLK)

  22. #define PCM_DAT               (1 <<  5)//PC5
  23. #define PCM_DAT_SET_L         GPIOC->ODR&=~(PCM_DAT)    //GPIOB->ODR = (GPIOB->ODR & ~PCM_DAT) | (x ? PCM_DAT : 0);   
  24. #define PCM_DAT_SET_H          GPIOC->ODR|=(PCM_DAT)


  25. vu8 s_Volume;//音量大小




  26. /**
  27.   * @brief  Delay
  28.   * @param  Delay Num
  29.   * @retval None
  30.   */

  31. void Delay(u32 Num)
  32. {
  33.     vu32 Count = Num*2;//*4;
  34.    
  35.     while (--Count);   
  36. }

  37. /**
  38.   * @brief  PCM1770 Init
  39.   * @param  None
  40.   * @retval None
  41.   */
  42. void PCM1770Init(void)
  43. {
  44.     GPIO_InitTypeDef GPIO_InitStructure;
  45.     //使能控制信号的时钟
  46.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

  47.       GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
  48.       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  49.       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
  50.       GPIO_Init(GPIOC, &GPIO_InitStructure);
  51.    
  52.       //硬件复位一下
  53.       PCM_PD_SET_L;
  54.     Delay(500);//
  55.     PCM_PD_SET_H;      
  56.      Delay(10);    //
  57.   
  58.        PCM_CS_SET_H ;
  59.       PCM_CLK_SET_H;
  60.       PCM_DAT_SET_H;     
  61.     Delay(6);    //
  62.    
  63.       PCM_WriteData(0x03, 0x84);     //256fs IIS格式  stm32的iis mclk规定为256fs ( 84= 16 right)     
  64.      PCM_WriteData(0x04, 0x00);     //         
  65.     //PCM1770_VolumeSet(50);
  66. }
  67. /**
  68.   * @brief  
  69.   * @param  Reg Index, Data
  70.   * @retval None
  71.   */
  72.   
  73. void PCM_WriteData(const u8 Reg, const u8 Data)
  74. {
  75.     vu16 TrasferData, i;
  76.    
  77.     TrasferData = Data;
  78.     TrasferData |= (Reg<<8)&0xff00;

  79.     PCM_CS_SET_L;//select
  80.     Delay(5);
  81.     for (i = 0; i < 16; i++)
  82.     {//传输时MSB first
  83.         PCM_CLK_SET_L;
  84.         
  85.         if (TrasferData&(0x8000>>i))
  86.         {
  87.              PCM_DAT_SET_H;   
  88.         }
  89.         else
  90.         {
  91.              PCM_DAT_SET_L;   
  92.         }
  93.         Delay(5);//等数据稳定
  94.         PCM_CLK_SET_H;    //上升沿写入
  95.         Delay(5);//等待从机读数据        
  96.     }        
  97.     PCM_CLK_SET_H;
  98.       PCM_DAT_SET_H;   

  99.     PCM_CS_SET_H;//relase
  100.     Delay(5);
  101. }
  102.   

  103.   
  104. /**
  105.   * @brief  Volume_Add
  106.   * @param  None
  107.   * @retval None
  108.   */
  109. void PCM1770_VolumeSet(vu8 vol)
  110. {
  111.         s_Volume = vol*63/100;
  112.           PCM_WriteData(0x01, s_Volume);
  113.           PCM_WriteData(0x02, s_Volume);        
  114.    
  115.         //rt_kprintf("Volume = %d\n\r", s_Volume);
  116. }

  117. u8  GetPCM1770_Volume(void)
  118. {
  119.         return  s_Volume*100/63;
  120. }

  121. void PCM1770_Mute(void)
  122. {
  123.           PCM_WriteData(0x01, 0xc0);//
  124.            PCM_WriteData(0x02, 0x00);//   
  125. }




  126. /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
复制代码
0.png

所有资料51hei提供下载:
原理图.zip (259.68 KB, 下载次数: 138)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:104477 发表于 2019-1-4 21:28 来自手机 | 显示全部楼层
这成本好高
回复

使用道具 举报

ID:499661 发表于 2019-7-18 14:45 | 显示全部楼层
好东西呀
回复

使用道具 举报

ID:611151 发表于 2019-10-20 22:17 | 显示全部楼层
挺不错的!!支持了!!
回复

使用道具 举报

ID:447180 发表于 2019-11-8 12:37 | 显示全部楼层
这个太牛了  支持
回复

使用道具 举报

ID:71437 发表于 2020-6-17 23:26 | 显示全部楼层
感谢分享!
回复

使用道具 举报

ID:640240 发表于 2020-6-27 00:18 来自手机 | 显示全部楼层
支持好东西
回复

使用道具 举报

ID:628703 发表于 2020-7-1 23:39 | 显示全部楼层
好东西,非常感谢!
回复

使用道具 举报

ID:98875 发表于 2020-11-30 11:59 | 显示全部楼层
能连接互联网或者wifi就好了!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表