OpenEdv-开源电子网

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

stm32 ATT7022EU SPI通讯采样,求大神解救啊,郁闷好几天了

[复制链接]

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
发表于 2016-9-8 16:58:01 | 显示全部楼层 |阅读模式
1金钱
这是参考本吧“黄洪文”的代码,但还是不行啊,求大神解救啊,郁闷好几天了,邮箱:“786668052@qq.com
void SPI2_WriteByte(u8 TxData)
{  
         u16 retry=0;     
         while((SPI2->SR&1<<1)==0)
         {
                        retry++;
                        if(retry>0XFFFE)return;
         }     
         SPI2->DR=TxData;   
}

u8 SPI2_ReadByte(void)
{
        u16 retry=0;               
  SPI2_WriteByte(0XFF);
  while(SPI_I2S_GetFlagStatus(SPI2, SPI_I2S_FLAG_RXNE) == RESET)
  {
                retry++;
    if(retry>0XFFFE)
                        return 0;
  }            
  return SPI2->DR;         
}
/* &#182;&#212;SPI_ATT7022EUμ&#196;é&#207;2&#227;&#182;áD′2ù×÷oˉêy */
u32 SPI_Read(u8 Reg_Adrr)
{
        u32 rtemp;
        u8 i;
        u8 a[3];
        ATT7022EU_CS_EN;
        delay_us(2);
        for( i = 0; i < 3; i ++)
        {
                a=SPI2_ReadByte();
        }
        rtemp = a[0];
        rtemp = (rtemp<<8)+a[1];
        rtemp = (rtemp<<8)+a[2];
        ATT7022EU_CS_DIS;
        return rtemp;
}

void SPI_Write(u8 Reg_Adrr,u32 Data)
{
         u8 i;
         u8 b[3];
         ATT7022EU_CS_EN;
         b[0]=Data>>16;
         b[1]=Data>>8;
         b[2]=Data;
         for(i=0;i<3;i++)
         {
                                                SPI2_WriteByte(b);
         }
         ATT7022EU_CS_DIS;   
}

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

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-9-8 17:07:11 | 显示全部楼层
是原子的硬SPI驱动代码吗?如果是,没问题,我验证过SI4432的SPI,但SPI初始化话需要看看是否修改!!
初始化里将        SPI_InitStructure.SPI_CPOL = SPI_CPOL_LOW;       
改成SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;               
试下                                                                                               
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-9-8 17:15:17 | 显示全部楼层
主要就是想说,你的看看芯片的SPI时序,并不是所有SPI接口芯片的时序都是一样的,,初始化需要修改下!!
shop60994719.taobao.com
回复

使用道具 举报

7

主题

171

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2337
金钱
2337
注册时间
2015-9-6
在线时间
536 小时
发表于 2016-9-8 17:15:24 | 显示全部楼层
本帖最后由 键盘侠 于 2016-9-8 17:16 编辑

QQ截图20160908171232.jpg
人家手册都是中文,有啥不明白的,时序,案例也这么直接就给你了。
而且你复制过去的那个程序有点问题吧。 QQ截图20160908171343.jpg 这句话里面不应该是a[i ] = SPI2_ReadByte(); ?
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-9-8 19:52:59 | 显示全部楼层
键盘侠 发表于 2016-9-8 17:15
人家手册都是中文,有啥不明白的,时序,案例也这么直接就给你了。
而且你复制过去的那个程序有点问题吧 ...

我也这样写了测试过了,没反应啊,大神,有具体代码案例吗?实在是弄了几天没反应啊
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2016-9-9 08:19:53 | 显示全部楼层
把你spi初始化一块发过来
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-9-9 09:16:44 | 显示全部楼层
我一直用HLW8012 HLW8013.....我觉得比ATT的好.................
shop60994719.taobao.com
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-9-9 09:55:47 | 显示全部楼层
止天 发表于 2016-9-9 08:19
把你spi初始化一块发过来

