以前用NXP的LPC系列,最近第一次用STM32就面对HAL库,操作一个SPI接口的A/D芯片和SPI Flash,用了HAL_SPI_Receive和HAL_SPI_TransmitReceive。之前先操作SPI的A/D芯片,奇怪的是每次读取数据前3个字节都是0,然后才能读到正确数据。 今天用HAL_SPI_Receive读SPI Flash的ID,读出来两个字节是0,后来觉得奇怪就多读了3个字节,发现正确的ID是3个0后的第4和5字节。 请问是不是HAL库的问题?哪位兄弟遇到过? |
STM32L432 2个SPI同时使用的问题
STM32L476 ADC采集内部温度传感器电压值
STM32L431通过串口下载程序问题
ST的hal库有问题手头有STM32L4或STM32F7的帮忙测试DMA SD卡
STM32L476-Discovery开发板如何进行串口固件烧写
大家有用到STM32L433的CAN通信的吗?
STM32L4 FFT 自带arm_math.h编译不成功
想问一个关于STM32L475 flash的问题
谁有STM32L476的编程手册,传一个,感谢
STM32L4的内部独立看门狗IWDG喂狗失败
评分
查看全部评分
评分
查看全部评分
不管用 还是那样
HAL_SPI_Transmit(&hspi3, cmd, 4, W25Qx_TIMEOUT_VALUE);
HAL_SPI_Receive(&hspi3, odd, 3, W25Qx_TIMEOUT_VALUE);//先读不知道哪里来的3个0
HAL_SPI_Receive(&hspi3,ID, 2, W25Qx_TIMEOUT_VALUE);
评分
查看全部评分
读SPI Flash的ID也是这样,必须先读3个空数据
好的 谢谢版主
unsigned char spi_send (unsigned short outb) {
/* Write and Read a byte on SPI interface. */
SPI3->DR = outb;
while (!(SPI3->SR & 0x02)); /* Wait for transfer to finish */
// while (!(SPI3->SR & 0x01));
return (SPI3->DR); /* Return received value */
}
非常感谢。我的MISO是悬空的。根据阁下的意见找到解决办法了。把所有HAL_SPI_Transmit()都换成HAL_SPI_TransmitReceive()就好了。应该是SPI的read fifo中的数据没有读取导致。
评分
查看全部评分
已经解决了。看你楼上回复。