Part Number:TDC7200
使用STM32的SPI读取TDC7200的值,读出来的全是0
main.c文件中
uint8_t Q;
uint16_t W;
TDC7200_Init();
TDC7200_TIME1(&Q,&W);
OLED_Init();
OLED_ShowNum(16,16,Q,4,16,1);
OLED_ShowNum(0,32,W,4,16,1);
spi.c文件中
uint8_t MySPI_SwapByte(uint8_t ByteSend){
uint8_t i , ByteReceive = 0x00;
for(i = 0; i < 8; i++){
MySPI_W_MOSI(ByteReceive&(0x80>>i));
MySPI_W_SCK(1);
if(MySPI_R_MISO()==1){ByteReceive|=(0x80>>i);}
MySPI_W_SCK(0);
}
return ByteReceive;
}
void TDC7200_TIME1(uint8_t *q,uint16_t *w)
{
MySPI_Start();
MySPI_SwapByte(0x11);//读取时钟计数器值
*q = MySPI_SwapByte(0xFF);
*w = MySPI_SwapByte(0xFF);
*w <<= 8;
*w |= MySPI_SwapByte(0xFF);
MySPI_Stop();
}
电路图如下
zhiwei zheng:
这个是什么问题呀,接线不对还是数据没有发送成功?
,
Alice:
您好,
单纯从代码看,uint8_t MySPI_SwapByte(uint8_t ByteSend)函数中ByteSend变量没用到,
导致MySPI_SwapByte(0x11);//读取时钟计数器值 ———0x11没有实际发送出去。
没理解这段代码的作用,您可以用示波器实际监测一下SPI口的波形看一下。
,
zhiwei zheng:
.
,
Alice:
您好,
建议把程序中发送和接收用两个函数写, 参考数据手册“Figure 21. SPI Protocol”中的时序。
可先测试寄存器默认值来检查SPI时序,比如01h默认值是40h。
,
zhiwei zheng:
您好,
请问有没有参考程序啊
,
Alice:
您好,
很抱歉没有参考程序,寄存器配置的话可以使用EVM GUI:
www.ti.com/…/TDC7200EVM