Я подключаю акселерометр BMA253 к плате обнаружения STM32, используя 4-проводный SPI. Я использую библиотеку CUBEMX HAL. В качестве первого шага я пытаюсь прочитать CHIP ID из регистра датчика 0x00. Чип, который должен быть прочитан, является 0xFA. Следующий код добавляется в пока l oop только для проверки. Поскольку 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);
}
Поскольку оно находится в бесконечности, в то время как l oop, для первых двух циклов l oop я получаю 0xFF в результате. Затем в следующие два l oop цикла я получаю правильный идентификатор чипа, равный 0xFA. Затем я получаю 0xFF в следующие два l oop цикла, и этот паттерн чередуется бесконечно.
Я не могу понять, почему я сначала получаю 0xFF, а затем 0xFA.
Может ли быть проблема с несоответствием задержки? Я чувствую, что 100 мс должно быть в порядке.
Я также чувствую, что получение SPI выполняется неправильно. Я волнуюсь, потому что чтение SPI является важной функцией при получении данных ускорения, поэтому эта функция является ключевой.
Я прошу любого, пожалуйста, подскажите мне, что нужно сделать, чтобы он работал идеально. Любая помощь будет принята с благодарностью.
Заранее спасибо.
РЕДАКТИРОВАТЬ: РАБОТАЕТ СЕЙЧАС 1. Следовали предложению Sealion, чтобы установить первый бит высокого уровня. 2. Кроме того, мне пришлось настроить CPOL и CPHA в конфигурации SPI на режим 0 или 3 в соответствии с требованиями датчика.