【发布时间】:2020-07-15 22:03:43
【问题描述】:
我正在尝试将带有 SPI 的 LSM6DSOX 传感器板连接到 Nucleo-STM32L011K4。看来我可以成功读到板子了,我使用以下代码:
static int32_t platform_write(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len)
{
HAL_GPIO_WritePin(GPIOA, CS_Pin, GPIO_PIN_RESET);
BSP_SPI1_Send(®, 1);
BSP_SPI1_Send(bufp, len);
HAL_GPIO_WritePin(GPIOA, CS_Pin, GPIO_PIN_SET);
return 0;
}
但是,当我尝试从单个寄存器(例如 WHO_AM_I 寄存器)中读取数据时,我总是返回 0x00(情况并非如此)。我使用以下代码进行阅读:
static int32_t platform_read(void *handle, uint8_t reg, uint8_t *bufp,
uint16_t len)
{
reg |= 0x80;
HAL_GPIO_WritePin(GPIOA , CS_Pin, GPIO_PIN_RESET);
BSP_SPI1_Send(®, 1);
BSP_SPI1_Recv(bufp, len);
HAL_GPIO_WritePin(GPIOB, CS_Pin, GPIO_PIN_SET);
return 0;
}
我不明白为什么这不起作用。我认为许多其他代码部分是问题,但我认为我将其缩小到这部分。任何人都可以发现错误?
【问题讨论】:
-
哪一行给出了意想不到的结果? BSP_SPI1_Recv(bufp, len);? 0x00 在 bufp 中吗?为什么重置 GPIOA 后还要设置 GPIOB?
-
@Sebastian 是的,bufp 得到 0x00。这就是为什么我认为那里可能有问题。感谢您注意到 GPIOA/B 的东西。我替换了那个,但现在固件甚至不再工作了