国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 9747|回復(fù): 5
打印 上一主題 下一主題

[提問] STM32+VS1003b+M25P64(SPI FLASH)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2012-8-1 17:30:01 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
5積分
各位大俠,我用STM32F103+VS1003b+M25P64做的音樂播放器,現(xiàn)在遇到瓶頸,苦惱調(diào)了幾天沒得結(jié)果,郁悶+不甘心啊~~
正弦測試,RAM測試都通過了,但是音樂文件從SPI的FLASH讀出后,經(jīng)STM32緩沖,發(fā)給VS1003B解碼,可是沒有聲音輸出。
小弟是這么做的,將WAV格式的文件保存為.bin文件,然后通過串口將.bin文件發(fā)送到FLASH中,再從FLASH讀出,判斷DREQ的高低情況,為低則發(fā)送32B數(shù)據(jù),為高等待~,這樣做其中有問題么?請問需要先發(fā)WAV的幀頭給VS1003么?請問為啥總是沒得音頻輸出啊~~,我正弦測試和RAM測試都過得,感覺問題很簡單,但找不出來了,特向大俠們求幫助!@@小弟先謝過,
int main(void)
{
#ifdef DEBUG
  debug();
#endif
  /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/   
  /* RCC system reset(for debug purpose) */
  RCC_DeInit();
  /* Enable HSE */
  RCC_HSEConfig(RCC_HSE_ON);
  /* Wait till HSE is ready */
  HSEStartUpStatus = RCC_WaitForHSEStartUp();

  if(HSEStartUpStatus == SUCCESS)
  {
    /* Enable Prefetch Buffer */
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
    /* Flash 2 wait state */
    FLASH_SetLatency(FLASH_Latency_2);
   
    /* HCLK = SYSCLK */
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
  
    /* PCLK2 = HCLK */
    RCC_PCLK2Config(RCC_HCLK_Div1);

    /* PCLK1 = HCLK/2 */
    RCC_PCLK1Config(RCC_HCLK_Div2);

    /* PLLCLK = 8MHz * 9 = 72 MHz */
    RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

    /* Enable PLL */
    RCC_PLLCmd(ENABLE);

    /* Wait till PLL is ready */
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {
    }

    /* Select PLL as system clock source */
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    /* Wait till PLL is used as system clock source */
    while(RCC_GetSYSCLKSource() != 0x08)
    {
    }
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF | RCC_APB2Periph_GPIOG, ENABLE);
  }
     delay_init(72);
     NVIC_Configuration();
/*------------------- Resources Initialization -----------------------------*/
  /* Configure the systick */   
  SysTick_Config();
    /* Configure the GPIOs */
  /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
   
  /* Configure USART1 Rx (PA.10) as input floating */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
     SPI_FLASH_Init();
   USART_Configuration();

              GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
             GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
             GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
             GPIO_Init(GPIOF, &GPIO_InitStructure);
     /* Get SPI Flash ID */
    FLASH_ID = SPI_FLASH_ReadID();
    /* Check the SPI Flash ID */
    if(FLASH_ID == M25P64_FLASH_ID)
    {
    GPIO_SetBits(GPIOF, GPIO_Pin_0);
    Delay(20);          //*************5S
    GPIO_ResetBits(GPIOF, GPIO_Pin_0);
    Delay(20);           //*************5S
    GPIO_SetBits(GPIOF, GPIO_Pin_0);
    Delay(20);
    GPIO_ResetBits(GPIOF, GPIO_Pin_0);
    }
     else
         {
      GPIO_SetBits(GPIOF, GPIO_Pin_0);
         }
  
k=0;
    Vs1003_Init();
Mp3Reset();
    Vs1003SoftReset();
VS_XDCS_CLR();
z=Vs1003_REG_Read(SPI_MODE);
USART_SendData(USART1,z);
z=Vs1003_REG_Read(SPI_CLOCKF);
USART_SendData(USART1,z);
    z=Vs1003_REG_Read(SPI_AUDATA);
