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 |
MOSI MISO
MOSI SCK 0x06
MISO SCK 0X6C
另外检查SPI的CPAL和CPOL设置的是否正确。
如果从你的波形上来看。1黄色线应该是MOSI,2是MOSI。看波形似乎以上设置没有错误。
F0016TEK.JPG 来看你的第二个字节也返回了数据。那么你就需要检查一下你的数据结构设置的是否正确。liming2是什么类型的数据,是不是这里提取的时候出现了错误?
评分
查看全部评分
read_opcode_addr = 0xff;
HAL_SPI_TransmitReceive(&hspi1, &read_opcode_addr, &j, 1,1000);
点评
评分
查看全部评分
你是说发送有数据,但是接受没有数据?
如果是这样HAL_SPI_TransmitReceive可以解决问题
实际示波器测试MISO有返回数据 见图3 但是程序上没有采集到一直是0 用了transmitreceive了
这个我试过 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 );
实际测试数据如下 大神帮我分析一下
这个我试过 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 );
实际测试数据如下 大神帮我分析一下
这是实际HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);
HAL_SPI_TransmitReceive(&hspi1, &liming, &liming2, 1, 1000); 实际测试波形 结果liming2一直为0
è¿æ¯MISOæ°æ® ä¹å°±æ¯ç¬¬äºä¸ªtransreceiveå½æ°æ¶åçæ°æ®
è¿æ¯MOSIæ°æ® ä¸æ¬¡transmitåé0x06 第äºæ¬¡transmitreceiveä¹æ¯åé0x06
SPI协议 先MOSI给地址再MOSI给数据的时候通过MISO返回数据 所以我 HAL_SPI_Transmit(&hspi1,&liming,sizeof(liming),1000);先给地址
HAL_SPI_TransmitReceive(&hspi1, &liming, &liming2, 1, 1000);给数据并取数据
SPIåè®® å MOSIç»å°ååMOSIç»æ°æ®çæ¶åéè¿MISOè¿åæ°æ®
我已经分析不出了
不过不管哪个芯片,STM32各系列库里都有SPI全双工的例程,先用例程跑下。
STM32L031的 没找到例程