为什么通过不了正弦波测试?(vs1053) 求解!!

[复制链接]
 楼主| cooolsky 发表于 2011-5-6 01:02 | 显示全部楼层 |阅读模式
本帖最后由 cooolsky 于 2011-5-6 01:05 编辑

main.rar (1.29 KB, 下载次数: 26) 提供源文件下载.
这里也把代码复制过来.觉得网页里看的累的可以下源文件.

参考了一些别人的程序.基本上思维都是按照资料里写的.不知道哪里不对了.求高人指点~!跪谢!!!!

  1. #include "stm32f10x.h"
  2. void RCC_Configuration(void);
  3. void SPI1_Configuration(void);
  4. void GPIO_Configuration(void);
  5. void Delay(void);
  6. void VS_Soft_Reset(void);
  7. void VS_Write(u8 add,u16 data);
  8. u16 VS_Read(u8 add);
  9. void VS_Soft_Reset(void);
  10. void VS_Test(void);

  11. #define VS_DQ GPIOA,GPIO_Pin_1;
  12. #define VS_XDCS GPIOA,GPIO_Pin_4;
  13. #define VS_RST GPIOA,GPIO_Pin_2;
  14. #define VS_XCS GPIOA,GPIO_Pin_3;

  15. #define VS_REG_MODE 0x00
  16. #define VS_REG_CLOCKF 0x03
  17. #define VS_REG_AUDATA 0x05
  18. #define VS_REG_BASS 0x02
  19. #define VS_REG_VOL 0x0B



  20. int main(void)
  21. {
  22. RCC_Configuration();
  23. SPI1_Configuration();
  24. GPIO_Configuration();
  25. VS_Soft_Reset();

  26. while(1)

  27. {

  28. VS_Test();

  29. }
  30. }

  31. void RCC_Configuration(void)
  32. {

  33. SystemInit();

  34. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

  35. RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);
  36. }


  37. void GPIO_Configuration(void)
  38. {

  39. GPIO_InitTypeDef GPIO_InitStructure;

  40. GPIO_InitStructure.GPIO_Pin =GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;

  41. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;

  42. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

  43. GPIO_Init(GPIOA, &GPIO_InitStructure);
  44. }


  45. void SPI1_Configuration(void)
  46. {

  47. /*SPI初始化定义*/

  48. SPI_InitTypeDef SPI_InitStructure;

  49. GPIO_InitTypeDef GPIO_InitStructure;

  50. /*GPIO端口配置 PA6为MISO,浮空输入,PA7为MOSI,复用推挽输出*/

  51. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;

  52. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

  53. GPIO_Init(GPIOA,&GPIO_InitStructure);


  54. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_5;

  55. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

  56. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

  57. GPIO_Init(GPIOA,&GPIO_InitStructure);

  58. /*SPI1 端口设置*/

  59. SPI_Cmd(SPI1,DISABLE);

  60. SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//SPI设置为全双工

  61. SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//设置为主SPI

  62. SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;

  63. SPI_InitStructure.SPI_CPOL=SPI_CPOL_Low;

  64. SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;

  65. SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;

  66. SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_4;

  67. SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;

  68. SPI_InitStructure.SPI_CRCPolynomial=7;

  69. SPI_Init(SPI1,&SPI_InitStructure);

  70. SPI_Cmd(SPI1,ENABLE);
  71. }

  72. void VS_Soft_Reset(void)
  73. {

  74. GPIO_ResetBits(GPIOA,GPIO_Pin_2);//VS_RST=0

  75. Delay();

  76. SPI_I2S_SendData(SPI1,0xff);

  77. GPIO_SetBits(GPIOA,GPIO_Pin_4);//VS_XDCS=1;

  78. GPIO_SetBits(GPIOA,GPIO_Pin_3);//VS_XCS=1;

  79. GPIO_SetBits(GPIOA,GPIO_Pin_2);//VS_RST=1;

  80. if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)//VS_DQ=1;

  81. {

  82. VS_Write(0x00,0x0804);

  83. Delay();

  84. Delay();

  85. }

  86. if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)//VS_DQ=1;

  87. {

  88. VS_Write(0x03,0x9800);

  89. Delay();

  90. VS_Write(0x05,0xbb81);

  91.     Delay();

  92. VS_Write(0x02,0x0055);

  93. Delay();

  94. VS_Write(0x0b,0x2020);


  95. GPIO_ResetBits(GPIOA,GPIO_Pin_4);//VS_XDCS=0;


  96. SPI_I2S_SendData(SPI1,0xff);

  97. SPI_I2S_SendData(SPI1,0xff);

  98. SPI_I2S_SendData(SPI1,0xff);

  99. SPI_I2S_SendData(SPI1,0xff);

  100. }
  101. }

  102. void Delay(void)
  103. {

  104. unsigned long x;

  105. for(x=0;x<0x500;x--);
  106. }

  107. void VS_Write(u8 add,u16 data)
  108. {

  109. while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);

  110. SPI1->CR1|=5<<3;//64分频

  111. GPIO_SetBits(GPIOA,GPIO_Pin_4);//XDCS=1

  112. GPIO_ResetBits(GPIOA,GPIO_Pin_3);//XCS=0

  113. SPI_I2S_SendData(SPI1,0x02);//Send 0x02 choose write COMMAND

  114. SPI_I2S_SendData(SPI1,add);

  115. SPI_I2S_SendData(SPI1,data>>8);

  116. SPI_I2S_SendData(SPI1,data);

  117. GPIO_SetBits(GPIOA,GPIO_Pin_3);//XCS=1

  118. SPI1->CR1|=2<<3;//high speed
  119. }

  120. u16 VS_Read(u8 add)
  121. {

  122. u16 temp=0;

  123. while(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0);

  124. SPI1->CR1|=5<<3;//64分频

  125. GPIO_SetBits(GPIOA,GPIO_Pin_4);//XDCS=1

  126. GPIO_ResetBits(GPIOA,GPIO_Pin_3);//XCS=0

  127. SPI_I2S_SendData(SPI1,0x03);//send read command 0x03

  128. SPI_I2S_SendData(SPI1,add);

  129. temp=SPI_I2S_ReceiveData(SPI1);

  130. temp=temp<<8;

  131. temp+=SPI_I2S_ReceiveData(SPI1);

  132. GPIO_SetBits(GPIOA,GPIO_Pin_3);//XCS=1

  133. SPI1->CR1|=2<<3;//high speed

  134. return temp;
  135. }

  136. void VS_Test(void)
  137. {

  138. VS_Write(0x00,0x0820);

  139. if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)==0)

  140. {

  141. GPIO_ResetBits(GPIOA,GPIO_Pin_4);

  142. GPIO_SetBits(GPIOA,GPIO_Pin_3);

  143. SPI_I2S_SendData(SPI1,0X53);

  144. SPI_I2S_SendData(SPI1,0XEF);

  145. SPI_I2S_SendData(SPI1,0X6E);

  146. SPI_I2S_SendData(SPI1,0X30);

  147. SPI_I2S_SendData(SPI1,0X00);

  148. SPI_I2S_SendData(SPI1,0X00);

  149. SPI_I2S_SendData(SPI1,0X00);

  150. SPI_I2S_SendData(SPI1,0X00);

  151. Delay();

  152. Delay();

  153. Delay();

  154. SPI_I2S_SendData(SPI1,0X45);

  155. SPI_I2S_SendData(SPI1,0X78);

  156. SPI_I2S_SendData(SPI1,0X69);

  157. SPI_I2S_SendData(SPI1,0X74);

  158. SPI_I2S_SendData(SPI1,0X00);

  159. SPI_I2S_SendData(SPI1,0X00);

  160. SPI_I2S_SendData(SPI1,0X00);

  161. SPI_I2S_SendData(SPI1,0X00);

  162. GPIO_SetBits(GPIOA,GPIO_Pin_4);

  163. Delay();

  164. }
  165. }
fusd 发表于 2011-12-22 15:37 | 显示全部楼层
比较深奥……
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

27

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部