OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4226|回复: 6

关于ALIENTEK VS1053模块初始化问题

[复制链接]

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
发表于 2017-5-14 18:10:46 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 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);
}

请大家帮我看看问题出在哪里
QQ图片20170514180628.png

最佳答案

查看完整内容[请看2#楼]

这个问题已经解决了,是我自己写的复位函数的问题,修改了一下就好了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2017-5-14 18:10:47 | 显示全部楼层
这个问题已经解决了,是我自己写的复位函数的问题,修改了一下就好了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-14 19:12:19 | 显示全部楼层
BD
回复

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2017-5-15 17:00:25 | 显示全部楼层
请教原子兄是否是GPIO口需要复用,或者是GPIO的模式设置有问题?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-15 20:40:54 | 显示全部楼层
csf4824521 发表于 2017-5-15 17:00
请教原子兄是否是GPIO口需要复用,或者是GPIO的模式设置有问题?

看上去设置没问题啊。除了DREQ设置为输入,其他的都是输出。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-5-15 20:41:10 | 显示全部楼层
你用示波器或者万用表,跟踪看看每个引脚的电压输出,是否正常?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

60

主题

153

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
369
金钱
369
注册时间
2013-12-23
在线时间
32 小时
 楼主| 发表于 2017-5-17 21:53:00 | 显示全部楼层
本帖最后由 csf4824521 于 2017-5-17 22:16 编辑

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

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 02:11

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表