【发布时间】:2018-03-11 13:46:09
【问题描述】:
我有一个带有 STM32F337 的应用程序,它应该实现一个 SPI 从机协议。
每个 SPI 事务数据包或帧,无论您想如何称呼它们,都应该有,比如说,正好 100 个字节。
主机使用 NSS 线确保帧同步,就像在任何好的 SPI 应用程序中一样。
因此,为了传输 100 字节,主机将 NSS 拉低(置位),以通常的方式将 800 位时钟发送到从机,然后再次将 NSS 拉高(解除置位)。
每当一个事务出错时,下一个事务应该通过同步再次正常,因此在 NSS 的“高时间”期间应该评估并重新建立事务。为了实现这一点,我需要一个 NSS 线的中断信号,如果传输的字节数小于 100,它甚至应该触发。(测试表明,只有在传输 100 个字节时才会触发 DMA 中断,没有无论 NSS 多久被取消断言并再次断言。)
我发现µC 单元中的 SPI 从外设只使用 NSS 线来控制 MISO 线的状态(高 Z 与否),但不控制使用它的通信,即。 e.它不会重置任何 DMA 状态或其他任何东西。
因此,我必须找到一种方法来复用 NSS 功能和 EXTI 之间的线路,以便在线路状态发生变化时产生中断。但我看不出有什么办法可以做到这一点——至少,STM32Cube 不会让我为 NSS 和 EXTI 使用相同的引脚。
这是 Cube 还是 µC 单位的限制?我还有其他选择吗(一次将信号连接到多个引脚除外)?
【问题讨论】:
-
SPI 协议中的 IMO 只需检查该行即可。在这种情况下,EXTI 将由它制作“意大利面条代码”,当您收到数据时,您就知道它是完全没有必要的。
-
不幸的是,您的问题完全无法理解。显然,您希望对“事务”进行某种同步,这样 100 字节的包就不会以块的形式发送,而 NSS 在两者之间被取消断言?
-
@PeterJ_01 不幸的是,SPI 外设检查 NSS 以控制 MISO 的状态(= 从模式下的输出),但它不会重置事务状态。 (除非我看到或配置了错误。)
标签: arm microcontroller interrupt stm32 spi