OpenEdv-开源电子网

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

使用stm32f1的SPI1方式获取ATT7053BU的数据,该怎么获取

[复制链接]

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
发表于 2017-1-12 15:40:28 | 显示全部楼层 |阅读模式
如题,菜鸟在此求大神指导啊,不会写程序。
使用stm32f1的SPI1方式获取ATT7053BU的数据,该怎么获取。不知道怎么写程序,主要是电表芯片ATT7053BU的数据获取要怎么写呢。
要读取的数据所在的三组引脚:
V3P/V3N、V2P/V2N、V1P/V1N

附图为电路连接图,我摘出来了电表和stm32连接的部分,使用的SPI1.
有没有大神帮我指导指导啊,或者有程序也行,先谢谢了。


yinjiaotu_att.png
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-12 15:42:36 | 显示全部楼层
发错主题了,应该发求助帖的,怎么删帖啊
回复 支持 反对

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-1-12 21:54:19 | 显示全部楼层
这个…………你得看协议才行。有说明书的话把时序图发上来,不然没法说
SPI接口的器件一般都是先发送命令或者寄存器地址,然后读写数据
回复 支持 反对

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-13 09:01:31 | 显示全部楼层
yyx112358 发表于 2017-1-12 21:54
这个…………你得看协议才行。有说明书的话把时序图发上来,不然没法说
SPI接口的器件一般都是先发送命令 ...

ATT7053BU 的 SPI 通讯波形:

CS:片选(INPUT),允许访问控制线, CS 发生下降沿跳变时表示 SPI 操作开始, CS 发生上升沿跳变时表示 SPI 操作结束。
DIN:串行数据输入(INPUT),用于把数据传输到 ATT7053BU 中。
DOUT:串行数据输出(OUTPUT),用于从 ATT7053BU 寄存器中读出数据。
SCLK:串行时钟(INPUT),控制数据移出或移入串行口的传输率。上升沿放数据,下降沿取数据。 SCLK上升沿时将 ATT7053BU 寄存器中的数据放置于 DOUT 上输出, SCLK 下降沿时将 DIN 上的数据采样到ATT7053BU 中。

现在是想把芯片里的数据采上来,不太指导怎么写。

附图是时序图,附件是用户手册。

非常感谢!


读操作时序.png
写操作时序.png

ATT7053BU用户手册.pdf

700.69 KB, 下载次数: 205

ATT7053BU用户手册

回复 支持 反对

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-13 10:07:45 | 显示全部楼层
yyx112358 发表于 2017-1-12 21:54
这个…………你得看协议才行。有说明书的话把时序图发上来,不然没法说
SPI接口的器件一般都是先发送命令 ...

手册里面有个这个,应该是这个吧?
读寄存器则该命令寄存器读写位为 0,写寄存器则该命令寄存器读写位为 1,举例子说明:
若用户希望读取寄存器 EMUIE(30H)则应该发送数据如下:
1234.png
回复 支持 反对

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-13 10:09:16 | 显示全部楼层
yyx112358 发表于 2017-1-12 21:54
这个…………你得看协议才行。有说明书的话把时序图发上来,不然没法说
SPI接口的器件一般都是先发送命令 ...

求大大指点这个时序图要怎么使用?非常感谢。
回复 支持 反对

使用道具 举报

3

主题

548

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1383
金钱
1383
注册时间
2015-2-3
在线时间
197 小时
发表于 2017-1-13 12:24:04 | 显示全部楼层
照着时序图写嘛:
给你个示意程序:
[mw_shl_code=c,true]void ATT7053BU_Read(uint8_t cmd,uint8_t *dat)//cmd是指令,dat是用来存放返回数据的3字节数组指针
{
        SPI1_CS=0;//片选
        SPI_RWByte(cmd);//写入命令
        dat[2]=SPI_RWByte(cmd);//读取3个字节
        dat[1]=SPI_RWByte(cmd);
        dat[0]=SPI_RWByte(cmd);
        SPI1_CS=1;//取消片选
}

void        ATT7053BU_Write(uint8_t cmd,uint8_t *dat)
{
        SPI1_CS=0;
        SPI_RWByte(cmd);
        SPI_RWByte(dat[2]);
        SPI_RWByte(dat[1]);
        SPI_RWByte(dat[0]);
        SPI1_CS=1;       
}[/mw_shl_code]
当然,鉴于你这最长就24位,用联合体更好
回复 支持 反对

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-22 14:49:19 | 显示全部楼层
yyx112358 发表于 2017-1-13 12:24
照着时序图写嘛:
给你个示意程序:
[mw_shl_code=c,true]void ATT7053BU_Read(uint8_t cmd,uint8_t *dat ...

这是我这两天写好的工程,你能帮我看看我的代码有什么问题吗?非常感谢!

如图,读取的数据始终不变,即使我传入不同的寄存器地址。我现在是真的不知道哪里有问题了。

aaaaaaaaaaaaaaaaaaaaa.png

STM32_USART1_TXD ATT7053BU.rar

1.2 MB, 下载次数: 357

回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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