//ATT7022EU3&#245;ê&#188;&#187;ˉ
void ATT7022_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );//PORTBê±&#214;óê1&#196;ü

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;  // PB12 í&#198;íì
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        GPIO_SetBits(GPIOB,GPIO_Pin_12);

  CS = 1;                                //
        SPI2_Init();                           //3&#245;ê&#188;&#187;ˉSPI
        SPI2_SetSpeed(SPI_BaudRatePrescaler_2);//éè&#214;&#195;&#206;a18Mê±&#214;ó,&#184;&#223;&#203;ù&#196;£ê&#189;
}

void SPI2_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
  SPI_InitTypeDef  SPI_InitStructure;

        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_GPIOB, ENABLE );//PORTBê±&#214;óê1&#196;ü
        RCC_APB1PeriphClockCmd(        RCC_APB1Periph_SPI2,  ENABLE );//SPI2ê±&#214;óê1&#196;ü        

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //PB13/14/15&#184;′ó&#195;í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉGPIOB

        GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);  //PB13/14/15é&#207;à-

        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //éè&#214;&#195;SPIμ¥&#207;ò&#187;ò&#213;&#223;&#203;&#171;&#207;òμ&#196;êy&#190;Y&#196;£ê&#189;:SPIéè&#214;&#195;&#206;a&#203;&#171;&#207;&#223;&#203;&#171;&#207;òè&#171;&#203;&#171;1¤
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //éè&#214;&#195;SPI1¤×÷&#196;£ê&#189;:éè&#214;&#195;&#206;a&#214;÷SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //éè&#214;&#195;SPIμ&#196;êy&#190;Y′óD&#161;:SPI·¢&#203;í&#189;óê&#213;8&#206;&#187;&#214;&#161;&#189;á11
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //′&#174;DDí&#172;2&#189;ê±&#214;óμ&#196;&#191;&#213;&#207;D×′ì&#172;&#206;a&#184;&#223;μ&#231;&#198;&#189;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //′&#174;DDí&#172;2&#189;ê±&#214;óμ&#196;μú&#182;t&#184;&#246;ì&#248;±&#228;&#209;&#216;£¨é&#207;éy&#187;ò&#207;&#194;&#189;μ£&#169;êy&#190;Y±&#187;2é&#209;ù
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSSD&#197;o&#197;óéó2&#188;t£¨NSS1ü&#189;&#197;£&#169;&#187;1ê&#199;èí&#188;t£¨ê1ó&#195;SSI&#206;&#187;£&#169;1üàí:&#196;ú2&#191;NSSD&#197;o&#197;óéóDSSI&#206;&#187;&#191;&#216;&#214;&#198;
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;                //&#182;¨ò&#229;2¨ì&#216;&#194;ê&#212;¤·&#214;&#198;μμ&#196;&#214;μ:2¨ì&#216;&#194;ê&#212;¤·&#214;&#198;μ&#214;μ&#206;a256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //&#214;&#184;&#182;¨êy&#190;Y′&#171;ê&#228;′óMSB&#206;&#187;&#187;1ê&#199;LSB&#206;&#187;&#191;aê&#188;:êy&#190;Y′&#171;ê&#228;′óMSB&#206;&#187;&#191;aê&#188;
        SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC&#214;μ&#188;&#198;&#203;&#227;μ&#196;&#182;à&#207;&#238;ê&#189;
        SPI_Init(SPI2, &SPI_InitStructure);  //&#184;ù&#190;YSPI_InitStruct&#214;D&#214;&#184;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèSPIx&#188;&#196;′&#230;&#198;÷

        SPI_Cmd(SPI2, ENABLE); //ê1&#196;üSPIíaéè
       
        SPI2_ReadWriteByte(0xff);//&#198;&#244;&#182;ˉ′&#171;ê&#228;                 


}   
//SPI &#203;ù&#182;èéè&#214;&#195;oˉêy
//SpeedSet:
//SPI_BaudRatePrescaler_2   2·&#214;&#198;μ   
//SPI_BaudRatePrescaler_8   8·&#214;&#198;μ   
//SPI_BaudRatePrescaler_16  16·&#214;&#198;μ  
//SPI_BaudRatePrescaler_256 256·&#214;&#198;μ
  
