首页 > 解决方案 > 用stm32设计移位寄存器的最佳方法是什么

问题描述

我正在使用 STM32F031K6,时钟频率为 40MHz,我想设计一个用作循环移位寄存器的程序 - 使用外部触发器为其计时,每次上升/下降沿时移位寄存器中的值左移已收到。输出是一个引脚高或低。

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

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

非常感谢任何帮助

标签: embeddedstm32stm32f0

解决方案


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

查看 STM32F0 参考手册中有关串行外设接口 (SPI) 的章节。特别是看看解决以下关键字的部分:

  • 一般说明:SPI框图
  • 从机模式(主机选择:从机配置)
  • 单工通信:仅发送模式 (RXONLY=0)
  • 从机选择 (NSS) 引脚管理:软件 NSS 管理 (SSM = 1)
  • 数据帧格式(数据大小可设置为 4 位到 16 位长度)
  • SPI的配置

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


推荐阅读