我有一个STM32F429ZI核心板(用于SPI主板和UART来检查一切正常工作)和一个EVB-LAN9252-SPI板(用于SPI从站)。
我必须检查SPI是否正确地工作,但似乎无法调试或检查从服务器端的。
下面显示的是我在test code上工作的STM32F429ZI Nucleo board,以检查SPI是否正确工作。SPI1和SPI4配置在一块板中。
while (k < 32)
{
HAL_UART_Transmit(&huart4, &SPI1_Buffer_Tx[k], 1, 100);
k++;
}
k = 0;
while (k < 32)
{
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_RESET); // this GPIO is connected to hardware NSS
HAL_SPI_Transmit(&hspi1, &SPI1_Buffer_Tx[k], 1, 100);
HAL_SPI_Receive(&hspi4, &SPI4_Buffer_Rx[k], 1, 100);
HAL_GPIO_WritePin(GPIOE, GPIO_PIN_9, GPIO_PIN_SET);
k++;
}
k = 0;
while (k < 32)
{
HAL_UART_Transmit(&huart4, &SPI1_Buffer_Tx[k], 1, 100);
k++;
}
k = 0;
while (k < 32)
{
HAL_UART_Transmit(&huart4, &SPI4_Buffer_Rx[k], 1, 100);
k++;
}在这种情况下,UART向我展示了这样的答案。
abcdefghijklmnopqrstuvwxyzABCDEF //what was originally in the transmit buffer
bcdefghijklmnopqrstuvwxyzABCDEF //what was received in the receive buffer也许这是可能的,因为--我可以在奴隶端上阅读--使用这样的代码
HAL_SPI_Receive(&hspi4, &SPI4_Buffer_Rx[k], 1, 100);现在回到原来的项目。
首先,我假设从主程序传送的数据应该在从中循环,和以某种方式传输回主__,所以如果我从主程序读取数据,那么应该得到原始数据,但以倒向方式。
这就是code。
while (k < 32)
{
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_RESET);
HAL_SPI_Transmit(&hspi1, &SPI1_Buffer_Tx[k], 1, 100);
HAL_SPI_Receive(&hspi1, &SPI1_Buffer_Rx[k], 1, 100);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_14, GPIO_PIN_SET);
k++;
}我从大师那里得到的是32 0xFF,我不知道我错在哪里。
接收有意义的数据。
2-1。如果是这样的话,我如何知道从站正确地接收了数据?
2-2。如何命令从将一些有意义的数据传输回主?我只能在主板上调试我的代码。
发布于 2022-09-30 06:02:51
谢谢您的好意!
我花了整整一个月才完成这项工作,我相信将来会有像我这样的新手,所以..。
与LAN9252数据表第302/329和303/329页一样,您可以发送"0x0050“以接收"0x92520001",并发送"0x0064”以接收"0x87654321“。
你发送数据的方式有点微妙,这就是我一直失败的地方。我(和am)没有完全理解SPI通信的原理,你需要一个带有多个探针的示波器(在我使用示波器后只用了两天,因为在那之前我无法检查我在做什么)。
https://stackoverflow.com/questions/73579053
复制相似问题