Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 
В связи с переходом на HAL в новых библиотеках.
Синтаксис, конечно, легче. Но что внутри?!
Пытаемся усвоить разницу:
Инициализируем линии на порту B - push-pull без подтяжек, низкоскоростные.
__GPIOB_CLK_ENABLE();
  GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

Устанавливаем в ноль отдельные линии порта:
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2|GPIO_PIN_3, GPIO_PIN_RESET);

Это, конечно, понятнее, чем GPIOB->BSRR = (uint32_t)(GPIO_PIN_2|GPIO_PIN_3) << 16;
но это функция
void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
{
  /* Check the parameters */
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  assert_param(IS_GPIO_PIN_ACTION(PinState));
 
  if(PinState != GPIO_PIN_RESET)
  {
    GPIOx->BSRR = GPIO_Pin;
  }
  else
  {
    GPIOx->BSRR = (uint32_t)GPIO_Pin << 16;
  }
}


Так что, как только проверили... стоит заменить. Размер кода-- && Быстродействие++.