Вне моей головы, SPI_CR1_SPE
и / или SPI_CR1_SSI
должны быть включены в SPI4->CR1
. HAL_SPI_Init()
не устанавливает одно или другое, но делает функцию передачи HAL SPI, вы должны сделать это самостоятельно, если используете свой собственный код передачи.
UPDATE
Если вы включите биты SPE
и SSI
в enableChip
, он никогда не будет вызван, потому что это не вызов функции без скобок.
Эти две строки
SPI4->DR = data;
while (!(SPI4->SR & SPI_SR_TXE));
в неправильном порядке. Сначала вы ждете TXE != 0
, что означает, что очередь передатчика готова для получения дополнительных данных, а затем записываете данные.
Вторая строка здесь
while (!(SPI4->SR & SPI_SR_RXNE));
while (!(SPI4->SR & SPI_SR_BSY));
, вероятно, будет бесконечным циклом, потому что к тому времени, когда SPI_SR_RXNE
станет 1
, или вскоре после этого, SPI_SR_BSY
изменится с 1
на 0
.