打印
[STM32L0]

数据不对

[复制链接]
4025|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
STM32L0, HAL SPI 8bit读数据时钟会多一组,数据不对

使用特权

评论回复
沙发
zhanghqi| | 2021-8-14 21:18 | 只看该作者

什么意思?不是很明白你说的什么,能再解释一下这个现象吗

使用特权

评论回复
板凳
huangchui|  楼主 | 2021-8-14 21:22 | 只看该作者
stm32L011,硬件spi  cubemx生成代码。由于使用的是单线半双工模式,所以采用单独的收发函数。
HAL_SPI_Transmit(&hspi1,&temp,1,1000);
HAL_SPI_Receive(&hspi1,&temp1[0],1,1000);
使用中发现,发送正常。但是接收的时候 ,clock会多出一组8个。

使用特权

评论回复
地板
huangchui|  楼主 | 2021-8-14 21:24 | 只看该作者
如图,我用读取函数HAL_SPI_Receive(&hspi1,temp1,1,1000);读了1个字节,然而却出来2组clock。

使用特权

评论回复
5
huangchui|  楼主 | 2021-8-14 21:26 | 只看该作者
同样的,如果我读2个字节HAL_SPI_Receive(&hspi1,temp1,2,1000); 则clock是3组,永远比读的多了一组。

使用特权

评论回复
6
huangchui|  楼主 | 2021-8-14 21:29 | 只看该作者

使用特权

评论回复
7
dengdc| | 2021-8-14 21:31 | 只看该作者
spi配置看下

使用特权

评论回复
8
huangchui|  楼主 | 2021-8-14 21:33 | 只看该作者
/* SPI1 init function */

void MX_SPI1_Init(void)

{



  hspi1.Instance = SPI1;

  hspi1.Init.Mode = SPI_MODE_MASTER;

  hspi1.Init.Direction = SPI_DIRECTION_1LINE;

  hspi1.Init.DataSize = SPI_DATASIZE_8BIT;

  hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;

  hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;

  hspi1.Init.NSS = SPI_NSS_SOFT;

  hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;

  hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;

  hspi1.Init.TIMode = SPI_TIMODE_DISABLE;

  hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;

  hspi1.Init.CRCPolynomial = 7;

  if (HAL_SPI_Init(&hspi1) != HAL_OK)

  {

    _Error_Handler(__FILE__, __LINE__);

  }



}

使用特权

评论回复
9
chuxh| | 2021-8-14 21:34 | 只看该作者
找到问题了吗

使用特权

评论回复
10
huangchui|  楼主 | 2021-8-14 21:41 | 只看该作者
没有找到 - -!

这个问题实在是无从下手。

使用特权

评论回复
11
wangzsa| | 2021-8-14 21:42 | 只看该作者
印象中SPI的FIFO会根据写入字长设置FIFO的内容。。

使用特权

评论回复
12
huangchui|  楼主 | 2021-8-14 21:45 | 只看该作者
stm32L0单片机的spi资料里没找到fifo  ,可能就没有fifo

使用特权

评论回复
13
chenjunt| | 2021-8-14 21:47 | 只看该作者
HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)aTxBuffer, (uint8_t *)aRxBuffer, BUFFERSIZE, 5000);
强制8位操作应该就可以了

使用特权

评论回复
14
huangchui|  楼主 | 2021-8-14 21:54 | 只看该作者
这个函数本来就是 UINT8的  所以不存在强制不强制。

使用特权

评论回复
15
dingy| | 2021-8-14 21:56 | 只看该作者
函数原型就是8位的

使用特权

评论回复
16
huangchui|  楼主 | 2021-8-14 21:59 | 只看该作者
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

使用特权

评论回复
17
dengdc| | 2021-8-14 22:00 | 只看该作者
另外 如果设成16bit发送的话也会多一组。

使用特权

评论回复
18
chuxh| | 2021-8-14 22:02 | 只看该作者
那么最后正常了吗

使用特权

评论回复
19
songqian17| | 2021-8-14 22:04 | 只看该作者
这个是设么原因引起的?

使用特权

评论回复
20
chenjunt| | 2021-8-14 22:06 | 只看该作者
示波器怎么显示的?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

918

主题

12323

帖子

4

粉丝