void SPI2_SetSpeed(u8 SPI_BaudRatePrescaler)
{
  assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));
        SPI2->CR1&=0XFFC7;
        SPI2->CR1|=SPI_BaudRatePrescaler;        //éè&#214;&#195;SPI2&#203;ù&#182;è
        SPI_Cmd(SPI2,ENABLE);

}
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-9-9 09:57:06 | 显示全部楼层
密耳 发表于 2016-9-9 09:16
我一直用HLW8012 HLW8013.....我觉得比ATT的好.................

主要是项目用到这个芯片做电表啊
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-9-9 09:58:49 | 显示全部楼层
键盘侠 发表于 2016-9-8 17:15
人家手册都是中文,有啥不明白的,时序,案例也这么直接就给你了。
而且你复制过去的那个程序有点问题吧 ...

这个手册给的我也看了,不怎么明白,不知道怎么把read,write时序函数转化成可以读取寄存器的值,这个直接用当然是错的了啊
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-9-9 09:59:24 | 显示全部楼层
密耳 发表于 2016-9-8 17:07
是原子的硬SPI驱动代码吗?如果是,没问题,我验证过SI4432的SPI,但SPI初始化话需要看看是否修改!!
初 ...

SPI驱动是通用的STM32代码
回复

使用道具 举报

7

主题

171

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2337
金钱
2337
注册时间
2015-9-6
在线时间
536 小时
发表于 2016-9-9 11:32:22 | 显示全部楼层
SPI初始化里面
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); 这句话屏蔽掉
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High  改成  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low
试试看
回复

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1606
金钱
1606
注册时间
2015-6-10
在线时间
223 小时
发表于 2016-9-12 08:45:32 | 显示全部楼层
楼上说的对,时序图上边显示的空闲低电平,第二个沿触发
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-9-12 08:54:28 | 显示全部楼层
我刚试了下
u32 ATT7053_ReadReg(u8 addr)                                                   //&#182;áè&#161;&#188;&#196;′&#230;&#198;÷μ&#196;&#214;μ
{
        u32 temp=0;
        CS = 1;
        SPI2_ReadWriteByte(addr);                                                    //·¢&#203;í&#182;áè&#161;&#188;&#196;′&#230;&#198;÷μ&#216;&#214;·
        temp|=SPI2_ReadWriteByte(0xff);                                        //&#182;á24&#184;&#246;×&#214;&#189;ú       
        temp<<=8;                                                                                                                                //×óò&#198;8&#206;&#187;
        temp|=SPI2_ReadWriteByte(0xff);
        temp<<=8;
        temp|=SPI2_ReadWriteByte(0xff);
        CS = 0;       
        return temp;
}
//D′&#188;&#196;′&#230;&#198;÷
void ATT7053_WriteReg(u8 addr, u32 value)          //D′&#188;&#196;′&#230;&#198;÷
{
        CS = 1;
        SPI2_ReadWriteByte(addr|0x80);                                          //D′×&#238;&#184;&#223;&#206;&#187;&#214;&#195;1
        SPI2_ReadWriteByte(value>>16);   
        SPI2_ReadWriteByte(value>>8);   
        SPI2_ReadWriteByte(value);   
        CS = 0;
}
shop60994719.taobao.com
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-9-12 15:26:06 | 显示全部楼层
密耳 发表于 2016-9-12 08:54
我刚试了下
u32 ATT7053_ReadReg(u8 addr)                                                   //&#182;áè&#161;&#188;&#196;′&#230;&#198;÷μ&#1 ...

你这读写不加时序应该读不到数据吧
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-9-12 16:07:17 | 显示全部楼层
金山城 发表于 2016-9-12 15:26
你这读写不加时序应该读不到数据吧

硬SPI,你认为是模拟IO吗?
shop60994719.taobao.com
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-10-20 20:59:32 | 显示全部楼层
本帖最后由 金山城 于 2016-10-20 21:04 编辑