USART_SendData(USART1,z);

  while (1)
{   
  
while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00); //等待DREQ為高
SPI2_ReadWriteByte(i);
USART_SendData(USART1,i);
}
  
}


VS驅(qū)動(dòng):
#include "stm32f10x_lib.h"
#include "includes.h"
#include "spec_rew.h"         
//VS1003的全功能函數(shù)
//支持SIN測試和RAM測試
//并加入了VS1003的頻譜顯示代碼,不過說實(shí)話不咋地,還不如自己寫的頻譜分析,懷疑是不是真實(shí)的頻譜變換?  
//正點(diǎn)原子@SCUT
//V1.1
#define SPI2_SPEED_2   0
#define SPI2_SPEED_8   1
#define SPI2_SPEED_16  2
#define SPI2_SPEED_256 3 //281K
/* Select SPI FLASH: ChipSelect pin low  */
#define VS_XCS_SET() GPIOB->ODR|=(1<<12)                  //片選信號        PE12
#define VS_XCS_CLR() GPIOB->ODR&=~(1<<12)                  //片選信號
//VS1003設(shè)置參數(shù)
//0,高音控制;1,最低頻限;2,低音控制;3,最低頻限
//0,henh.1,hfreq.2,lenh.3,lfreq 5,主音量


//EEPROM地址:488~489 共2個(gè)
u8 VS_VOLT=200;         //默認(rèn)音量200
u8 VS_BASS=0;         //默認(rèn)非超重低音

                                         
//SPI1口讀寫一個(gè)字節(jié)
//TxData:要發(fā)送的字節(jié)                 
//返回值:讀取到的字節(jié)
u8 SPI2_ReadWriteByte(u8 TxData)
{
        while((SPI2->SR&1<<1)==0);//等待發(fā)送區(qū)空                                  
        SPI2->DR=TxData;                   //發(fā)送一個(gè)byte   
        while((SPI2->SR&1<<0)==0);//等待接收完一個(gè)byte  
        return SPI2->DR;          //返回收到的數(shù)據(jù)                                    
}
/*******************************************************************************
* Function Name  : SPI1_SetSpeed
* Description    : SPI1設(shè)置速度為高速
* Input          : u8 SpeedSet
*                  如果速度設(shè)置輸入0,則低速模式,非0則高速模式
*                  SPI_SPEED_HIGH   1
*                  SPI_SPEED_LOW    0
* Output         : None
* Return         : None
*******************************************************************************/
void SPI2_SetSpeed(u8 SpeedSet)
{
        SPI2->CR1&=0XFFC7;//Fsck=Fcpu/256
        if(SpeedSet==SPI2_SPEED_2)//二分頻
        {
                SPI2->CR1|=0<<3;//Fsck=Fpclk/2=36Mhz       
        }else if(SpeedSet==SPI2_SPEED_8)//八分頻
        {
                SPI2->CR1|=2<<3;//Fsck=Fpclk/8=9Mhz       
        }else if(SpeedSet==SPI2_SPEED_16)//十六分頻
        {
                SPI2->CR1|=3<<3;//Fsck=Fpclk/16=4.5Mhz
        }else                                  //256分頻
        {
                SPI2->CR1|=7<<3; //Fsck=Fpclk/256=281.25Khz 低速模式
        }
        SPI2->CR1|=1<<6; //SPI設(shè)備使能          
}

void VS_SET_VOL(u8 volt,u8 bass)
{
        u16 temp_volt,temp_bass;
        volt=255-volt;
        temp_volt=volt;
           temp_volt=(temp_volt<<8)+volt;
        temp_bass=(temp_bass<<8)+bass;
    Vs1003_CMD_Write(SPI_VOL,temp_volt); //設(shè)音量
        Vs1003_CMD_Write(SPI_BASS,temp_bass);//BASS
}
         
