你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SPI 发送数据需要等待哪些状态标志位?

[复制链接]
patch1582 提问时间:2026-6-25 10:44 / 未解决

我的 SPI 配置为只发模式主机,初始化由 CubeMX 自动生成,但发送逻辑需要手动实现:连续写入 3 个单字节到 TXDR 寄存器完成发送。 我不知道该等待哪些标志位: a)判断 FIFO 是否空闲、能否写入下一字节; b)判断全部 3 个字节是否已经完全移位发送完毕。 我个人理解: a)等待 TXP 标志置 1,只要 TXP 为 1 就可以写入下一字节; b)等待 TXC 标志置 1,TXC 置 1 代表所有数据全部发送完成。 但实际现象不对应,感觉受到 CR2 寄存器配置影响: CR2 设为 0 时,TXP 只会出现一次,之后不再置位; CR2 设为 3 时,TXC ***不会置 1。 有没有同时满足正常逐字节写入 TXDR、且能收到整段发送完成的标志。 全程不使用中断、不调用 HAL 阻塞发送函数,纯轮询寄存器实现。 有人能讲解 TXP、TXC 这两个标志位的完整工作机制吗?

收藏 评论1 发布时间:2026-6-25 10:44

举报

1个回答
butterflyspring 回答时间:2 小时前
从手册的结构图上可以看出,SPI 发送本质上是通过移位寄存器发送出去的。

为了减轻软件负担,设计了 FIFO在前面。所以
1. TXP: Tx-packet space available  FIFO 有空位标志,查询它,这时候可以向里面写数据,排队等待。但是不一定马上发送出去,之前的FIFO 和当前移位寄存器都有可能有数据。利用它可以最大效率发送。
2.TXC: Tx-packet space available   =1: Last TxFIFO frame transmission completed  FIFO 为空的标志,表示所有FIFO空了,里面的数据已经出去了,但总线上未必完成。
3.  EOT: end of transfer   =1: transfer complete  查询这个标志代表发送全部完成。
以上内容详细请参阅参考手册。另外库中的发送和接收函数的查询逻辑也可以参考一下。

STM32H723 SPI TX fifo txp EOT.PNG STM32H723 EOP flag.PNG
  

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版