本帖最后由 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);
}
请大家帮我看看问题出在哪里
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
我看了是正常的,和我预想的输出一样,就是DREQ一直为低电平,VS1053模块是ALIENTEK的,开发板是我自己的用的USB口供电,会不会是电压问题?还有一个问题请教原子兄,我在使用调试模式时,设置断点时出现的不是一个红点而是一个圆圈中一个感叹号标记是什么意思呢?
一周热门 更多>