初级会员
- 积分
- 156
- 金钱
- 156
- 注册时间
- 2013-4-27
- 在线时间
- 14 小时
|
1金钱
各位大侠大家好:
我尝试用STM32L152+VS1053+NRF24L01做一个全双工通话。现在是接收端能接受到,发送端的语音。就是不连续,我用LED亮指示接收到数据,没有数据灭。发射端不断发送数据,接收端能看见LED闪烁。软件截取了原子的一些。原子程序中SPI的速率是72M/8=9M。我用的STM32L152最大是32M。这也语句SPIx2_SetSpeed(SPI_SPEED_8);使我的SPI工作在32/8=4M。我把8分频改为4分频后,想加大SPI的速率,结果读写VS1053就不正常。
不知道这是什么原因,为何72M系统下SPI 9M都正常,32M系统下4M都不行???
望大家帮帮忙,谢谢!
void SPIx1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//PORTAê±Öóê1Äü
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);//SPI1ê±Öóê1Äü
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;// ¸′óÃA5£¬A6£¬A7
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_40MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_SPI1);
GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_SPI1);
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//è«Ë«1¤Ä£ê½
SPI_InitStructure.SPI_Mode = SPI_Mode_Master;//SPIÖ÷»ú
SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;//8bitêy¾Y¸ñê½
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;//CPOL=0걿ÕÏDÄ£ê½ÏÂSCKÎa1
SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;//μúò»¸öê±ÖóμÄϽμÑØ,CPHA=1 CPOL=1
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;//Äú2¿′óé豸ѡÔñ
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;//Fsck=Fcpu/2562¨ìØÂê
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;//Ïè·¢Ëí¸ßλ
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI1, &SPI_InitStructure);//¸ù¾Y2Îêy3õê¼»ˉSPI1μÄíaéè¼Ä′æÆ÷
SPI_Cmd(SPI1, ENABLE); //SPIé豸ê1Äü
SPIx1_ReadWriteByte(0xff);//Æô¶ˉ′«êä
|
最佳答案
查看完整内容[请看2#楼]
原子您好,您的意思是缓冲区影响了吗?
我先是一次读取512个字节到缓存,然后发送,每次发送32个字节,循环16次发完。接收端接收到512个字节后,通过SPI一次送到VS1053。
从VS1053读函数:
void read2_pcm(void)
{
u16 w;
u16 idx=0;
w=VS2_RD_Reg(SPI_HDAT1);
if((w>=256)&&(w8;
};
}
}
发送函数:
void send512(u8 *txbuf)
{
u8 temp[33] = {0}; //óÃà′·Ö±eè¡Ç°32 ...
|