//軟復(fù)位VS1003
void Vs1003SoftReset(void)
{         
        u8 retry;                                   
        while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00);//等待軟件復(fù)位結(jié)束
        SPI2_ReadWriteByte(0X00);//啟動(dòng)傳輸
        retry=0;
        while(Vs1003_REG_Read(SPI_MODE)!=0x0C00)// 軟件復(fù)位,新模式  
        {
                Vs1003_CMD_Write(SPI_MODE,0x0C00);// 軟件復(fù)位,新模式
                delay_ms(2);//等待至少1.35ms
                if(retry++>100)break;
        }                                           
        while (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00);//等待軟件復(fù)位結(jié)束          

        retry=0;
        while(Vs1003_REG_Read(SPI_CLOCKF)!=0X9800)//設(shè)置vs1003的時(shí)鐘,3倍頻 ,1.5xADD
        {
                Vs1003_CMD_Write(SPI_CLOCKF,0X9800);//設(shè)置vs1003的時(shí)鐘,3倍頻 ,1.5xADD
                if(retry++>100)break;
        }                  
        retry=0;
        while(Vs1003_REG_Read(SPI_AUDATA)!=0XAC44)//設(shè)置vs1003的時(shí)鐘,3倍頻 ,1.5xADD
        {
                Vs1003_CMD_Write(SPI_AUDATA,0XAC44);
                if(retry++>100)break;
        }
        //Vs1003_CMD_Write(SPI_CLOCKF,0X9800);             
        //Vs1003_CMD_Write(SPI_AUDATA,0XBB81); //采樣率48k,立體聲       
        VS_SET_VOL(VS_VOLT,VS_BASS);                 
        ResetDecodeTime();//復(fù)位解碼時(shí)間            
    //向vs1003發(fā)送4個(gè)字節(jié)無效數(shù)據(jù),用以啟動(dòng)SPI發(fā)送
    VS_XDCS_CLR();//選中數(shù)據(jù)傳輸
        SPI2_ReadWriteByte(0XFF);
        SPI2_ReadWriteByte(0XFF);
        SPI2_ReadWriteByte(0XFF);
        SPI2_ReadWriteByte(0XFF);
        VS_XDCS_SET();//取消數(shù)據(jù)傳輸
        delay_ms(20);
}
//硬復(fù)位MP3

void Mp3Reset(void)
{
        VS_XRESET_CLR();
        delay_ms(20);
        VS_XDCS_SET();        //取消數(shù)據(jù)傳輸
        VS_XCS_SET();//取消數(shù)據(jù)傳輸
        VS_XRESET_SET();   
        while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00);        //等待DREQ為高
        delay_ms(20);                                 
}

