硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2879|回复: 4
收起左侧

[SPI/QSPI] H7 SPI 小坑

[复制链接]

58

主题

267

回帖

446

积分

高级会员

积分
446
发表于 2021-9-15 18:31:07 | 显示全部楼层 |阅读模式
用 H7 的时候,发现使用轮询接收函数经常会出现接收出错。
查看轮询函数源码发现 H7 的 SPI 跟 F4 等有点不同。

个人理解是:
F4 是发一个字节出去,才会收一个字节进来,所以轮询循环被打断了也没事。
H7的 SPI 是有个寄存器可以设置好要收多少字节,然后硬件自动产生时钟,然后软件开始循环接收,如果这个循环被更高优先级任务打断了,中间就可能有一些字节丢了。然后一直达不到设置的接收数量,最终超时。

照这么看,使用 轮询 SPI 就只能关中断。或者使用 中断接收 或 DMA 接收。
但如果是访问存储器,通信量较大,关中断有点不现实。 所以轮询方式有点鸡肋。。


也不知道上面的理解对不对。

回复

使用道具 举报

1

主题

94

回帖

97

积分

初级会员

积分
97
发表于 2021-9-16 13:09:31 | 显示全部楼层
你可以拆成一个字节一个字节的轮询啊。
回复

使用道具 举报

12

主题

26

回帖

62

积分

初级会员

积分
62
发表于 2021-10-8 14:10:17 | 显示全部楼层
初始化完了以后,一定要先执行一次读写(可以把这一步放到初始化代码中去),再进行正式的传输,应该就不会有这个问题了。
回复

使用道具 举报

18

主题

321

回帖

375

积分

高级会员

积分
375
发表于 2021-10-24 11:53:32 | 显示全部楼层
szttg 发表于 2021-10-8 14:10
初始化完了以后,一定要先执行一次读写(可以把这一步放到初始化代码中去),再进行正式的传输,应该就不会 ...

感觉你说的这个方法不对,初始化完了以后发送一次数据,并不能保证在轮训的时候不会打断啊
回复

使用道具 举报

6

主题

57

回帖

75

积分

初级会员

积分
75
发表于 2021-10-25 09:27:05 | 显示全部楼层
用中断,自己注册callback函数。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-17 15:23 , Processed in 0.271172 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表