0

我最近切换到使用 PlatformIO 使用以下工作流程为 STM32 进行开发:

  • 使用 CubeMX 实用程序创建一个 .ioc 文件
  • stm32pio从命令行实用程序中的 .ioc 文件生成源代码和 PlatformIO 配置
  • 使用适用于 VSCode (Mac) 的 PlatformIO 插件进行编辑、构建和调试

总的来说,这非常有效。但是,我以前在 ST 的 CubeMX IDE 中使用 CubeMX 代码生成,它将一个 .s 文件放在定义 NVIC 的源目录中(据我所知),以及用于异常/中断的默认函数没有明确定义(即,由其默认的弱实现处理的那些。)我看不出这是在新工作流中定义的位置。这是作为构建过程的一部分动态生成的吗?

我问的原因是(除了希望更好地理解整个过程),我想为 EXTI0 编写一个中断处理程序,但将其作为软件中断触发,而不是为其分配引脚。如果那是不可能的,那么整个问题可能就没有实际意义了。

4

1 回答 1

1

我能够找到答案。这些步骤可能对遇到此问题的其他人有用。这是在 MacOS 上完成的,但应该类似于其他操作系统的过程。

在构建过程中,可以看到文件名。它将以 开头startup_,后跟您正在开发的特定芯片的名称。就我而言,这条线是

Compiling .pio/build/disco_f072rb/FrameworkCMSISDevice/gcc/startup_stm32f072xb.o

在我的用户目录的文件夹中搜索.platformio,我找到了匹配的.s文件,在我的情况下是.platformio/packages/framework-stm32cube/f0/Drivers/CMSIS/Device/ST/STM32F0xx/Source/Templates/gcc/startup_stm32f072xb.s

指向文件的路径结构表明了我正在使用的硬件和框架的详细信息:STM32Cube 框架、F0 系列芯片和 GCC 编译器。找到这个文件的最简单方法以及我是如何找到它的,是使用find终端中的命令搜索 PlatformIO 目录。

阅读这个文件给出了我正在寻找的行,定义了用于异常和中断处理的函数的名称,如下所示:

.weak      EXTI0_1_IRQHandler
.thumb_set EXTI0_1_IRQHandler,Default_Handler

看起来,当我对某些驱动程序使用 CubeMX HAL 时,基本的启动代码是使用 CMSIS 完成的,因此对于基于 HAL、LL 或 CMSIS 的构建应该是相同的。

于 2020-05-26T21:56:01.270 回答