STM8单片机 SPI读写 GV7704的寄存器数据

li_ry7342 2016-12-26 06:03:28
目前重打印信息看:正确最后2句打印应该是0303的值。求大神指教。
lirongyong---hello
write--one-vGv7700Addr=68f2
lirongyong--write-----data=ff00
write--one-vValue=303
lirongyong--write-----data=303
lirongyong--read-----data=fff2
lirongyong--read--F---data=f2

代码:
void main(void)
{
uint8_t i;
//SPI PIN INIT
GPIO_DeInit(GPIOC);//pc5,6,7-sck,mosi,miso GPIO_MODE_IN_FL_NO_IT GPIO_MODE_OUT_PP_LOW_FAST
GPIO_Init(GPIOC,GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_DeInit(GPIOA);//PA3-NSS
GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_FAST);
//
/*High speed internal clock prescaler: 1*/
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

UART1_DeInit();

UART1_Init((uint32_t)115200, UART1_WORDLENGTH_8D, UART1_STOPBITS_1, UART1_PARITY_NO,
UART1_SYNCMODE_CLOCK_DISABLE, UART1_MODE_TXRX_ENABLE);
/* SPI configuration */
SPI_DeInit();
/* Initialize SPI in Slave mode */
SPI_Init(SPI_FIRSTBIT_MSB, SPI_BAUDRATEPRESCALER_2, SPI_MODE_MASTER, SPI_CLOCKPOLARITY_LOW,
SPI_CLOCKPHASE_1EDGE, SPI_DATADIRECTION_2LINES_FULLDUPLEX, SPI_NSS_SOFT,(uint8_t)0x07);
/* Enable the SPI*/
SPI_Cmd(ENABLE);
/* Output a message on Hyperterminal using printf function */
//printf("\n\rUART1 Example :retarget the C library printf()/getchar() functions to the UART\n\r");
//printf("\n\rEnter Text\n\r");
printf("\n\r lirongyong---hello \n\r");
//semGv_CodeGV7704(0);//init Gv7704
semGv_CfgGV7704(0);
}
uint8_t semGv_CfgGV7704(uint8_t vpCs)
{
vRegAddr = 0x68f2;
vWrValue = 0x0303;
vRdValue = 0;
rc = semGv7xGspi_WriteOneByteToGV77xxMem(vpCs,vRegAddr,0,vWrValue);
if(rc == FALSE_SEM)
{
return FALSE_SEM;
}
semGv7xGspi_ReadOneByteFromGV77xxMem(vpCs,vRegAddr,0,&vRdValue);
}
Bool_SEM semGv7xGspi_WriteOneByteToGV77xxMem(uInt8_SEM vpCs,uInt32_SEM vpBaseAddr,uInt32_SEM vpMemOffsetAddr,uInt32_SEM vpRegValue)
{
Bool_SEM rc=TRUE_SEM;
uInt32_SEM vGv7700Addr=0x0;
uInt32_SEM vValue=0x0;

vpMemOffsetAddr +=vpBaseAddr;

//get regaddr
vGv7700Addr=
(0 << 31) | /* R/W 1:R 0:W*/ \
(0 << 30) | /* BCAST */ \
(1 << 29) | /* EMEM */ \
(0 << 28) | /* AutoInc */ \
(0x00 << 21) | /* unit address */ \
(vpMemOffsetAddr&0x1FFFFF); /* reg address */
printf("\r\n write--one-vGv7700Addr=%x \n\r",vGv7700Addr);
/*0-1-select the chip*/
semGv7xGspi_Cs(vpCs,ENABLE_SEM);

/*0-2-write reg_addr & cmd*/
rc = semGv7xGspi_SingleWrite(vpCs,32, &vGv7700Addr,1);

semGv7xGspi_Cs(vpCs,DISABLE_SEM);

printf("\r\n lirongyong--write-----data=%x \n\r",semGv7xGspi_SingleWrite(vpCs,32, &vGv7700Addr,1));

/*
if(rc == FALSE_SEM)
{
return FALSE_SEM;
}
*/
/*0-3-write data*/
vValue = (vpRegValue&0xFF)|((vpRegValue&0xFF)<<8);
printf("\r\n write--one-vValue=%x \n\r",vValue);

semGv7xGspi_Cs(vpCs,ENABLE_SEM);

rc = semGv7xGspi_SingleWrite(vpCs,16, &vValue,1);
printf("\r\n lirongyong--write-----data=%x \n\r",semGv7xGspi_SingleWrite(vpCs,16, &vValue,1));
/*
if(rc == FALSE_SEM)
{
return FALSE_SEM;
}
*/
/*0-3-disselect the chip*/
semGv7xGspi_Cs(vpCs,DISABLE_SEM);

return TRUE_SEM;
}
Bool_SEM semGv7xGspi_ReadOneByteFromGV77xxMem(uInt8_SEM vpCs,uInt32_SEM vpBaseAddr,uInt32_SEM vpMemOffsetAddr,uInt32_SEM *p_vpRegValue)
{
Bool_SEM rc = TRUE_SEM;
uInt32_SEM vGv7700Addr=0x0;
//uInt32_SEM vValue=0x0;

vpMemOffsetAddr +=vpBaseAddr;
//get regaddr
vGv7700Addr=
(1ul << 31) | /* R/W 1:R 0:W*/ \
(0 << 30) | /* BCAST */ \
(1 << 29) | /* EMEM */ \
(0 << 28) | /* AutoInc */ \
(0x00 << 21) | /* unit address */ \
(vpMemOffsetAddr&0x1FFFFF); /* reg address */

/*0-1-select the chip*/
semGv7xGspi_Cs(vpCs,ENABLE_SEM);

/*0-2-write reg_addr & cmd*/
rc = semGv7xGspi_SingleWrite(vpCs,32,&vGv7700Addr,1);

semGv7xGspi_Cs(vpCs,DISABLE_SEM);

printf("\r\n lirongyong--read-----data=%x \n\r",semGv7xGspi_SingleWrite(vpCs,32,&vGv7700Addr,1));
/*
if(rc == FALSE_SEM)
{
return FALSE_SEM;
}
*/
/*0-3-read data*/
semGv7xGspi_Cs(vpCs,ENABLE_SEM);

semGv7xGspi_SingleRead(vpCs,32, p_vpRegValue,1);
printf("\r\n lirongyong--read--F---data=%x \n\r",semGv7xGspi_SingleRead(vpCs,16, p_vpRegValue,1));
*p_vpRegValue &=0xFF;

/*0-4-disselect the chip*/
semGv7xGspi_Cs(vpCs,DISABLE_SEM);

return TRUE_SEM;
}
uInt8_SEM semGv7xGspi_SingleRead(uInt8_SEM vpCs, uInt8_SEM vpBitLen,uInt32_SEM *pu32Data,uInt32_SEM vpDataLen)
{
uInt8_SEM Data = 0;

/*!< Wait until the transmit buffer is empty */
while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET)
{}
/*!< Send the byte */
SPI_SendData(*pu32Data);

