#c #arm #embedded #stm32 #hal
#c #arm #встроенный #stm32 #hal
Вопрос:
Я использую интерфейс QSPI (или dual-SPI) STM32L452 для создания инструкций для драйвера светодиода с использованием HAL. Мне удалось заставить его работать, но я должен установить довольно абсурдные параметры конфигурации для команды, чтобы заставить ее работать.
Вот мой код инициализации:
hqspi.Instance = QUADSPI;
hqspi.Init.ClockPrescaler = 31;
hqspi.Init.FifoThreshold = 1;
hqspi.Init.SampleShifting = QSPI_SAMPLE_SHIFTING_NONE;
hqspi.Init.FlashSize = 31;
hqspi.Init.ChipSelectHighTime = QSPI_CS_HIGH_TIME_1_CYCLE;
hqspi.Init.ClockMode = QSPI_CLOCK_MODE_0;
hqspi.Init.FlashID = QSPI_FLASH_ID_1;
hqspi.Init.DualFlash = QSPI_DUALFLASH_DISABLE;
HAL_QSPI_Init(amp;hqspi);
Вот код, который я использую для настройки команды
qspiCommand.InstructionMode = QSPI_INSTRUCTION_NONE;
qspiCommand.AddressMode = QSPI_ADDRESS_NONE;
qspiCommand.AlternateByteMode = QSPI_ALTERNATE_BYTES_NONE;
qspiCommand.DataMode = QSPI_DATA_2_LINES;
qspiCommand.DummyCycles = 0;
qspiCommand.NbData = 81;
qspiCommand.DdrMode = QSPI_DDR_MODE_DISABLE;
qspiCommand.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY; // I have to set this
qspiCommand.SIOOMode = QSPI_SIOO_INST_EVERY_CMD; // I have to set this
Затем я отправляю его с помощью HAL_QSPI_Command
and HAL_QSPI_Transmit
.
Вот результат, который я ожидаю и которого я могу достичь, используя приведенный выше код:
Имейте в виду, что это одноразовая передача и выводится только при вызове двух функций выше.
Странно то, что я должен установить
qspiCommand.DdrHoldHalfCycle = QSPI_DDR_HHC_ANALOG_DELAY;
(который не должен иметь эффекта, когда DdrMode
отключен)
и
qspiCommand.SIOOMode = QSPI_SIOO_INST_EVERY_CMD;
(что не должно иметь эффекта, если InstructionMode
значение равно none).
Если я не установлю их оба, произойдут странные вещи. Это результат, если я удалю DdrHoldHalfCycle
параметр:
Имейте в виду, что это непрерывный сигнал, который запускается и не останавливается после того, как я вызвал функцию передачи.
Чего мне здесь не хватает? Мне действительно не нужны эти параметры, чтобы заставить его работать.
Ответ №1:
Это смущает.
qspiCommand
должно быть статичным.