如何将为目标设备 STM32F072B 编写的 STM32 代码段(代码示例)转换为 STM32F030r8

How to convert STM32 snippet (code examples) written for target device STM32F072B to STM32F030r8

亲爱的,

我是嵌入式系统的新手。

我已经从 st.com 下载了为目标设备 STM32F072B 编写的代码示例。由于我将 Nucleo-64 与 STM32F030r8 MCU 一起使用,因此我需要转换下载的代码示例以支持我的目标设备 STM32F030r8。

我可以在 Keil 中构建代码示例(为 STM32F072B 编写),但是当我将目标设备更改为 STM32F030r8 时出现错误:

..\system_stm32f0xx.c(301): error:  #20: identifier "RCC_CFGR_PLLSRC_HSI48_PREDIV" is undefined

请告诉我如何转换下载的代码示例以支持我的目标设备 STM32F030r8。

问候 尼亚斯

欢迎来到激动人心的嵌入式系统世界,其中外围设备甚至在 sub-families 个设备内发生变化。

您的编译器抱怨缺少的宏实际上是一个很好的提示,说明出了什么问题。查看 STM32F072B reference manual ST 列出以下可用时钟源:

Various clock sources can be used to drive the system clock (SYSCLK):

  • HSI 8 MHz RC oscillator clock
  • HSE oscillator clock
  • PLL clock
  • HSI48 48 MHz RC oscillator clock (available on STM32F04x, STM32F07x and STM32F09x devices only)

将其与 STM32F030 reference manual 进行比较,我们可以看到此设备上明显缺少 HSI48 时钟。

Various clock sources can be used to drive the system clock (SYSCLK):

  • HSI 8 MHz RC oscillator clock
  • HSE oscillator clock
  • PLL clock

我猜你下载的代码片段的某些部分试图以某种方式使用那个丢失的 HSI48 时钟。在 IDE 内切换设备很可能会导致您的项目使用另一个设备 header,其中根本没有定义宏 "RCC_CFGR_PLLSRC_HSI48_PREDIV"。您也许可以改用其他时钟源,但您的问题没有包含足够的信息来确定地回答这个问题。

通常在使用嵌入式设备时,从一个微控制器切换到另一个微控制器时必须非常小心。即使是最微小的差异(即使是单个寄存器或单个位)也可能会破坏您的构建甚至更糟的是您的硬件。

谢谢亲爱的, 我找到了答案。 Guillaume Petitjean 的回复让我阅读了更多的文档,最终我做到了。

问题: 从 https://www.st.com/en/embedded-software/stm32snippetsf0.html#overview 下载的 STM32SnippetsF0(C 代码示例)设计用于 STM32F072B 探索板上的 运行。因此,更改目标设备(我的案例是 STM32F030r8)需要进行许多更改,例如添加支持的头文件等。 *我之前得到提到的错误是因为我在设置中更改目标设备后简单地编译但没有添加正确的头文件。 :(

*我在问这个。不知道我问的对不对。无论如何,我找到的解决方案与大家分享。

答案:

This document tells how the snippet code can be used on other target device

https://www.st.com/resource/en/data_brief/stm32snippetsf0.pdf

阅读文档并添加必要的驱动程序头文件后,我能够编译和构建代码