本帖最后由 csf4824521 于 2017-5-15 16:59 编辑
我现在使用的是ALIENTEK VS1053模块,根据实验代码修改了一下GPIO接口,现在在程序的运行过程中发现DREQ信号一直为高,所以复位无法成功。我的开发板芯片是103ZET6的SPI接的PA5~7,VS相关引脚接在E2~5,分别是:2:DREQ、3:RST、4:XDCS、5:XCS。芯片上的引脚如后图所示。
下面是初始化和问题代码
void VS1053_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
//XDCS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//DREQ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//XCS
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
//RST
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
VS_DCS(1);
VS_CCS(1);
SPI1_Init();
}
//命令片选
#define VS_CCS(x) x ? GPIO_SetBits(GPIOE, GPIO_Pin_5) : GPIO_ResetBits(GPIOE, GPIO_Pin_5)
//数据片选
#define VS_DCS(x) x ? GPIO_SetBits(GPIOE, GPIO_Pin_4) : GPIO_ResetBits(GPIOE, GPIO_Pin_4)
#define VS_RST(x) x ? GPIO_SetBits(GPIOE, GPIO_Pin_3) : GPIO_ResetBits(GPIOE, GPIO_Pin_3)
#define VS_DREQ GPIO_ReadInputDataBit(GPIOE, GPIO_Pin_2)
软复位时判断DREQ是否可接收数据,就陷入死循环
void VS1053_SoftReset(void)
{
u8 retry;
while(VS_DREQ == 0);
VS_SPI_ReadWriteByte(0xFF);
retry = 0;
while(VS1053_ReadReg(0) != 0x0800)
{
VS1053_WriteReg(SPI_MODE, 0x0804);
delay_ms(2);
if(retry++ > 100) break;
}
while(VS_DREQ == 0);
while(VS1053_ReadReg(SPI_CLOCKF) != 0x9800)
{
VS1053_WriteReg(SPI_CLOCKF, 0x9800);
if(retry++ > 100) break;
}
delay_ms(20);
}
请大家帮我看看问题出在哪里
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>