用stm32设计移位寄存器的最佳方法是什么

what is the best way to design a shift register with stm32

我正在使用时钟频率为 40MHz 的 STM32F031K6,我想设计一个用作循环移位寄存器的程序 - 使用外部触发器为其提供时钟,移位寄存器中的值每次左移rising/falling 边缘被接收。输出是高电平或低电平的一个引脚。

我需要使时钟边沿和输出之间的时间小于 0.5uS,或者尽快失败。移位寄存器的值可以改变,长度也可以改变,但现在我只是从 11000010 这样的字节开始。

我最初想用外部中断来实现它,但有人建议可能有更好的方法来实现它

非常感谢任何帮助

您可以使用 STM32F0 的 SPI 外设来完成您的任务。当配置为从模式时,每次在 SCK 信号上检测到外部时钟边沿时,MISO 将被设置为通过 SPI 数据寄存器加载到内部移位寄存器的值的下一位。

查看STM32F0参考手册中关于串行外设接口(SPI)的章节。 尤其要查看解决以下关键字的部分:

  • 一般描述:SPI 框图
  • 从模式(主selection:从配置)
  • 单工通信:仅传输模式(RXONLY=0)
  • Slave select (NSS) pin management: Software NSS management (SSM = 1)
  • 数据帧格式(数据大小可设置为4位到16位长度)
  • SPI 配置

SPI 单元是高度可配置的,例如关于时钟信号的极性。由于它是一个独立的硬件单元,它应该能够处理您的 0.5us 反应时间要求。 MCU 固件需要设置 SPI 单元,然后在每次设置 Tx 缓冲区空标志 (TXE) 时向 SPI 单元提供新数据。这也可以通过中断 (TXEIE) 或什至使用带有循环缓冲区的 DMA 通道 (TXDMAEN) 来完成。在后一种情况下,“移位寄存器功能”完全独立于 MCU 内核运行(设置后)。