void BSP_SPI_Init(void) { __GPIOB_CLK_ENABLE(); __SPI2_CLK_ENABLE(); spi.Instance = SPI2; spi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; spi.Init.Direction = SPI_DIRECTION_2LINES; //spi.Init.CLKPhase = SPI_PHASE_1EDGE; STM32F spi.Init.CLKPhase = SPI_PHASE_2EDGE; //spi.Init.CLKPolarity = SPI_POLARITY_LOW; STM32F spi.Init.CLKPolarity = SPI_POLARITY_HIGH; spi.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; spi.Init.CRCPolynomial = 7; spi.Init.DataSize = SPI_DATASIZE_8BIT; spi.Init.FirstBit = SPI_FIRSTBIT_MSB; spi.Init.NSS = SPI_NSS_SOFT; spi.Init.TIMode = SPI_TIMODE_DISABLED; spi.Init.Mode = SPI_MODE_MASTER; if (HAL_SPI_Init(&spi) != HAL_OK) { __asm("bkpt 255"); } GPIO_InitTypeDef GPIO_InitStruct; // Configurazione SPI2 completa su Porta B: PB13 (SCK), PB14 (MISO), PB15 (MOSI) GPIO_InitStruct.Pin = GPIO_PIN_13 | GPIO_PIN_14 | GPIO_PIN_15; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; GPIO_InitStruct.Alternate = GPIO_AF5_SPI2; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); __HAL_RCC_GPIOB_CLK_ENABLE(); // GiĆ  abilitato sopra GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); // Porta il CS alto (disattivato) a riposo HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); // PGA mute pin HAL_GPIO_WritePin(GPIOB, GPIO_PIN_11, GPIO_PIN_SET); } void BSP_SPI_Write(uint8_t ValueL, uint8_t ValueR) { HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET); __NOP(); __NOP(); __NOP(); __NOP(); HAL_SPI_Transmit(&spi, (uint8_t *)&ValueL, 1, HAL_MAX_DELAY); HAL_SPI_Transmit(&spi, (uint8_t *)&ValueR, 1, HAL_MAX_DELAY); while (HAL_SPI_GetState(&spi) != HAL_SPI_STATE_READY); HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_SET); }