黄色的是MOSI引脚,蓝色的是MISO引脚。测试的时候SPI向从机写入5个字节数据,然后再读出这5个字节数据,通过示波器观察读写的数据均正确,但是通过代码接收的数据却全是0XFF。
SPI配置如下:
GPIO_Init(NRF_IRQ_PORT, NRF_IRQ_PIN, GPIO_Mode_In_PU_No_IT);
GPIO_Init(NRF_CSN_PORT, NRF_CSN_PIN, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(NRF_CE_PORT, NRF_CE_PIN, GPIO_Mode_Out_PP_High_Fast);
GPIO_Init(NRF_SSK_PORT, NRF_SSK_PIN, GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(NRF_MOSI_PORT, NRF_MOSI_PIN, GPIO_Mode_Out_PP_Low_Fast);
GPIO_Init(NRF_MISO_PORT, NRF_MISO_PIN, GPIO_Mode_In_PU_No_IT);
SPI_Init(SPI1,
SPI_FirstBit_MSB,
SPI_BaudRatePrescaler_4,
SPI_Mode_Master,
SPI_CPOL_Low,
SPI_CPHA_1Edge,
SPI_Direction_2Lines_FullDuplex,
SPI_NSS_Soft,
0x07);
SPI1->DR = 0;
SPI_Cmd(SPI1, ENABLE);
尝试过修改数据捕获边缘、波特率均不行。
读写数据代码如下:
static uint8_t SPI_ReadWriteByte(uint8_t byte)
{
while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET);
SPI_SendData(SPI1, byte);
while (SPI_GetFlagStatus(SPI1, SPI_FLAG_RXNE) == RESET);
return SPI_ReceiveData(SPI1);
}
|