BMC150初始化不起作用

2019-07-14 18:00发布


我正在尝试使用SPI读取BMC150的ID寄存器。我正在使用STM32f103微控制器。串行时钟线正常,数据通过微控制器的MOSI正确发送。但没有通过MISO回复。我用示波器检查了信号。这是我的C代码的一部分。我该如何解决这个问题?谢谢。
  1. while(1)
  2. {
  3.     //Activate Slave
  4.     SPI_GPIO->BRR = SPI_PIN_SS;
  5.     // Go to active power mode
  6.     SPI_I2S_SendData(SPIx, 0x4B01);
  7.     while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
  8.     // delay for applying setting stably
  9.     delay_ms(1);
  10.     // Go to normal mode
  11.     SPI_I2S_SendData(SPIx, 0x4C00);
  12.     while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
  13.     delay_ms(1);
  14.     // read request
  15.     SPI_I2S_SendData(SPIx, 0xC000);
  16.     while (!(SPIx->SR & (SPI_I2S_FLAG_RXNE)));
  17.     while (SPIx->SR & (SPI_I2S_FLAG_BSY));
  18.     }
复制代码


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
罕井雅直
1楼-- · 2019-07-14 19:47
是的,SPI_GPIO-> BRR = SPI_PIN_SS;
yvochen
2楼-- · 2019-07-14 23:35
你用示波器或万用表测量了吗?那条线什么都没说,因为没有看到它的价值SPI_PIN_SS。这条线很可能不是你所说的作用。
罕井雅直
3楼-- · 2019-07-15 00:59
好的,我会再次检查一下。谢谢
罕井雅直
4楼-- · 2019-07-15 06:45
我通过在写入过程之前和之后激活和去激活从机(使用芯片或从机选择引脚)解决了这个问题,如下所示:
while1
{
//Activate Slave
SPI_GPIO->BRR = SPI_PIN_SS;
// Go to active power mode
SPI_I2S_SendData(SPIx, 0x4B01);
while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
SPI_GPIO->BSRR = SPI_PIN_SS;
// delay for applying setting stably
delay_ms(1);
SPI_GPIO->BRR = SPI_PIN_SS;
// Go to normal mode
SPI_I2S_SendData(SPIx, 0x4C00);
while (!(SPIx->SR & (SPI_I2S_FLAG_TXE)));
SPI_GPIO->BSRR = SPI_PIN_SS;
delay_ms(1);

一周热门 更多>