@正点原子 原子哥,你好,我最近在做stm32通过spi读取ATT7022EU三相电表技能芯片数据的项目,搞了好多天,模拟spi的读出来了,可是导师非要硬件SPI,求解啊,导师都快要把我吃了。。。真的求教啊#include "stm32f2xx.h"#include "ATT7022EU.h"
#include "ws_spi.h"
void SPI_Configuration(void)
{
        SPI_InitTypeDef SPI_InitStruct;         
        GPIO_InitTypeDef GPIO_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);

        GPIO_PinAFConfig(GPIOB,GPIO_PinSource13,GPIO_AF_SPI2);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_SPI2);
        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_SPI2);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;  
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;  
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_DOWN;  
        GPIO_Init(GPIOB, &GPIO_InitStructure);

        SPI_I2S_DeInit(SPI2);
        SPI_InitStruct.SPI_Direction=         SPI_Direction_2Lines_FullDuplex;
        SPI_InitStruct.SPI_DataSize = SPI_DataSize_8b;
        SPI_InitStruct.SPI_Mode = SPI_Mode_Master;
        SPI_InitStruct.SPI_CPOL = SPI_CPOL_Low;
        SPI_InitStruct.SPI_CPHA = SPI_CPHA_2Edge;
        SPI_InitStruct.SPI_NSS = SPI_NSS_Soft ;
        SPI_InitStruct.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; //60MHz/128=468750Hz~468KHz<500KHz
        SPI_InitStruct.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStruct.SPI_CRCPolynomial = 7;

        SPI_Init(SPI2, &SPI_InitStruct);

        SPI_Cmd(SPI2, ENABLE);
}

u8 SPI2_ReadWriteByte(u8 TxData)
{               
        u16 retry=0;                                 
        while((SPI2->SR&1<<1)==0)               
                retry++;
                if(retry>=0XFFFE)return 0;        
        SPI2->DR=TxData;                                  
        retry=0;
        while((SPI2->SR&1<<0)==0)                
        {
                retry++;
                if(retry>=0XFFFE)return 0;       
        }                                                              
        return SPI2->DR;                                                              
}

主要不知道读写ATT7022EU数据的函数怎么弄。。。。。。。。。。。。
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2016-9-8
在线时间
6 小时
 楼主| 发表于 2016-10-20 21:14:48 | 显示全部楼层
金山城 发表于 2016-10-20 20:59
@正点原子 原子哥,你好,我最近在做stm32通过spi读取ATT7022EU三相电表技能芯片数据的项目,搞了好多天, ...

我又看了会你一系列的代码,已经调试好了,不用麻烦您了,非常感谢。
回复

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2016-9-15
在线时间
14 小时
发表于 2016-10-22 12:48:03 | 显示全部楼层
金山城 发表于 2016-10-20 21:14
我又看了会你一系列的代码,已经调试好了,不用麻烦您了,非常感谢。

有参考代码吗  ? 我也卡在这个问题上了  能给我发个参考的吗? 多谢
回复

使用道具 举报

0

主题

8

帖子

0

精华

新手上路

积分
40
金钱
40
注册时间
2017-4-19
在线时间
3 小时
发表于 2017-4-19 18:11:25 | 显示全部楼层
qiqizhibao 发表于 2016-10-22 12:48
有参考代码吗  ? 我也卡在这个问题上了  能给我发个参考的吗? 多谢

[mw_shl_code=c,true]/*******************************************************************************
* Function Name  : SPI_Init
* Description    : 3&#245;ê&#188;&#187;ˉSPIμ&#196;1ü&#189;&#197;
* Input          : None
* Output         : None
* Return         : None
* Attention                         : None
*******************************************************************************/
void SPIx_Init(SPI_TypeDef * SPIx)
{
        SPI_InitTypeDef SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        if(SPIx == SPI1)
        {
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_SPI1, ENABLE);        //GPIO,SPIê±&#214;óê1&#196;ü
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                                                                                         //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOA, &GPIO_InitStructure);
//                GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);                                                                                 //3&#245;ê&#188;&#187;ˉGPIO
        }
        else if(SPIx == SPI2)
        {
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB1Periph_SPI2, ENABLE);        //GPIO,SPIê±&#214;óê1&#196;ü
                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                                                                                                         //&#184;′ó&#195;í&#198;íìê&#228;3&#246;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_Init(GPIOB, &GPIO_InitStructure);
