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,而后续数据正确。

转载于:https://www.cnblogs.com/xingboy/p/9543727.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值