木子-387117 发表于 2017-2-21 10:52:13

SPI全双工模式 实际测试有数据但是采集不到

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_RESET );片选0

HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);发送数据

HAL_SPI_Receive(&hspi1,lmGET_data,sizeof(lmGET_data),1000);接收数据

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_SET );片选1

watershade 发表于 2017-2-21 10:52:14

是这样的。我看你的SPI两个字节是连续发送。你是用这两个命令之后来实现可以从波形上明显看出中间有一段停顿。所以更好的方式使用HAL_SPI_TransmitReceive直接发送接受两个字节。你只需要第二个字节也无所谓。

另外检查SPI的CPAL和CPOL设置的是否正确。

如果从你的波形上来看。1黄色线应该是MOSI,2是MOSI。看波形似乎以上设置没有错误。


F0016TEK.JPG 来看你的第二个字节也返回了数据。那么你就需要检查一下你的数据结构设置的是否正确。liming2是什么类型的数据,是不是这里提取的时候出现了错误?


木子-387117 发表于 2017-2-21 10:53:51

求助求助 不明白

jtc_88 发表于 2017-2-21 11:05:02

单纯发送使用HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout);数据读取使用此函数HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout),尽量一个字节一个字节的读取数据;
read_opcode_addr = 0xff;
HAL_SPI_TransmitReceive(&hspi1, &read_opcode_addr, &j, 1,1000);

watershade 发表于 2017-2-21 12:37:02

什么叫实际测试有数据但是采集不到?
你是说发送有数据,但是接受没有数据?
如果是这样HAL_SPI_TransmitReceive可以解决问题

木子-387117 发表于 2017-2-21 12:53:24

watershade 发表于 2017-2-21 12:37
什么叫实际测试有数据但是采集不到?
你是说发送有数据,但是接受没有数据?
如果是这样HAL_SPI_TransmitRe ...

实际示波器测试MISO有返回数据 见图3   但是程序上没有采集到一直是0 用了transmitreceive了

木子-387117 发表于 2017-2-21 13:03:24

jtc_88 发表于 2017-2-21 11:05
单纯发送使用HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeou ...

这个我试过   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_RESET );
                   HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);
       HAL_SPI_TransmitReceive(&hspi1, &liming, &liming2, 1, 1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_SET );
实际测试数据如下大神帮我分析一下

木子-387117 发表于 2017-2-21 13:05:11

jtc_88 发表于 2017-2-21 11:05
单纯发送使用HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeou ...

这个我试过   HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_RESET );
                   HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);
       HAL_SPI_TransmitReceive(&hspi1, &liming, &liming2, 1, 1000);
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4 ,GPIO_PIN_SET );
实际测试数据如下大神帮我分析一下

木子-387117 发表于 2017-2-21 13:08:47

本帖最后由 木子-387117 于 2017-2-21 13:32 编辑

这是实际HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);
       HAL_SPI_TransmitReceive(&hspi1, &liming, &liming2, 1, 1000); 实际测试波形结果liming2一直为0

木子-387117 发表于 2017-2-21 13:19:42

本帖最后由 木子-387117 于 2017-2-21 13:20 编辑

SPI协议先MOSI给地址再MOSI给数据的时候通过MISO返回数据所以我 HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);先给地址
             HAL_SPI_TransmitReceive(&hspi1, &liming, &liming2, 1, 1000);给数据并取数据
页: [1] 2 3 4
查看完整版本: SPI全双工模式 实际测试有数据但是采集不到