Заработала шина SPI на скорости 24МВ\сек (максимум 21 по даташиту). Нужно убрать 2 (0ом) резистора на шине spi на корпус (плата от чип-дипа)
Ини spi заключается в трехкратном изменении состояния вывода SS.
oid iniSPI_ADAU1467(void) {
uint8_t a = 0;
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, (uint8_t *) &a, 1,50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, (uint8_t *) &a, 1,50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(1);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, (uint8_t *) &a, 1,50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
HAL_Delay(10); // задержка обязательна , иначе будет звук как удар по барабану
}
Например включение шумодава с помощью переключателя выглядит так:
uint8_t sw[] = {0x0, 0x03, 0x97, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi3, sw, 11, 50);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_15, GPIO_PIN_SET);
Что бы работал программатор, необходимо на MOSI шины SPI резистор на землю 13к прилепить. Это задает адрес I2C шины. Без него программатор не работает.