|
L3G4200D按照数据手册上的硬件连接,采用SPI通讯接口
![](http://cache.amobbs.com/bbs_upload782111/files_48/ourdev_699034FCS55V.jpg)
(原文件名:l3g4200d.jpg)
使用STM32F103控制,SPI时钟9M,大端模式发送地址和数据。示波器检测到时钟和数据发送信号。
程序控制如下:
GPIOA->ODR = ~CS;//
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x20);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI1);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0x0F);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI_I2S_ReceiveData(SPI1);
while (1)
{
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xA8);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI1_RecData[0] = SPI_I2S_ReceiveData(SPI1);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
SPI_I2S_SendData(SPI1,0xA9);
while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
SPI1_RecData[1] = SPI_I2S_ReceiveData(SPI1);
}
就是没有返回值,4脚一直没反应,全速运行得到的值都是0,断点仿真倒是收到数了,SPI_DR全是0xFF
检查了电路,对比了时序。现在是不知道是电路设计问题,芯片没工作。还是程序时序不对导致的芯片不启动。
用过的指点一下,谢谢大家了! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|