Я подключаю акселерометр BMA253 к плате обнаружения STM32, используя 4-проводной SPI. Я использую библиотеку CUBEMX HAL. В качестве первого шага я пытаюсь прочитать идентификатор ЧИПа из регистра датчика 0x00. Считываемый чип - 0xFA. Следующий код добавляется в цикл while только с целью проверки. Поскольку SPI является активным протоколом низкого уровня, я настроил PIN_2 на высокий уровень по умолчанию.
uint8_t result = 0;
uint8_t address = 0x00;
while (1)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, &address, 1, 100);
HAL_Delay (100);
HAL_SPI_Receive(&hspi1, &result, 1, 100);
HAL_Delay (100);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
}
Поскольку он находится в бесконечном цикле while, для первых двух циклов цикла я получаю в результате 0xFF. Затем в следующих двух циклах цикла я получаю правильный идентификатор чипа, равный 0xFA. Затем я получаю 0xFF в следующих двух циклах цикла, и этот шаблон чередуется бесконечно.
Я не могу понять, почему сначала получаю 0xFF, а затем 0xFA.
Может быть проблема с несоответствием задержки? Я считаю, что 100 мс должно быть нормально.
Я также считаю, что получение SPI реализуется неправильно. Я беспокоюсь, потому что, поскольку чтение SPI является важной функцией при получении данных ускорения, эта функция является ключевой.
Я прошу любого подсказать мне, что делать, чтобы он работал идеально. Любая помощь будет высоко ценится.
Заранее спасибо.
РЕДАКТИРОВАТЬ: РАБОТАЕТ СЕЙЧАС 1. Следуя предложению Sealion, установите первый бит в высокий уровень. 2. Кроме того, мне пришлось настроить CPOL и CPHA в конфигурации SPI на режим 0 или режим 3 в соответствии с требованиями датчика.