ST意法半导体
直播中

摩托罗拉

9年用户 986经验值
私信 关注
[问答]

为什么SPI STM32G474微控制器总是一次发送两个字节呢?

我需要通过 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);



回帖(1)

陈斌

2023-1-9 14:41:27
赋值SPI4->DR = data;比 8 位宽,因此发送 2 个字节。
尝试


  • *(__IO uint8_t*)(&SPI4->DR) = data;

举报

更多回帖

发帖
×
20
完善资料,
赚取积分