Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
STM32F41RE中的环回SPI_Stm32_Microcontroller_Cortex M_Stm32f4discovery_Stm32f4 - Fatal编程技术网

STM32F41RE中的环回SPI

STM32F41RE中的环回SPI,stm32,microcontroller,cortex-m,stm32f4discovery,stm32f4,Stm32,Microcontroller,Cortex M,Stm32f4discovery,Stm32f4,我正在使用STM32 HAL库在STM32F411RE的SPI中尝试环回。串行终端中的输出失真(仅框)。我已连接微控制器的MOSI、MISO引脚。有人能帮我指出这个问题吗。谢谢:) 通常,SPI通信至少需要一个主设备和一个从设备。然而,由于SPI使用全双工通信(即,它同时发送和接收),通常可以将MOSI连接到MISO并实现环回通信 我已经在核子F411RE上测试过了,效果很好 使用STM32CubeMX,我为Nucleo-F411RE(8 MHz外部时钟、SWD、UART2引脚,适用于车载ST链

我正在使用STM32 HAL库在STM32F411RE的SPI中尝试环回。串行终端中的输出失真(仅框)。我已连接微控制器的MOSI、MISO引脚。有人能帮我指出这个问题吗。谢谢:)


通常,SPI通信至少需要一个主设备和一个从设备。然而,由于SPI使用全双工通信(即,它同时发送和接收),通常可以将MOSI连接到MISO并实现环回通信

我已经在核子F411RE上测试过了,效果很好

使用STM32CubeMX,我为Nucleo-F411RE(8 MHz外部时钟、SWD、UART2引脚,适用于车载ST链路等)配置了一个带有默认设置的项目。此外,我还启用了SPI2。SPI1与核子板接线冲突。我还短路了MOSI和MISO(PC2和PC3)

我添加的唯一代码是while循环中的片段:

while(1)
{
/*用户代码结束时*/
HAL_延迟(1000);
uint8_t tx_缓冲区[]={'H','e','l','l','o','\r','\n'};
uint8接收缓冲区;
对于(int i=0;i
SPI初始化供参考(由STM32CubeMX生成):

hspi2.Instance=SPI2;
hspi2.Init.Mode=SPI_Mode_MASTER;
hspi2.Init.Direction=SPI_方向线;
hspi2.Init.DataSize=SPI_DataSize_8BIT;
hspi2.Init.CLKPolarity=SPI_极性_低;
hspi2.Init.CLKPhase=SPI_PHASE_1EDGE;
hspi2.Init.NSS=SPI_NSS_SOFT;
hspi2.Init.BaudRatePrescaler=SPI_BaudRatePrescaler_2;
hspi2.Init.FirstBit=SPI_FirstBit_MSB;
hspi2.Init.TIMode=SPI_TIMode_DISABLE;
hspi2.Init.CRCCalculation=SPI_CRCCalculation_DISABLE;
hspi2.Init.crcpolymonal=10;
if(HAL_SPI_Init(&hspi2)!=HAL_OK)
{
错误处理程序();
}

对于环回,您需要一个SPI主机和一个SPI从机。我假设您已将
hspi1
配置为主机。因此,
HAL\u SPI\u Receive
将永远不会收到任何消息,只会超时。基本上,
rx_缓冲区的原始数据被发送到UART,即0字节。使用两条SPI总线:一条配置为主总线传输数据,另一条配置为从总线接收数据。@codo
对于环回,您需要一个SPI主总线和一个SPI从总线。我假设您已将hspi1配置为主。所以HAL_SPI_Receive永远不会收到任何消息,只会超时
这完全是胡说八道。如果您不知道SPI工作区如何包含一些字母或数字(0x20是空格,因此0x30或“0”或0x41或“A”可能是更好的选择),请不要发表评论。控制器设计是规范的一部分的一般性陈述适得其反。还要了解的是,spi或i2c外设或控制器符合任何此类规范的情况非常罕见。使用这些接口时,如果使用特定设备的数据表,则不必担心规范。
void SPI_call()
{
    int i = 0, size = 3;
    uint8_t tx_buffer[3] = {0x10, 0x20, 0x30};
    uint8_t rx_buffer[3] = {0x00, 0x00, 0x00};

    for (i = 0; i < size; i++) {
        HAL_SPI_Receive(&hspi1, &rx_buffer[i], 1, 100);
        HAL_SPI_Transmit(&hspi1, &tx_buffer[i], 1, 100);
        HAL_UART_Transmit(&huart2, &rx_buffer[i], 1, HAL_MAX_DELAY);
    }
    
}
void SPI_call()
{
    uint8_t tx_buffer = 0x20;
    uint8_t rx_buffer;

    HAL_SPI_TransmitReceive(&hspi1, &tx_buffer, &rx_buffer, 1, 1000);
    HAL_UART_Transmit(&huart2, &rx_buffer, 1, HAL_MAX_DELAY);   
}