芯片启用未使用 SPI 在正确的时刻设置

Chip Enable not setting at right moment using SPI

我正在尝试将引脚的芯片启用 (CE) 设置为在 SPI 传输之前变高并在完成传输(TX 或 RX)后变回低电平。我正在使用 NRF24L01 和 Nucleo-F303。据说当 CE 很高时,那是我可以对 NRF24L01 进行真正的 SPI 传输的时候。然而,即使在真正的传输尚未完成之前,CE 引脚会暂时变低然后再次变高

其余的引脚似乎相应同步。我如何让 CE 引脚在进行 SPI 传输之前准确地变高,然后在完成或不再进行任何传输时变低。

这是我尝试解决问题的方法

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_SPI1_Init();
    MX_USART1_UART_Init();

    HAL_Delay(5);

    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
    uint8_t data[6] = {0x5C, 0xBA, 0xBB, 0x4D, 0x5E, 0xFB,};
    uint8_t data1[6] = {0};

    while (1)
    {
        HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_SET);

        if(HAL_SPI_TransmitReceive(&hspi1, data, data1, 6, HAL_MAX_DELAY) == HAL_OK)
        {
            HAL_Delay(1);
            HAL_GPIO_WritePin(GPIOA, GPIO_PIN_3, GPIO_PIN_RESET);
        }
    }
}

这就是我配置 GPIO_PIN_3 以运行

的方式
    GPIO_InitStruct.Pin = GPIO_PIN_3;
    GPIO_InitStruct.Pull = GPIO_PULLDOWN;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // digital Output
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

通常 SPI 的 Slave Select 信号是低电平有效,但您可以通过位 SSIOP 更改此行为(它是 STM32H7 上的位名称,在其他 STM32 上可能不同)。

关于您的另一个问题,Slave Select 信号在两个字节之间变为非活动状态,您可以通过位 SSOM 更改该行为。

参考手册中通常对不同的 SPI 配置进行了很好的描述。

我最终选择了裸机,因为库有很多延迟并且有很多抽象层