|
我的 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 这两个标志位的完整工作机制吗? |
关于l9663的SPI通信问题
请问一下STM32F103C8T6的Hardwar NSS Output ENABLE后cs持续拉低是为什么
求助,局部变量初始化时未赋值会导致什么后果?
局部变量初始化时未赋值会导致什么后果
使用Hal库的SPI读取磁边传感器导致STM32G4无法运行
为什么STM32H7的DMA第一次启动延时较长?
3.3v单片机能刷写1.8v的spi flash吗?
关于外部事件(EXTI0)触发SPI读取数据
DMAMUX 使用内部外设Request Event(不使用TIM12和LPTIM)
STM32N6跳线flash烧录座出现写入错误,该如何解决。
微信公众号
手机版
为了减轻软件负担,设计了 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 查询这个标志代表发送全部完成。
以上内容详细请参阅参考手册。另外库中的发送和接收函数的查询逻辑也可以参考一下。