//                GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15);                                                                         //3&#245;ê&#188;&#187;ˉGPIO       
        }
       
        //&#213;aà&#239;&#195;&#187;óD&#182;&#188;&#182;&#212;&#198;&#172;&#209;&#161;D&#197;o&#197;CSμ&#196;3&#245;ê&#188;&#187;ˉ,Dèòa&#212;úêμ&#188;êê1ó&#195;SPIμ&#196;2&#191;·&#214;è¥×&#246;IO&#191;ú3&#245;ê&#188;&#187;ˉ
       
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;                                         //éè&#214;&#195;SPIè&#171;&#203;&#171;1¤
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                                                                                                          //éè&#214;&#195;SPI1¤×÷&#196;£ê&#189;:éè&#214;&#195;&#206;a&#214;÷SPI
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                                                                                                         //8&#206;&#187;&#214;&#161;&#189;á11
        /* START        éè&#214;&#195;&#213;aá&#189;&#184;&#246;±&#228;á&#191;à′&#209;&#161;&#212;&#241;&#203;&#196;&#214;&#214;2&#187;í&#172;μ&#196;SPI1¤×÷&#196;£ê&#189; */
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                                                                                                                                        //ê±&#214;ó&#207;à&#206;&#187;£o&#191;&#213;&#207;Dê±&#214;ó&#206;aμí
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                                                                                                                          //êy&#190;Y2&#182;&#187;&#241;óúμú&#182;t&#184;&#246;ê±&#214;ó&#209;&#216;
        /* END                éè&#214;&#195;&#213;aá&#189;&#184;&#246;±&#228;á&#191;à′&#209;&#161;&#212;&#241;&#203;&#196;&#214;&#214;2&#187;í&#172;μ&#196;SPI1¤×÷&#196;£ê&#189; */
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                                                                                                                          //NSSD&#197;o&#197;óéó2&#188;t1üàí
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;                                 //&#212;¤·&#214;&#198;μ256
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                                                                                                         //êy&#190;Y′&#171;ê&#228;′óMSB&#191;aê&#188;:MSB&#212;ú&#199;°LSB&#212;úoó
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                                                                                                                                 //CRC&#214;μ&#188;&#198;&#203;&#227;μ&#196;&#182;à&#207;&#238;ê&#189;
        SPI_Init(SPIx, &SPI_InitStructure);                                                                                                                                                                 //&#184;ù&#190;Y&#214;&#198;&#182;¨μ&#196;2&#206;êy3&#245;ê&#188;&#187;ˉíaéèSPIx&#188;&#196;′&#230;&#198;÷
        SPI_Cmd(SPIx, ENABLE);                                                                                                                                                                                                                         //ê1&#196;üSPIíaéè
        SPIx_ReadWriteByte(SPIx,0xff);                                                                                                                                                                                        //&#198;&#244;&#182;ˉ′&#171;ê&#228;,&#213;a&#190;&#228;&#187;°×&#238;′ó×÷ó&#195;ê&#199;&#198;&#244;&#182;ˉ′&#171;ê&#228;,&#206;&#172;3&#214;MOSI&#206;a&#184;&#223;μ&#231;&#198;&#189;,·&#199;±&#216;òaó&#239;&#190;&#228;
}

