如何将带有 SPL 的 STM32F3 代码移植到 STM32F7

Posted

技术标签:

【中文标题】如何将带有 SPL 的 STM32F3 代码移植到 STM32F7【英文标题】:How do I port STM32F3 code with SPL to STM32F7 【发布时间】:2020-03-07 05:18:00 【问题描述】:

我有软件在 72MHz STM32F303 上运行,带有一些真正严格的控制环路,我意识到我的环路运行速度不够快。我需要将代码移植到更快的 216MHz STM32F765,但我发现 F7 系列不支持 F3 的 SPL,只支持较新的 HAL。 HAL 有一个较低层的驱动程序,但如果可以的话,我正试图节省几个月的重新编码我的软件的时间。有谁知道将代码移植到 F7 而不需要几个月的编码的任何方法?

【问题讨论】:

如果您有正在运行的软件,我建议不要切换到 HAL。它在性能方面不是很有效,因为它试图解决所有外围设备的所有可能用例。您确定将 SPL(用于您正在使用的外设)移植到 STM32F7 是一项艰巨的工作吗?我希望大多数外围设备都以相同的方式工作,具有相同或相似的控制寄存器。您是否更准确地评估了工作量(通过比较两个产品数据表)? @GuillaumePetitjean 我确信我的代码需要做很多工作。这就是为什么我在这里询问是否有更简单的方法。已经进行了所有评估和比较,我选择的处理器略高于我完成任务所需的最小值。 【参考方案1】:

我刚收到 ST 的消息 - 有一份从 SPL 到 CUBE LL 的迁移指南:

SPL2LL CONVERTER DOCUMENTATION

CONTENT TRANSLATIONS

显然还有一个 SPL 到 LL 的转换工具:

SPL2LL CONVERTER

如果有人使用过这些工具,请评论使用这些工具的效率和移植性。

【讨论】:

【参考方案2】:

看来您需要做一些工作。事实上,SPL 已经死了,HAL 似乎对于这个用例非常不适合,因为您正在谈论紧密的控制循环。

我的建议是切换到 HAL 并使用您自己的函数来控制您使用的外围设备。这允许您仍然使用诸如UART_HandleTypeDef 之类的 typedef,ST 维护并与 HAL 一起工作以处理性能较低的事情。这还允许您快速添加新内容并在以后进行优化。

同样重要:测试您的先入之见,HAL 可能会更慢,因为它更通用,我个人不建议在 SPI 外围设备上使用它。 (我看到 HAL 在传输之间花费的时间比必要的要长。因为三分之二的在线时间是暂停而不是数据。)但是 你的要求是什么 ?可能 HAL 就足够了,如果是这样,那么您应该使用它。如果这还不够,则为您的平台实施更好的优化版本 (F7) 并针对 HAL 实施进行测试。

【讨论】:

谢谢,但如果可能的话,我会尽量避免使用 HAL - 巨大的开销 - 请参阅上面的 Guillaume 的评论以获得更清晰的信息。我已经看到人们的代码在移植到 HAL 时会大大扩展,而我无法做到这一点。大部分代码都是裸机。控制回路很紧,需要保持这种状态。 似乎最后一段和第二段很重要。请只使用预定义的 typedef。您将自己编写这些内容,它们不会影响性能。 .c 文件的内容既慢又通用。

以上是关于如何将带有 SPL 的 STM32F3 代码移植到 STM32F7的主要内容,如果未能解决你的问题,请参考以下文章

STM32F3 发现 - 实现 GPIO 中断

stm32f3 'USER USB' 未检测到

理论上如何在STM32F3中实现最大采样率?

STM32F3 DISCOVERY USART 不工作

UCOS2_STM32移植详细过程(汇总)

STM32F103R8T6系统移植到STM32F103RCT6