STM32 HAL SPI 16-битная передача

Я пытаюсь использовать HAL_SPI_Transmit (.) Для 16-битной передачи данных.

Я настроил SPI, используя STM32Cube как размер данных 16 бит

hspi2.Init.DataSize = SPI_DATASIZE_16BIT).

Я попытался отправить данные в 16-битном формате:

uint16_t DataToSend[10]={...};

HAL_SPI_Transmit(&hspi2,DataToSend, 2,TIMEOUTSPI);

Но функция HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout) нужна специально для uint8_t *, и она возвращает следующую ошибку:

error: #167: argument of type "uint16_t *" is incompatible with parameter of type "uint8_t *"

Итак, как я могу отправить 16-битные данные с помощью HAL_SPI_Transmit()?

Я нашел эту ссылку, но обсуждалась только ошибка, а не способ использования функции. Так что мой вопрос остается.

Я безуспешно искал в сети. Я новичок в STM32, поэтому ответ может быть для вас очевиден.


person Alithewise    schedule 24.08.2017    source источник


Ответы (1)


Чтобы убрать ошибку, напишите:

HAL_SPI_Transmit(&hspi2,(uint8_t*)(DataToSend), 2,TIMEOUTSPI);

Я заметил, что размер вашего массива составляет 10 uint16_t DataToSend[10] (что составляет 20 байт), возможно, вы имели в виду:

HAL_SPI_Transmit(&hspi2,(uint8_t*)(DataToSend), 20,TIMEOUTSPI);

Вы не должны получить ошибку выравнивания, упомянутую в вашей ссылке, поскольку вы используете семейство STM32F4.

person Guillaume Michel    schedule 24.08.2017
comment
Причина, по которой я использовал 2 в качестве параметра размера, заключается в том, что я хотел отправить 2 16-битных данных. Стоит ли писать 4 в таком случае? @Guillaume - person Alithewise; 24.08.2017
comment
Я только что взглянул на код HAL, и похоже, что размер - это количество слов. Так что вроде вы правы, должно быть 2 (чтобы послать 2 16-битных слова) - person Guillaume Michel; 24.08.2017
comment
Спасибо за Ваш ответ. Я протестировал его, и он работал. Но я думаю, что определение функции следует изменить для поддержки 16-битных данных без преобразования типов. - person Alithewise; 24.08.2017