我有一个STM32F429ZI Nucleo板(用于SPI主设备和UART检查一切正常(和一个
EVB-LAN9252-SPI板
我必须检查SPI是否正常工作,但似乎我无法在从属端调试或检查。
下面显示的是我在STM32F429ZI Nucleo board
上使用的test code
,以检查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);
现在回到最初的项目。
一开始,我假设从主机传输的数据应该以某种方式在从机中循环,并且传输回主机。因此,如果我从主机读取,我应该获得原始数据,但向后
所以这就是CCD_ 3。
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个CCD_ 4s。我不确定我哪里错了。
- 数据真的在从方循环吗?是我做错了什么吗
- 数据似乎传输正确,但从机没有被命令将任何数据传输回主机。这就是为什么我无法从大师那里接收到有意义的数据
2-1。如果是,我如何知道从设备已正确接收数据
2-2.我如何命令从将一些有意义的数据传输回主机?我只能在主板上调试我的代码。
感谢您的友好评论!
我花了整整一个月的时间才完成这项工作,我相信未来会有像我这样的新手,所以…
如在LAN9252数据表页面302/329和303/329中;0x0050";以接收";0x92520001";,以及";0x0064";以接收";0x87654321";。
你发送数据的方式有点微妙,这就是我一直失败的部分。我过去(现在(没有完全理解SPI通信的原理,你需要一个带多个探针的示波器(使用示波器后我只花了2天时间,因为在那之前我无法检查我在做什么(。