[STM32L0] 数据不对

[复制链接]
 楼主| huangchui 发表于 2021-8-14 21:12 | 显示全部楼层 |阅读模式
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。
 楼主| huangchui 发表于 2021-8-14 21:26 | 显示全部楼层
同样的,如果我读2个字节HAL_SPI_Receive(&hspi1,temp1,2,1000); 则clock是3组,永远比读的多了一组。
 楼主| huangchui 发表于 2021-8-14 21:29 | 显示全部楼层
dengdc 发表于 2021-8-14 21:31 | 显示全部楼层
spi配置看下
 楼主| 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__);

  }



}
chuxh 发表于 2021-8-14 21:34 | 显示全部楼层
找到问题了吗
 楼主| huangchui 发表于 2021-8-14 21:41 | 显示全部楼层
没有找到 - -!

这个问题实在是无从下手。
wangzsa 发表于 2021-8-14 21:42 | 显示全部楼层
印象中SPI的FIFO会根据写入字长设置FIFO的内容。。
 楼主| huangchui 发表于 2021-8-14 21:45 | 显示全部楼层
stm32L0单片机的spi资料里没找到fifo  ,可能就没有fifo
chenjunt 发表于 2021-8-14 21:47 | 显示全部楼层
HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)aTxBuffer, (uint8_t *)aRxBuffer, BUFFERSIZE, 5000);
强制8位操作应该就可以了
 楼主| huangchui 发表于 2021-8-14 21:54 | 显示全部楼层
这个函数本来就是 UINT8的  所以不存在强制不强制。
dingy 发表于 2021-8-14 21:56 | 显示全部楼层
函数原型就是8位的
 楼主| huangchui 发表于 2021-8-14 21:59 | 显示全部楼层
HAL_StatusTypeDef HAL_SPI_Transmit(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
dengdc 发表于 2021-8-14 22:00 | 显示全部楼层
另外 如果设成16bit发送的话也会多一组。
chuxh 发表于 2021-8-14 22:02 | 显示全部楼层
那么最后正常了吗
songqian17 发表于 2021-8-14 22:04 | 显示全部楼层
这个是设么原因引起的?
chenjunt 发表于 2021-8-14 22:06 | 显示全部楼层
示波器怎么显示的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

918

主题

12323

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部