|
使用STM32F103ZE芯片,通過(guò)DM9000AEP把互聯(lián)網(wǎng)上的網(wǎng)絡(luò)音頻流(支持shoutcast、http mp3流)抓取下來(lái),先在板子上外擴(kuò)的SRAM上緩存。然后在STM32F103ZE上通過(guò)mp3軟件解碼器解碼變成PCM音頻,通過(guò)DMA方式送到PCM1770進(jìn)行回放;
它也可以流暢播放SD卡上的mp3、wav格式文件。(支持大于4G的SD卡);
通過(guò)3.2寸240*320的TFT觸摸屏、五向按鍵、紅外遙控器進(jìn)行控制;
紅外遙控器具備自學(xué)習(xí)功能;
系統(tǒng)信息顯示;
LCD背光、音量可調(diào),觸摸靈敏度可隨時(shí)校準(zhǔn);
編譯說(shuō)明:編譯時(shí)報(bào) 關(guān)于‘;’的error時(shí),請(qǐng)直接注釋掉錯(cuò)誤所在行即可
需要將resource文件夾放到tf卡根目錄,方可正常工作
電路原理圖如下:
單片機(jī)源程序如下:
- /**********************************************************************************************************
- *
- * 模塊名稱 : da驅(qū)動(dòng)模塊
- * 文件名稱 : pcm1770.c
- * 版 本 : V1.0
- * 說(shuō) 明 : 通過(guò)iis接口驅(qū)動(dòng)da芯片
- *
- **********************************************************************************************************/
- #include "stm32f10x.h"
- #include "codec.h"
- #include <rtthread.h>
- #define PCM_PD // (1 << 14)//PB14 PD口接到主ic reset腳
- #define PCM_PD_SET_L //GPIOB->ODR&=~(PCM_PD) //GPIOB->ODR = (GPIOB->ODR & ~PCM_PD) | (x ? PCM_PD : 0);
- #define PCM_PD_SET_H //GPIOB->ODR|=(PCM_PD)
- #define PCM_CS (1 << 3)//PC3
- #define PCM_CS_SET_L GPIOC->ODR&=~(PCM_CS) //GPIOB->ODR = (GPIOB->ODR & ~PCM_CS) | (x ? PCM_CS : 0);
- #define PCM_CS_SET_H GPIOC->ODR|=(PCM_CS)
-
- #define PCM_CLK (1 << 4)//PC4
- #define PCM_CLK_SET_L GPIOC->ODR&=~(PCM_CLK) // GPIOB->ODR = (GPIOB->ODR & ~PCM_CLK) | (x ? PCM_CLK : 0);
- #define PCM_CLK_SET_H GPIOC->ODR|=(PCM_CLK)
- #define PCM_DAT (1 << 5)//PC5
- #define PCM_DAT_SET_L GPIOC->ODR&=~(PCM_DAT) //GPIOB->ODR = (GPIOB->ODR & ~PCM_DAT) | (x ? PCM_DAT : 0);
- #define PCM_DAT_SET_H GPIOC->ODR|=(PCM_DAT)
- vu8 s_Volume;//音量大小
- /**
- * @brief Delay
- * @param Delay Num
- * @retval None
- */
- void Delay(u32 Num)
- {
- vu32 Count = Num*2;//*4;
-
- while (--Count);
- }
- /**
- * @brief PCM1770 Init
- * @param None
- * @retval None
- */
- void PCM1770Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- //使能控制信號(hào)的時(shí)鐘
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
- GPIO_Init(GPIOC, &GPIO_InitStructure);
-
- //硬件復(fù)位一下
- PCM_PD_SET_L;
- Delay(500);//
- PCM_PD_SET_H;
- Delay(10); //
-
- PCM_CS_SET_H ;
- PCM_CLK_SET_H;
- PCM_DAT_SET_H;
- Delay(6); //
-
- PCM_WriteData(0x03, 0x84); //256fs IIS格式 stm32的iis mclk規(guī)定為256fs ( 84= 16 right)
- PCM_WriteData(0x04, 0x00); //
- //PCM1770_VolumeSet(50);
- }
- /**
- * @brief
- * @param Reg Index, Data
- * @retval None
- */
-
- void PCM_WriteData(const u8 Reg, const u8 Data)
- {
- vu16 TrasferData, i;
-
- TrasferData = Data;
- TrasferData |= (Reg<<8)&0xff00;
- PCM_CS_SET_L;//select
- Delay(5);
- for (i = 0; i < 16; i++)
- {//傳輸時(shí)MSB first
- PCM_CLK_SET_L;
-
- if (TrasferData&(0x8000>>i))
- {
- PCM_DAT_SET_H;
- }
- else
- {
- PCM_DAT_SET_L;
- }
- Delay(5);//等數(shù)據(jù)穩(wěn)定
- PCM_CLK_SET_H; //上升沿寫入
- Delay(5);//等待從機(jī)讀數(shù)據(jù)
- }
- PCM_CLK_SET_H;
- PCM_DAT_SET_H;
- PCM_CS_SET_H;//relase
- Delay(5);
- }
-
-
- /**
- * @brief Volume_Add
- * @param None
- * @retval None
- */
- void PCM1770_VolumeSet(vu8 vol)
- {
- s_Volume = vol*63/100;
- PCM_WriteData(0x01, s_Volume);
- PCM_WriteData(0x02, s_Volume);
-
- //rt_kprintf("Volume = %d\n\r", s_Volume);
- }
- u8 GetPCM1770_Volume(void)
- {
- return s_Volume*100/63;
- }
- void PCM1770_Mute(void)
- {
- PCM_WriteData(0x01, 0xc0);//
- PCM_WriteData(0x02, 0x00);//
- }
- /******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
復(fù)制代碼
所有資料51hei提供下載:
原理圖.zip
(259.68 KB, 下載次數(shù): 138)
2019-1-4 15:49 上傳
點(diǎn)擊文件名下載附件
stm32radiov1.3源代碼.7z
(4.28 MB, 下載次數(shù): 144)
2019-1-4 16:22 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|