- #include "stm32f10x.h"
- void RCC_Configuration(void);
- void SPI1_Configuration(void);
- void GPIO_Configuration(void);
- void Delay(void);
- void VS_Soft_Reset(void);
- void VS_Write(u8 add,u16 data);
- u16 VS_Read(u8 add);
- void VS_Soft_Reset(void);
- void VS_Test(void);
- #define VS_DQ GPIOA,GPIO_Pin_1;
- #define VS_XDCS GPIOA,GPIO_Pin_4;
- #define VS_RST GPIOA,GPIO_Pin_2;
- #define VS_XCS GPIOA,GPIO_Pin_3;
- #define VS_REG_MODE 0x00
- #define VS_REG_CLOCKF 0x03
- #define VS_REG_AUDATA 0x05
- #define VS_REG_BASS 0x02
- #define VS_REG_VOL 0x0B
- int main(void)
- {
- RCC_Configuration();
- SPI1_Configuration();
- GPIO_Configuration();
- VS_Soft_Reset();
- while(1)
- {
- VS_Test();
- }
- }
- void RCC_Configuration(void)
- {
- SystemInit();
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
- }
- void GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOA, &GPIO_InitStructure);
- }
- void SPI1_Configuration(void)
- {
- /*SPI初始化定义*/
- SPI_InitTypeDef SPI_InitStructure;
- GPIO_InitTypeDef GPIO_InitStructure;
- /*GPIO端口配置 PA6为MISO,浮空输入,PA7为MOSI,复用推挽输出*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_5;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
- GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
- GPIO_Init(GPIOA,&GPIO_InitStructure);
- /*SPI1 端口设置*/
- SPI_Cmd(SPI1,DISABLE);
- SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//SPI设置为全双工
- SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//设置为主SPI
- SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;
- SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;
- 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(SPI1,&SPI_InitStructure);
- SPI_Cmd(SPI1,ENABLE);
- }
- void VS_Soft_Reset(void)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_2);//VS_RST=0
- Delay();
- SPI_I2S_SendData(SPI1,0xff);
- GPIO_SetBits(GPIOA,GPIO_Pin_4);//VS_XDCS=1;
- GPIO_SetBits(GPIOA,GPIO_Pin_3);//VS_XCS=1;
- GPIO_SetBits(GPIOA,GPIO_Pin_2);//VS_RST=1;
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)//VS_DQ=1;
- {
- VS_Write(0x00,0x0804);
- Delay();
- Delay();
- }
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)//VS_DQ=1;
- {
- VS_Write(0x03,0x9800);
- Delay();
- VS_Write(0x05,0xbb81);
- Delay();
- VS_Write(0x02,0x0055);
- Delay();
- VS_Write(0x0b,0x2020);
- GPIO_ResetBits(GPIOA,GPIO_Pin_4);//VS_XDCS=0;
- SPI_I2S_SendData(SPI1,0xff);
- SPI_I2S_SendData(SPI1,0xff);
- SPI_I2S_SendData(SPI1,0xff);
- SPI_I2S_SendData(SPI1,0xff);
- }
- }
- void Delay(void)
- {
- unsigned long x;
- for(x=0;x<0x500;x--);
- }
- void VS_Write(u8 add,u16 data)
- {
- while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);
- SPI1->CR1|=5<<3;//64分频
- GPIO_SetBits(GPIOA,GPIO_Pin_4);//XDCS=1
- GPIO_ResetBits(GPIOA,GPIO_Pin_3);//XCS=0
- SPI_I2S_SendData(SPI1,0x02);//Send 0x02 choose write COMMAND
- SPI_I2S_SendData(SPI1,add);
- SPI_I2S_SendData(SPI1,data>>8);
- SPI_I2S_SendData(SPI1,data);
- GPIO_SetBits(GPIOA,GPIO_Pin_3);//XCS=1
- SPI1->CR1|=2<<3;//high speed
- }
- u16 VS_Read(u8 add)
- {
- u16 temp=0;
- while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);
- SPI1->CR1|=5<<3;//64分频
- GPIO_SetBits(GPIOA,GPIO_Pin_4);//XDCS=1
- GPIO_ResetBits(GPIOA,GPIO_Pin_3);//XCS=0
- SPI_I2S_SendData(SPI1,0x03);//send read command 0x03
- SPI_I2S_SendData(SPI1,add);
- temp=SPI_I2S_ReceiveData(SPI1);
- temp=temp<<8;
- temp+=SPI_I2S_ReceiveData(SPI1);
- GPIO_SetBits(GPIOA,GPIO_Pin_3);//XCS=1
- SPI1->CR1|=2<<3;//high speed
- return temp;
- }
- void VS_Test(void)
- {
- VS_Write(0x00,0x0820);
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_4);
- GPIO_SetBits(GPIOA,GPIO_Pin_3);
- SPI_I2S_SendData(SPI1,0X53);
- SPI_I2S_SendData(SPI1,0XEF);
- SPI_I2S_SendData(SPI1,0X6E);
- SPI_I2S_SendData(SPI1,0X30);
- SPI_I2S_SendData(SPI1,0X00);
- SPI_I2S_SendData(SPI1,0X00);
- SPI_I2S_SendData(SPI1,0X00);
- SPI_I2S_SendData(SPI1,0X00);
- Delay();
- Delay();
- Delay();
- SPI_I2S_SendData(SPI1,0X45);
- SPI_I2S_SendData(SPI1,0X78);
- SPI_I2S_SendData(SPI1,0X69);
- SPI_I2S_SendData(SPI1,0X74);
- SPI_I2S_SendData(SPI1,0X00);
- SPI_I2S_SendData(SPI1,0X00);
- SPI_I2S_SendData(SPI1,0X00);
- SPI_I2S_SendData(SPI1,0X00);
- GPIO_SetBits(GPIOA,GPIO_Pin_4);
- Delay();
- }
- }