关于STM32F0单片机的SPI从机接收漏字节问题

关于STM32F0单片机的SPI从机接收漏字节问题


前几天因为一个对接的项目,用了STM32F030C8T6这个芯片,做了个双路SPI从机的板子,然后心血来潮,用了CUBEMX+LL库来开发。
结果,真的是惨的一比,资料少不说,还有坑在里面!
这两天在调试这个STM32F030的SPI从机接收问题可是头都大了,每次发送数据后都是会漏掉第一个字节,只能接收到第2个字节,网络上面的STM32F0系列的问题和资料也是少的可怜。
用逻辑分析仪上面都看了,还是找不到问题。
万般无奈之下,从C站下了份STM32F0的编程手册,外加STM32F0的LL库帮助文档,实验了一番才找到问题所在。
STM32F0编程手册:https://download.csdn.net/download/qq_26039331/10694606
STM32F0的LL库帮助文档:https://download.csdn.net/download/wzb56/3992594
首先,在编程手册,我找到了一段话
在这里插入图片描述
看到这里我已经隐隐知道是什么情况了,我刚好每次漏的都是第一个字节,收到第二个字节?
在这里插入图片描述
再看到这一段话,我基本可以确定问题就是FIFO 了。
翻阅帮助手册,果然找到了这个对应的设置。
在这里插入图片描述
上面的介绍也是相当简洁明了,设置触发RXNE的FIFO条件。
回到代码,我马上跑到stm32f0xx_ll_spi.h文件,找到了这个定义
在这里插入图片描述
这下问题就很明白了,这个完全是CUBEMX的漏洞。
CUBEMX里面设置数据宽度是8bit,但是并没有加上这一句
LL_SPI_SetRxFIFOThreshold(SPI2, LL_SPI_RX_FIFO_TH_QUARTER);
而单片机上电,默认的寄存器都是00,看.h文件就知道了,00默认是16bit,当我把这一句加上之后,问题就解决了。
在这里插入图片描述
最后感慨一下,CUBEMX虽然是很方便,但是很多细节还是没有到位,会导致很多问题,慎用。同时,解决问题要从最基本的寄存器和工作原理入手。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值