/*!< Wait until a data is received */
while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET)
{}
/*!< Get the received data */
Data = SPI_ReceiveData();
return Data;

// return TRUE_SEM;
}
uInt8_SEM semGv7xGspi_SingleWrite(uInt8_SEM vpCs, uInt8_SEM vpBitLen,uInt32_SEM *pu32Data,uInt32_SEM vpDataLen)
{
/*!< Wait until the transmit buffer is empty */
while (SPI_GetFlagStatus(SPI_FLAG_TXE) == RESET)
{}
/*!< Send the byte */
SPI_SendData(*pu32Data);
/*!< Wait to receive a byte*/
while (SPI_GetFlagStatus(SPI_FLAG_RXNE) == RESET)
{}
/*!< Return the byte read from the SPI bus */
return SPI_ReceiveData();
return TRUE_SEM;
}
void semGv7xGspi_Cs(uInt8_SEM vpCs,Bool_SEM vpCsEnable)
{
if(vpCsEnable)
GPIO_WriteLow(GPIOA,GPIO_PIN_3);
else
GPIO_WriteHigh(GPIOA,GPIO_PIN_3);

}
...全文
3550 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_17706457 2018-03-21
  • 打赏
  • 举报
回复
楼主有semGv_CodeGV7704函数的源代码??希望能提供一下
phph1330 2018-01-19
  • 打赏
  • 举报
回复
我也是在用STM8的SPI读写GV7704,现在没法从MISO读到数据?
phph1330 2018-01-19
  • 打赏
  • 举报
回复
你是怎么发送地址数据的,寄存器只有16位,规格书上还有拓展地址,这个是要怎么处理?
LT叶鹏 2017-08-01
  • 打赏
  • 举报
回复
请问楼主问题解决了吗?
z359790754 2017-04-28
  • 打赏
  • 举报
回复
顶………………………………
li_ry7342 2016-12-26
  • 打赏
  • 举报
回复
没有人回复吗,求大神顶。

3,405

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 设计模式
社区管理员
  • 设计模式
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