我需要通过 SPI 一次发送一个字节的数据。传输字节后,我将程序中的“片选”设置为状态 1。我通过 SPI_SR 寄存器中的 BSY 位跟踪传输结束。但是微控制器传输两个字节,第一个字节是DR寄存器的值,第二个字节为0。传输长度设置为8位。我试图设置不同的传输长度,但微控制器总是发送两次我设置的长度的传输。下面是初始化代码。
RCC-> APB2ENR | = RCC_APB2ENR_SPI4EN;
// CPHA = 1 // CPOL = 1
SPI4-> CR1 =
SPI_CR1_BR_1 | SPI_CR1_BR_2 | SPI_CR1_BR_0 | // 波特率 = Fpclk / 256
SPI_CR1_MSTR |
SPI_CR1_CPOL |
SPI_CR1_CPHA |
SPI_CR1_SSM |
SPI_CR1_SSI;
SPI4-> CR2 = SPI_CR2_DS_0 | SPI_CR2_DS_1 | SPI_CR2_DS_2;
SPI4-> CR1 | = SPI_CR1_SPE;
发送数据
LCD_CS_Clr();
_delay_us(2);
SPI4->DR = 数据;
while((SPI4->SR & SPI_SR_BSY) != 0);
_delay_us(2);
LCD_CS_Set();
_delay_us(2);