关于stm32的spi发送命令时的注意事项

1 篇文章 0 订阅
1 篇文章 0 订阅

        近日在进行一个倾角仪产品操作时,发现了stm32在往外发送数据时出现的一个问题。类似问题以前也出过,现在再次出现。特地写下来提醒自己注意以后防止再犯错。

        该倾角仪adis16210与主控制器stm32通信时选用的是spi接口,并且在后续的操作过程中是使用stm32的官方函数库。在初期程序调试时,只是进行了spi的读操作(adis可以不用设置初试参数),能正常进行spi的读操作,能获取到随姿态变好的角度值。

        在使用过程中,发现倾角仪更新数据太慢,因此需要对倾角仪进行设置。在程序的初始化阶段,增加了一个spi的写操作,写入一个字节以设置该传感器。更新完程序,运行程序发现再无法正常读取传感器数据了,传感器总是返回0。多次测试,发现该写操作导致倾角仪数据出现问题。

        查阅数据手册,发现在进行spi双向通信时,需要及时读出spi接收寄存器数据,否则会出现缓存溢出问题。尽管在程序的初始阶段,我们只是进行了spi的发送操作。但是因为spi是双向通信,在主设备发送数据时,有发送时钟,因此主设备也会接收到数据,也即接收缓冲器中有数据,我们需要进行一下读取操作(结果可以当无效数据丢弃),以读空数据。

        因此,在stm32发送一个设置参数之后,我等待发送完成,等待接受完成,再进行了一下读spi接受寄存器的操作。再在程序原来位置进行倾角数据读出时,可以正常读取数据。

        因为spi的工作原理类似,因此其它器件在多次发送数据时,中间如果不进行spi接收缓冲器清空操作,就有可能导致接收缓存器溢出,当然有的器件溢出了可能会继续正常工作,但stm32系列芯片在溢出时肯定不会再继续正常工作了。

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值