单片机
返回首页

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

2019-08-14 来源:eefocus

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


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


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


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


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


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


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章