新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2020-4-28
- 在线时间
- 3 小时
|
1金钱
在用SPI读取一款电能计量芯片寄存器值时候,逐步调试与全速运行得到的值不一样,网上查了好多都没头绪,求教各位是什么原因,代码如下:
u32 READ_Att7022(u8 Address)
{
u8 i, bTemp;
u32 dwData;
SPI_CS_HIGH();
SPI_CLK_LOW();
SPI_CS_LOW(); // 开启SPI传输
bTemp = 0x80;
for(i=0; i<8; i++) //Write the Address
{
SPI_CLK_HIGH();
if(Address & bTemp)
{
SPI_DI_HIGH();
}
else
SPI_DI_LOW();
bTemp >>= 1;
delay_us(1) ;
SPI_CLK_LOW();
delay_us(1) ;
}
delay_us(3);
dwData = 0x00000000;//Read 24bit
for(i=0; i<24; i++)
{
dwData <<= 1;
SPI_CLK_HIGH();
// Delay_us(3);
if (RDSPIData)
{
dwData |= 1;
}
else
;
// Delay_us(1);
SPI_CLK_LOW();
delay_us(1);
}
SPI_CS_HIGH(); //关闭SPI传输
delay_us(2);
return dwData;
}
#define SPI_CS_HIGH() GPIO_SetBits(GPIOE, GPIO_Pin_15)
#define SPI_DI_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_15)
#define SPI_DO_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_14)
#define SPI_CLK_HIGH() GPIO_SetBits(GPIOB, GPIO_Pin_13)
#define SPI_CS_LOW() GPIO_ResetBits(GPIOE, GPIO_Pin_15)
#define SPI_DI_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_15)
#define SPI_DO_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_14)
#define SPI_CLK_LOW() GPIO_ResetBits(GPIOB, GPIO_Pin_13) //对应ATT7022上的管脚
#define RDSPIData GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)//读数据
|
|