你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F031 SPI Master Send CRC can not work

[复制链接]
Thomas.W 提问时间:2018-3-1 18:06 /
下面的程序是在主程序里面发送10个数据,并追加一个CRC;
在下面红色一行增加延时,时间过长,CRC就会发不出去;为什么要延时,我是为了给Slave提供足够的响应处理时间。
For循环10000,1000,CRC发不出去;循环缩短到100,就可以。
这是什么原因?

主程序里发数据;
for(i=1;i<11;i++)
{
  for(j=0;j<10000;j++);
  while(LL_SPI_GetTxFIFOLevel(SPI1)==LL_SPI_TX_FIFO_FULL);
  LL_SPI_TransmitData16(SPI1,i);
  if(i==10)
  {
  for(j=0;j<100;j++);
   LL_SPI_SetCRCNext(SPI1);  
  }
}


点评

楼主你要把问题描述清楚啊  发表于 2018-3-2 09:40
收藏 评论5 发布时间:2018-3-1 18:06

举报

5个回答
nyszx 回答时间:2018-3-1 21:45:11
本帖最后由 nyszx 于 2018-3-1 21:50 编辑

楼主标题,标题,标题,可不可以把问题描述清楚,或者使用中文描述。 LL库没用过,给你贴出了具体函数,我理解是要紧跟最后一数据,延时长了就会出问题,感觉没必要延时,一定要加,也应该在后面加,请高手解读:
  1. /**
  2.   * @brief  Set CRCNext to transfer CRC on the line
  3.   * @note   This bit has to be written as soon as the last data is written in the SPIx_DR register.
  4.   * @rmtoll CR1          CRCNEXT       LL_SPI_SetCRCNext
  5.   * @param  SPIx SPI Instance
  6.   * @retval None
  7.   */
  8. __STATIC_INLINE void LL_SPI_SetCRCNext(SPI_TypeDef *SPIx)
  9. {
  10.   SET_BIT(SPIx->CR1, SPI_CR1_CRCNEXT);
  11. }
复制代码

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Thomas.W 回答时间:2018-3-2 09:52:15

SPI Master发送数据后,延迟设置CRCNext,CRC发不出来

修改title;

为什么延时一些去设置CRCNEXT,CRC就发布出去呐??
琦子 回答时间:2018-3-2 10:01:49
我理解的可能有几点原因:第一就是如果没有延时发送不出去是不是因为spi的txe标志位还没有置7,也就是说发送数组还没有清空。第二个就是为什么延时时间过长也发送不出去,我没闹明白你说的是发送端没有发送出去还是说发送端发出去了但是接受端没有接收到啊,如果是发送端没有发送出去是不是因为你设置的延时等待时间和你延时不相符

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Thomas.W 回答时间:2018-3-2 10:38:42
没有延时或者延时很短,CRC可以发出去; 延时长了,CRC就根本不会在MOSI上出现,就是没有把CRC发出来。
手册上,写在发送最后一个数据时,Set CRCNext,就可以发送CRC; 疑问就是,为什么发送完最后一个数据,延时一段时间,去设置CRCNext。CRC就发布出去。
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版