//正弦測試
void VsSineTest(void)
{                                                                                            
       
        Mp3Reset();         
        Vs1003_CMD_Write(0x0b,0X2020);          //設(shè)置音量         
        Vs1003_CMD_Write(SPI_MODE,0x0820);//進(jìn)入vs1003的測試模式            
        while (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00);     //等待DREQ為高
        //向vs1003發(fā)送正弦測試命令:0x53 0xef 0x6e n 0x00 0x00 0x00 0x00
        //其中n = 0x24, 設(shè)定vs1003所產(chǎn)生的正弦波的頻率值,具體計(jì)算方法見vs1003的datasheet
    VS_XDCS_CLR();//選中數(shù)據(jù)傳輸
        SPI2_ReadWriteByte(0x53);
        SPI2_ReadWriteByte(0xef);
        SPI2_ReadWriteByte(0x6e);
        SPI2_ReadWriteByte(0x7E);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        delay_ms(100);
        VS_XDCS_SET();
    //退出正弦測試
    VS_XDCS_CLR();//選中數(shù)據(jù)傳輸
        SPI2_ReadWriteByte(0x45);
        SPI2_ReadWriteByte(0x78);
        SPI2_ReadWriteByte(0x69);
        SPI2_ReadWriteByte(0x74);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        delay_ms(100);
        VS_XDCS_SET();                 

    //再次進(jìn)入正弦測試并設(shè)置n值為0x44,即將正弦波的頻率設(shè)置為另外的值
    VS_XDCS_CLR();//選中數(shù)據(jù)傳輸      
        SPI2_ReadWriteByte(0x53);
        SPI2_ReadWriteByte(0xef);
        SPI2_ReadWriteByte(0x6e);
        SPI2_ReadWriteByte(0x44);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        delay_ms(100);
        VS_XDCS_SET();       
    //退出正弦測試
    VS_XDCS_CLR();//選中數(shù)據(jù)傳輸
        SPI2_ReadWriteByte(0x45);
        SPI2_ReadWriteByte(0x78);
        SPI2_ReadWriteByte(0x69);
        SPI2_ReadWriteByte(0x74);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        delay_ms(100);
        VS_XDCS_SET();
       
}         
//ram 測試        
u16 regvalue ;                                                                                                                                                         
void VsRamTest(void)
{
                  
        Mp3Reset();     
        Vs1003_CMD_Write(SPI_MODE,0x0820);// 進(jìn)入vs1003的測試模式
        while (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00); // 等待DREQ為高
        VS_XDCS_CLR();                                 // xDCS = 1,選擇vs1003的數(shù)據(jù)接口
        SPI2_ReadWriteByte(0x4d);
        SPI2_ReadWriteByte(0xea);
        SPI2_ReadWriteByte(0x6d);
        SPI2_ReadWriteByte(0x54);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        SPI2_ReadWriteByte(0x00);
        delay_ms(50);  
        VS_XDCS_SET();
        regvalue = Vs1003_REG_Read(SPI_HDAT0); // 如果得到的值為0x807F,則表明完好。
        ///printf("regvalueH:%x\n",regvalue>>8);//輸出結(jié)果
        //printf("regvalueL:%x\n",regvalue&0xff);//輸出結(jié)果
}     
//向VS1003寫命令
//address:命令地址
//data:命令數(shù)據(jù)
void Vs1003_CMD_Write(u8 address,u16 data)
{  
    while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00);//等待空閑
        SPI2_SetSpeed(SPI2_SPEED_256);//低速
         
        VS_XDCS_SET(); //MP3_DATA_CS=1;
        VS_XCS_CLR(); //MP3_CMD_CS=0;
       
        SPI2_ReadWriteByte(VS_WRITE_COMMAND);//發(fā)送VS1003的寫命令
        SPI2_ReadWriteByte(address); //地址
        SPI2_ReadWriteByte(data>>8); //發(fā)送高八位
        SPI2_ReadWriteByte(data);         //第八位
        VS_XCS_SET();         //MP3_CMD_CS=1;
        SPI2_SetSpeed(SPI2_SPEED_16);//高速
}
//向VS1003寫數(shù)據(jù)
void Vs1003_DATA_Write(u8 data)
{
        VS_XDCS_CLR();   //MP3_DATA_CS=0;
        //while(VS_DREQ==0);  //VS1003的DREQ為高才能寫入數(shù)據(jù)????這句可以不要??
        SPI2_ReadWriteByte(data);
        VS_XDCS_SET();  //MP3_DATA_CS=1;
        VS_XCS_SET();   //MP3_CMD_CS=1;
}         
//讀VS1003的寄存器           
//讀VS1003
//注意不要用倍速讀取,會出錯(cuò)
u16 Vs1003_REG_Read(u8 address)
{
        u16 temp=0;
    while(GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_1) == 0x00);//非等待空閑狀態(tài)
        SPI2_SetSpeed(SPI2_SPEED_256);//低速
        VS_XDCS_SET();       //MP3_DATA_CS=1;
        VS_XCS_CLR();        //MP3_CMD_CS=0;
        SPI2_ReadWriteByte(VS_READ_COMMAND);//發(fā)送VS1003的讀命令
        SPI2_ReadWriteByte(address);        //地址
        temp=SPI2_ReadWriteByte(0xff);                //讀取高字節(jié)
        temp=temp<<8;
        temp+=SPI2_ReadWriteByte(0xff);         //讀取低字節(jié)
        VS_XCS_SET();       //MP3_CMD_CS=1;
        SPI2_SetSpeed(SPI2_SPEED_16);//高速
    return temp;
}  
//FOR WAV HEAD0 :0X7761 HEAD1:0X7665   
//FOR MIDI HEAD0 ther info HEAD1:0X4D54
//FOR WMA HEAD0 :data speed HEAD1:0X574D
//FOR MP3 HEAD0 :data speed HEAD1:ID
//比特率預(yù)定值
const u16 bitrate[2][16]=
{
{0,8,16,24,32,40,48,56,64,80,96,112,128,144,160,0},
{0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,0}
};
//返回Kbps的大小
//得到mp3&wma的波特率
u16 GetHeadInfo(void)
{
        unsigned int HEAD0;
        unsigned int HEAD1;            
    HEAD0=Vs1003_REG_Read(SPI_HDAT0);
    HEAD1=Vs1003_REG_Read(SPI_HDAT1);
    switch(HEAD1)
    {        
        case 0x7665:return 0;//WAV格式
        case 0X4D54:return 1;//MIDI格式
        case 0X574D://WMA格式
        {
            HEAD1=HEAD0*2/25;
            if((HEAD1%10)>5)return HEAD1/10+1;
            else return HEAD1/10;
        }
        default://MP3格式
        {
            HEAD1>>=3;
            HEAD1=HEAD1&0x03;
            if(HEAD1==3)HEAD1=1;
            else HEAD1=0;
            return bitrate[HEAD1][HEAD0>>12];
        }
    }
}  
//重設(shè)解碼時(shí)間                          
void ResetDecodeTime(void)
{
        Vs1003_CMD_Write(SPI_DECODE_TIME,0x0000);
        Vs1003_CMD_Write(SPI_DECODE_TIME,0x0000);//操作兩次
}
//得到mp3的播放時(shí)間n sec
u16 GetDecodeTime(void)
{
    return Vs1003_REG_Read(SPI_DECODE_TIME);   
}
//加載頻譜分析的代碼到VS1003
void LoadPatch(void)
{
        u16 i;
        for (i=0;i<943;i++)Vs1003_CMD_Write(atab[i],dtab[i]);
        delay_ms(10);
}
//得到頻譜數(shù)據(jù)
void GetSpec(u8 *p)
{
        u8 byteIndex=0;
        u8 temp;
        Vs1003_CMD_Write(SPI_WRAMADDR,0x1804);                                                                                             
        for (byteIndex=0;byteIndex<14;byteIndex++)
        {                                                                              
                temp=Vs1003_REG_Read(SPI_WRAM)&0x63;//取小于100的數(shù)   
                *p++=temp;
        }
}
          



