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

Stm32 芯片启用未使用SPI在正确的时刻设置,stm32,radio,spi,hal,Stm32,Radio,Spi,Hal,我试图在SPI传输之前将引脚的芯片启用(CE)设置为高电平,在完成传输(TX或RX)后设置为低电平。Am使用NRF24L01和核子F303。据说,当CE高时,我就可以对NRF24L01进行真正的SPI传输。然而,即使在真正的传输尚未完成之前,CE引脚也会先低后高 其余的引脚似乎也在同步。如何使CE引脚在进行SPI传输之前精确地变高,在完成或不再进行任何传输时变低 下面是我试图解决这个问题的方法 int main(void) { HAL_Init(); SystemClock_C

我试图在SPI传输之前将引脚的芯片启用(CE)设置为高电平,在完成传输(TX或RX)后设置为低电平。Am使用NRF24L01和核子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_引脚_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的从机选择信号为低电平,但您可以通过位SSIOP改变此行为(它是STM32H7上的位名称,在其他STM32上可能不同)

关于您的另一个问题,从机选择信号在两个字节之间变为非活动状态,由于位SSOM,您可以更改该行为

不同的SPI配置通常在参考手册中有很好的描述