关于ALIENTEK VS1053模块初始化问题

2019-08-18 20:33发布

本帖最后由 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);
}

请大家帮我看看问题出在哪里
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
csf4824521
1楼-- · 2019-08-19 01:03
这个问题已经解决了,是我自己写的复位函数的问题,修改了一下就好了
正点原子
2楼-- · 2019-08-19 06:51
BD
csf4824521
3楼-- · 2019-08-19 06:59
请教原子兄是否是GPIO口需要复用,或者是GPIO的模式设置有问题?
正点原子
4楼-- · 2019-08-19 10:56
 精彩回答 2  元偷偷看……
正点原子
5楼-- · 2019-08-19 15:09
你用示波器或者万用表,跟踪看看每个引脚的电压输出,是否正常?
csf4824521
6楼-- · 2019-08-19 17:04
本帖最后由 csf4824521 于 2017-5-17 22:16 编辑

我看了是正常的,和我预想的输出一样,就是DREQ一直为低电平,VS1053模块是ALIENTEK的,开发板是我自己的用的USB口供电,会不会是电压问题?还有一个问题请教原子兄,我在使用调试模式时,设置断点时出现的不是一个红点而是一个圆圈中一个感叹号标记是什么意思呢?

一周热门 更多>