Цитата(Димон Безпарольный @ Jun 12 2016, 19:10)

И правда Ваша. Второй случай когда HAL заработал почти сразу. Спасибо.
SPI через HAL да, работает сразу, но мееедлееееннннооооо........
Особенно, с софтовым CS!
Если делать:
Код
HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
HAL_SPI_TransmitReceive(&hspi1, (u8 *)&d, (u8 *)&d1,1,100);
HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
то на F103 при 36Мгц это происходит 12 микросекунд при частоте SPI 4.5Mhz и 16-битной передаче.
Причем, после установки 0 на CS, проходит куча времени, потом корткая пачка импульсов, потом опять длиная пауpа переl снятием CS.
Если же сделать так:
Код
HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_RESET);
hspi1.Instance->DR = d;
while(__HAL_SPI_GET_FLAG(&hspi1, SPI_FLAG_RXNE) == RESET);
d = hspi1.Instance->DR;
HAL_GPIO_WritePin(CS_GPIO_Port, CS_Pin, GPIO_PIN_SET);
то время передачи(от \_ до _/ на CS) уменьшается вдвое!
(да, можно конечно и управление CS заменить на прямое, вместо вызова халовской функции, но это практически ничего по скорости не дает, как ит замена HAL_SPI_GET_FLAG на прямое чтение флага. А вот замена hspi1.Instance->DR на SPI1->DR экономит еще микросекунду!)