void SPI2_Init(void)
{         
  SPI_InitTypeDef  SPI_InitStructure;
  GPIO_InitTypeDef GPIO_InitStructure;
   
  /* Enable SPI1 GPIOA and GPIOB clocks */
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOB, ENABLE);
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);
  /* Configure SPI1 pins: NSS, SCK, MISO and MOSI */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Configure PB.12 as Output push-pull, used as Flash Chip select */
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Deselect the FLASH: Chip Select high */
  VS_XCS_SET();

  /* SPI1 configuration */
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPI2, &SPI_InitStructure);
  
  /* Enable SPI1  */
  SPI_Cmd(SPI2, ENABLE);            
}

//初始化VS1003的IO口         
         
void Vs1003_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
   
     SPI2_Init();  //初始化VS1003的SPI及端口
         
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOB , ENABLE);
  
          /* Configure PA4  PA8  as output push-pull */
          GPIO_InitStructure.GPIO_Pin        = GPIO_Pin_0;//選擇PA4 PA8
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //管腳頻率為50MHZ
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //模式為推挽輸出
          GPIO_Init(GPIOC, &GPIO_InitStructure);   //初始化GPIOA寄存器

        GPIO_InitStructure.GPIO_Pin        = GPIO_Pin_2 ;//選擇PX.8-11
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //管腳頻率為50MHZ
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;        //模式為推挽輸出
          GPIO_Init(GPIOC, &GPIO_InitStructure);   //初始化GPIOB寄存器
       
        GPIO_InitStructure.GPIO_Pin        = GPIO_Pin_1 ;//選擇PX.8-11
          GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;        //管腳頻率為50MHZ
          GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //模式為推挽輸出
          GPIO_Init(GPIOC, &GPIO_InitStructure);   //初始化GPIOB寄存器

        Mp3Reset();                                                   //復(fù)位VS1003
}