/********************************************************************************
*SPI &#203;ù&#182;èéè&#214;&#195;oˉêy
*SpeedSet:
*SPI_BaudRatePrescaler_2                2·&#214;&#198;μ(SPI 36M@sys 72M)
*SPI_BaudRatePrescaler_8         8·&#214;&#198;μ (SPI 9M@sys 72M)
*SPI_BaudRatePrescaler_16         16·&#214;&#198;μ (SPI 4.5M@sys 72M)
*SPI_BaudRatePrescaler_256 256·&#214;&#198;μ (SPI 281.25K@sys 72M)
********************************************************************************/
void SPIx_SetSpeed(SPI_TypeDef * SPIx,u8 SpeedSet)
{
        SPI_InitTypeDef SPI_InitStructure;
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;  
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

        SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
        SPI_InitStructure.SPI_CRCPolynomial = 7;
        SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ;
        SPI_Init(SPIx, &SPI_InitStructure);
        SPI_Cmd(SPIx,ENABLE);
}

/********************************************************************************
*SPIx &#182;áD′ò&#187;&#184;&#246;×&#214;&#189;úêy&#190;Y
*TxData:òaD′è&#235;μ&#196;×&#214;&#189;úêy&#190;Y£&#172;&#182;áè&#161;êy&#190;Yμ&#196;ê±oò£&#172;′&#171;è&#235;0x00
*·μ&#187;&#216;&#214;μ:&#182;áè&#161;μ&#189;μ&#196;×&#214;&#189;úêy&#190;Y
********************************************************************************/
uint8_t SPIx_ReadWriteByte(SPI_TypeDef * SPIx,uint8_t TxData)
{
        uint8_t retry=0;
        while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET)        //&#188;ì2é&#214;&#198;&#182;¨μ&#196;SPI±ê&#214;&#190;&#206;&#187;éè&#214;&#195;ó&#235;·&#241;:·¢&#203;í&#187;o′&#230;&#191;&#213;±ê&#214;&#190;&#206;&#187;
        {
                retry++;
                if(retry>200)return 0;
        }
        SPI_I2S_SendData(SPIx, TxData);                                                                                                                                 //í¨1yíaéèSPIx·¢&#203;íò&#187;&#184;&#246;×&#214;&#189;úêy&#190;Y
        retry=0;
        while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET)        //&#188;ì2é&#214;&#198;&#182;¨μ&#196;SPI±ê&#214;&#190;&#206;&#187;éè&#214;&#195;ó&#235;·&#241;:&#189;óêü&#187;o′&#230;·&#199;&#191;&#213;±ê&#214;&#190;&#206;&#187;
        {
                retry++;
                if(retry>200)return 0;
        }
        return SPI_I2S_ReceiveData(SPIx);                                                                                                                                //·μ&#187;&#216;í¨1ySPIx×&#238;&#189;ü&#189;óêüμ&#196;êy&#190;Y
}[/mw_shl_code]

硬件SPI初始化和读写数据函数
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-11-8
在线时间
19 小时
发表于 2018-1-31 16:59:33 | 显示全部楼层
密耳 发表于 2016-9-12 08:54
我刚试了下
u32 ATT7053_ReadReg(u8 addr)                                                   //&#182;áè&#161;&#188;&#196;′&#230;&#198;÷μ&#1 ...

你好,为什么ATT7053_WriteReg这个函数,写地址的时候要|0x80
回复

使用道具 举报

0

主题

4

帖子

0

精华

初级会员

Rank: 2

积分
94
金钱
94
注册时间
2014-11-8
在线时间
19 小时
发表于 2018-2-1 14:03:15 | 显示全部楼层
密耳 发表于 2016-9-12 08:54
我刚试了下
u32 ATT7053_ReadReg(u8 addr)                                                   //&#182;áè&#161;&#188;&#196;′&#230;&#198;÷μ&#1 ...

看了手册后面的校准,懂了
回复

使用道具 举报

8

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2018-3-22
在线时间
32 小时
发表于 2018-4-25 10:59:32 | 显示全部楼层
楼主 还在吗? 我导师也让我做这样的项目,同样调不出来,好郁闷啊 ———楼主能否发给我一份程序参考参考,万分感谢啊  245362828@qq.com
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-18 20:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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