我尝试将引脚的芯片使能(CE)设置为在SPI传输前变为高电平,并在完成传输后返回低电平(TX或RX)。我使用NRF24L01和Nucleo-F303。据说当CE高时,那就是我可以向NRF24L01进行真实的SPI传输的时候。然而,CE引脚暂时变为低电平,然后甚至在真实的传输尚未完成之前再次变为高电平
x1c 0d1x的数据
其余的引脚似乎是同步相应的。我如何让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);
型
2条答案
按热度按时间bbmckpt71#
通常,SPI的从机选择信号为低电平有效,但您可以通过位SSIOP(它是STM32 H7上的位的名称,在其他STM32上可能不同)更改此行为。
关于您的另一个问题,从机选择信号在两个字节之间变为非活动状态,您可以通过位SSOM改变该行为。
不同的SPI配置通常在参考手册中有很好的描述。
eqzww0vc2#
最后我选择了裸金属,因为库的延迟太大,而且有太多的抽象层