Очередная багофича HAL

Наткнулся на новый косяк библиотеки HAL в функции HAL_I2S_Transmit. Есть у нее параметр uint16_t Size, который удваивается в случае работы с данными 24 или 32 бита

// stm32f4xx_hal_i2s.c line 537
if((tmp1 == I2S_DATAFORMAT_24B) || (tmp1 == I2S_DATAFORMAT_32B))
{
  hi2s->TxXferSize  = (Size << 1U);
  hi2s->TxXferCount = (Size << 1U);
}
else
{
  hi2s->TxXferSize  = Size;
  hi2s->TxXferCount = Size;
}


Проблема в том, что переменные TxXferSize и TxXferCount имеют тип uint16_t. И если на вход HAL_I2S_Transmit передать размер 0x8000 и более, то после сдвига влево результат превращается в тыкву.

// stm32f4xx_hal_i2s.h line 110
typedef struct __I2S_HandleTypeDef
{
  SPI_TypeDef                *Instance;    /*!< I2S registers base address        */
  I2S_InitTypeDef            Init;         /*!< I2S communication parameters      */
  uint16_t                   *pTxBuffPtr;  /*!< Pointer to I2S Tx transfer buffer */
  __IO uint16_t              TxXferSize;   /*!< I2S Tx transfer size              */
  __IO uint16_t              TxXferCount;  /*!< I2S Tx transfer Counter           */

Комментарии (3)

RSS свернуть / развернуть
Что можно сделать? Как это исправить?
0
  • avatar
  • Aneg
  • 03 марта 2019, 13:37
Очевидно заменить тип на uint32_t или не передавать больше 0x4000 байт за один раз
0
HAL — зло
+1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.