STM32 SPI 发送第一个数据不成功问题

Posted 白菜没我白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 SPI 发送第一个数据不成功问题相关的知识,希望对你有一定的参考价值。

STM32的标准库,跟HAL库都是很实用的,

在使用SPI库的过程中一定要注意时序的问题。

我在调试SPI过程中,调试了两个IC,都是用HAL库,

第一个IC没出问题,第二个IC出现了第一次发送数据不成功问题,

不管发什么数据,交互结果都是0x00,

我一开始用的是HAL_SPI_TransmitReceive();

这个函数,一直无法成功,改用标准库结果也是一样;

后来查到可能是收发太快的原因,

这里说的收发太快并不是说两个数据之间,而是一个交互的时候收发太快;

于是我把它改为发送接收之间加个延时问题解决:

  HAL_SPI_Transmit(&hspi1,&temp,sizeof(temp),10);
  HAL_Delay(1);
  HAL_SPI_Receive(&hspi1,&nrsec_sel_re,sizeof(nrsec_sel_re),10);


造成这个原因:是由于SPI刚开始中间间隙很短(几乎没有间隙),连续产生很多个时钟信号,

从机无法判断是8bit还是16bit格式,从机会认为SPI是以16bit数据格式发送,

之后再判断是8bit,出现第一个数据错误为0x00,而后续数据正确。

以上是关于STM32 SPI 发送第一个数据不成功问题的主要内容,如果未能解决你的问题,请参考以下文章

stm32串口发送数据复位 第一个数据丢失

linux 应用层spi怎么使用dma

STM32F4 SPI接收中断不起作用

使用 STM32 单片机和低级 LL API 通过 SPI 发送数据

stm32学习第十四天

学习6__STM32--SPI外设之中断收发