Почему я не могу читать регистры через SPI на STM32? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь подключить плату датчика LSM6DSOX с SPI к 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(&reg, 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(&reg, 1);
    BSP_SPI1_Recv(bufp, len);
    HAL_GPIO_WritePin(GPIOB, CS_Pin, GPIO_PIN_SET);
    return 0;
}

Я не могу понять, почему это не работает. Я думал, что многие другие части кода были проблемой, но я думаю, что сузил это до этой части. Кто-нибудь может заметить ошибку?

...