OpenEdv-开源电子网

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

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

[复制链接]

16

主题

78

帖子

0

精华

初级会员

Rank: 2

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

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

yinjiaotu_att.png

最佳答案

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

ATT7053BU是5V的,3.3V要选择ATT7053AU。 我有自己写了驱动代码,,有需求回复我就可以
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

chenguozeng 该用户已被删除
发表于 2017-1-12 15:43:43 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-13 14:14:20 | 显示全部楼层
本帖最后由 lsy3500 于 2017-1-13 14:29 编辑
chenguozeng 发表于 2017-1-12 16:03
ATT7053BU是5V的,3.3V要选择ATT7053AU。 我有自己写了驱动代码,,有需求回复我就可以

我按照你给我发的代码修改了下,改到这里发现了一些地方看不懂,你能再麻烦你帮我再看看吗?非常感谢。
附图是读取数据时序图
因为想要读数据,所以我先修改了读取函数:
[mw_shl_code=c,true]//这是我定义的引脚宏
#define  ATT7053BU_CS             GPIO_Pin_4
#define  ATT7053BU_CS_PORT    GPIOA

#define  ATT7053BU_CLK            GPIO_Pin_5
#define  ATT7053BU_CLK_PORT   GPIOA

#define  ATT7053BU_DOUT              GPIO_Pin_6
#define  ATT7053BU_DOUT_PORT     GPIOA

#define  ATT7053BU_DIN            GPIO_Pin_7
#define  ATT7053BU_DIN_PORT   GPIOA[/mw_shl_code]
[mw_shl_code=c,true]u32 SPI_Read(uint8_t address){        int i;        
        u32 temp_data = 0;        
        
        //SPI_CLK = 0; CLK初始状态为0
        GPIO_ResetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);//GPIO_ResetBits(GPIOA, GPIO_Pin_5);
        Delay(1);        

        //SPI_CLK = 1; 电平拉高
        GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
        Delay(2);        
        
        //CS = 0; 片选置0,使生效
        GPIO_ResetBits(ATT7053BU_CS_PORT, ATT7053BU_CS);
        Delay(5);               
                                       
        //SPI_CLK = 1;        //高电平,启动数据传输
        GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
        Delay(1);
        
        //-------------------------------------------------------        //这里为什么要把DIN置0没看懂
        GPIO_ResetBits(ATT7053BU_DIN_PORT, ATT7053BU_DIN);
        Delay(1);
        
        //时钟引脚拉低,置0
        GPIO_ResetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
        Delay(1);
        

        //----->这段循环没看懂,不知道是不是我注释的这些意思
        //首先这段代码意思是:把数据放入读取数据寄存器?
        //8bit命令 == 1bit读写标志(最高位) + 7bit要访问的内存地址
        address = address | 0x7F;        //得到低7位(要存放数据的寄存器地址),并且:最高位为0,表示读数据。
        for(i=7; i>=0; i--)
        {
                //上升沿,进循环之前CLK是低电平,循环结尾也是低电平。---->给上升沿是因为在上升沿传输数据
                //SPI_CLK = 1;        //给高电平,启动数据传输
                GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
                Delay(1);
               
                //这段if也看不懂
                //一开始以为条件中是:获取了address的最高位(读写指示位),然后右移到最低位,可后来发现为什么是i呢?每次循环获取第i位是什么意思?
                if(((address & (0x01<<(i-1)))>>(i-1)))         //address 地址从0x00到0x7F
                {
                        GPIO_SetBits(SDI_PORT, SDI_PIN);    //1表示主机向从机写数据        
                }
                else
                {
                        GPIO_ResetBits(SDI_PORT, SDI_PIN);
                }

               
                //SPI_CLK = 0;        //置0,因为要在下次循环时有上升沿,上升沿传输数据
                GPIO_ResetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
                Delay(1);        
        }//从机接收到命令后,开始送出数据,上升沿送数据
        Delay(2);        
        
        //置高
        //SPI_CLK = 1;        
        GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
        Delay(1);
        
        //SPI_CLK = 0;下降沿读取数据
        GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
        temp_data = temp_data | ATT7053BU_DOUT; //读取最低位(第0bit)数据
        Delay(1);        
        
        //读取剩下的 第1bit到23bit 数据
        for(i=1; i<=23; i++)
        {
                //SPI_CLK = 1; 置高
                GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
                Delay(1);
               
                //SPI_CLK = 0; 下降沿读取数据
                GPIO_ResetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
                Delay(1);

                //读取数据
                temp_data = (temp_data<<1) | ATT7053BU_DOUT;
        }
        
        //SPI_CS = 1;片选信号拉高,结束SPI数据读取
        GPIO_SetBits(ATT7053BU_CLK_PORT, ATT7053BU_CLK);
        
        return temp_data;
}
[/mw_shl_code]

读取数据时序图

读取数据时序图
回复

使用道具 举报

16

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2016-12-19
在线时间
50 小时
 楼主| 发表于 2017-1-16 11:04:32 | 显示全部楼层
本帖最后由 lsy3500 于 2017-1-22 14:51 编辑
chenguozeng 发表于 2017-1-12 15:43
ATT7053BU是5V的,3.3V要选择ATT7053AU。 我有自己写了驱动代码,,有需求回复我就可以

