用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 内核运行(设置后)。
我正在使用时钟频率为 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 内核运行(设置后)。