embedded - 用stm32设计移位寄存器的最佳方法是什么
问题描述
我正在使用 STM32F031K6,时钟频率为 40MHz,我想设计一个用作循环移位寄存器的程序 - 使用外部触发器为其计时,每次上升/下降沿时移位寄存器中的值左移已收到。输出是一个引脚高或低。
我需要使时钟边沿和输出之间的时间小于 0.5uS,或者尽快失败。移位寄存器的值可以改变,长度也可以改变,但现在我只是从一个像 11000010 这样的字节开始。
我最初想用外部中断来实现它,但有人建议可能有更好的方法来实现它
非常感谢任何帮助
解决方案
您可以使用 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 内核运行(设置后)。
推荐阅读
- c++ - 读取文件数据到结构
- kubernetes - 入口路径重定向,掌舵图
- sql-server - 带有 EXEC master.dbo.xp_cmdshell 的 ZIP 文件
- visual-studio-code - Vscode:Hypersnips excention 有时会重复光标
- crystal-reports - 如何提取字符串的一部分并将这些部分与 Crystal 中的文本连接起来
- vba - 如何从 Office VBA 与 Libre Sheet 交互
- java - 为什么要使用端口号 9000 进行服务器连接?
- intellij-idea - IntelliJ增加了新版Lombok的烦恼;
- python - 如何在numpy中沿轴执行外减法
- powershell - 如何使用 powershell 从基于 mediaagent 的 commvault 获取正在运行的作业?