我现在想读取采集的电压值,
在手册里找到这个图片中的电压寄存器的定义。
现在想读取它里面的值,要怎么读取呢?
不知道代码要怎么写。


回复

使用道具 举报

1

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2016-12-22
在线时间
14 小时
发表于 2017-2-27 16:36:03 | 显示全部楼层
最近也在做7053bu的直流电压电流采集,可也发个程序参考吗,新手实在无从下手,谢谢了   1324109393@qq.com
回复

使用道具 举报

2

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2017-10-12
在线时间
1 小时
发表于 2018-6-5 10:15:48 | 显示全部楼层
怎么联系您
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2018-6-5
在线时间
0 小时
发表于 2018-6-5 11:06:19 | 显示全部楼层
可以发我一份ATT7053A的程序吗,谢谢啦,跪求!!!  1176574666@qq.com
顺便问一下,mcu是stm32f1系列的吗
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2018-11-19
在线时间
0 小时
发表于 2018-11-19 21:23:57 | 显示全部楼层
大神我也需要一份,正好遇到问题了,感激不尽!359790754@qq.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-2-27
在线时间
0 小时
发表于 2019-2-27 11:13:03 | 显示全部楼层
chenguozeng 发表于 2017-1-12 15:43
**** 作者被禁止或删除 内容自动屏蔽 ****

wo xiang kan yi xia ni de qu dong
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
67
金钱
67
注册时间
2019-4-6
在线时间
25 小时
发表于 2019-8-5 15:08:36 | 显示全部楼层
请问楼主还在吗,我想用用这个驱动程序,谢谢了,1083322529@qq.com
回复

使用道具 举报

7

主题

14

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2019-9-3
在线时间
18 小时
发表于 2019-9-3 11:46:31 | 显示全部楼层
大佬,能分享下程序吗?我这里只有ht芯片的例程371584831@qq.com
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2019-3-15
在线时间
10 小时
发表于 2019-11-29 10:07:45 | 显示全部楼层
chenguozeng 发表于 2017-1-12 15:43
**** 作者被禁止或删除 内容自动屏蔽 ****

您好,我最近在做ATT7053AU的测试,如果可以的话能发一份您以前写过的驱动代码借我参考一下吗,谢谢!1224829032@qq.com
回复

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2019-8-22
在线时间
23 小时
发表于 2019-12-30 09:30:24 | 显示全部楼层
能发一份参考吗,最近在做三相电流的采集,谢谢大佬了1085432645@qq.com
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-3-14
在线时间
0 小时
发表于 2020-3-14 12:53:38 | 显示全部楼层
您好,我想问您一下关于att7053的问题,我实在没办法了,跪求大佬2352060908@qq.com
回复

使用道具 举报

2

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
656
金钱
656
注册时间
2016-3-8
在线时间
122 小时
发表于 2020-3-27 23:32:07 | 显示全部楼层

您好,我想问您一下关于att7053的问题,我实在没办法了,跪求大佬954162629@qq.com
回复

使用道具 举报

4

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
289
金钱
289
注册时间
2015-10-7
在线时间
32 小时
发表于 2020-10-20 21:03:46 | 显示全部楼层
我用的ATT7053CU,程序肯定是没问题,需要注意配置SPI时,设置SPI的速度为128分频或256分频,同时记住时钟和数据捕获是从第几个时钟开始的。
SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;                          //时钟悬空低
SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;                  //数据捕获于第1个时钟沿
其次最重要的是SPI方式通讯时,需要把B0、B1悬空,SPI/UART引脚设置成SPI通讯模式,即悬空。我调试的时候就是因为这三个地方没注意导致耗时较长
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2020-11-7
在线时间
0 小时
发表于 2020-11-7 20:54:20 | 显示全部楼层
伟好好学习 发表于 2020-10-20 21:03
我用的ATT7053CU,程序肯定是没问题,需要注意配置SPI时,设置SPI的速度为128分频或256分频,同时记住时钟 ...

师兄,你好,能发分享一下的ATT7053cu的代码吗?我想用stm32f103来采集att7053的电压电流数据,但是不知道怎么下手,希望能从师兄的代码里面学习一下,邮箱地址:(976766599@qq.com),先谢谢师兄了。
回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-1-4
在线时间
13 小时
发表于 2020-11-27 10:55:59 | 显示全部楼层
伟好好学习 发表于 2020-10-20 21:03
我用的ATT7053CU,程序肯定是没问题,需要注意配置SPI时,设置SPI的速度为128分频或256分频,同时记住时钟 ...

兄弟,您用的是什么芯片,B0,B1是指单片机管脚吗?
我弄的关天,SPI硬件,可读,但不写不进寄存器
回复

使用道具 举报

2

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2016-1-4
在线时间
13 小时
发表于 2020-11-27 20:13:59 | 显示全部楼层
伟好好学习 发表于 2020-10-20 21:03
我用的ATT7053CU,程序肯定是没问题,需要注意配置SPI时,设置SPI的速度为128分频或256分频,同时记住时钟 ...

已解决了,谢谢兄弟提醒。原速度设定太快了。
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
28
金钱
28
注册时间
2020-10-18
在线时间
7 小时
发表于 2021-11-5 17:07:52 | 显示全部楼层
跪求    641300431@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

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

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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