沙發(fā)
 樓主| 發(fā)表于 2012-8-1 17:30:45 | 只看該作者
小弟郵箱:121775825@qq.com
板凳
 樓主| 發(fā)表于 2012-8-2 12:36:12 | 只看該作者
求指點(diǎn)
地板
發(fā)表于 2012-10-25 22:08:02 | 只看該作者
void GPIO_SPI2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//GPIOA時(shí)鐘使能
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//復(fù)用功能使用推完開漏輸出
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        //基本IO功能初始化
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//數(shù)據(jù)請求引腳
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用功能使用推完開漏輸出
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);
               
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);//SPI1時(shí)鐘使能
        SPI_InitTypeDef  SPI_InitStructure;
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//兩線全雙工模式
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//主機(jī)模式
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//輸出數(shù)據(jù)為8位
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;//時(shí)鐘空閑時(shí),保持低電平
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; //在第一時(shí)鐘沿捕獲數(shù)據(jù)
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//nss軟件設(shè)置
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;//主SPI時(shí)鐘8分頻
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//先發(fā)送高位
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_Init(SPI2, &SPI_InitStructure);
        SPI_Cmd(SPI2, ENABLE);
        XDCS_H;
        XCS_H;
}
這是我的初始化接口,好像你的速度是不是太快了,我的系統(tǒng)時(shí)鐘72M,希望對你有幫助,我做的是MP3,跑FATFS,SDIO讀取SD卡,現(xiàn)在也出了點(diǎn)問題,還在解決中!
地下室
發(fā)表于 2012-10-27 07:27:52 | 只看該作者
6
發(fā)表于 2013-6-5 15:57:01 | 只看該作者
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 四虎永久影院永久影库 | 韩日一级 | 91看片淫黄大片在看 | 欧美国产高清欧美 | 18到20女人一级毛片 | 日韩在线免费播放 | 欧美高清360| 在线观看国产剧情麻豆精品 | 国产日| 香蕉青草久久成人网 | 弄农村老妇呻吟 | 国产麻豆成91 | 国产日产精品_国产精品毛片 | 一级特黄aaa大片在线观看视频 | 成人精品视频在线观看播放 | 国产激情一级毛片久久久 | 国产精品久久免费视频 | 五月婷婷中文 | 久久久99精品免费观看 | 国产大片黄在线观看 | 香蕉视频 在线播放 | 天天操综 | 欧美国产日本精品一区二区三区 | 免费看黄视频网站 | 亚洲免费视频播放 | 四虎影院2022 | 2021久久精品99精品久久 | 最新欧美在线 | 国产亚洲欧美在线视频 | 俺也操 | 久久久久国产一级毛片高清片 | 婷婷久久五月天 | 日本在线视频二区 | 亚洲一区二区三区首页 | 婷婷尹人香蕉久久天堂 | 在线精品国内视频秒播 | 精品特级毛片 | 亚洲国产日韩欧美在线vip1区 | 91福利国产在线观一区二区 | 久久好色 | 一区二区三区中文 |