使用CubeMX时,在PlatformIO中为STM32定义NVIC的文件在哪里?

使用CubeMX时,在PlatformIO中为STM32定义NVIC的文件在哪里?,stm32,platformio,stm32f0,Stm32,Platformio,Stm32f0,我最近使用PlatformIO为STM32开发了以下工作流程: 使用CubeMX实用程序创建.ioc文件 从stm32pio命令行实用程序的.ioc文件生成源代码和平台配置 使用VSCode(Mac)的PlatformIO插件进行编辑、构建和调试 总的来说,这非常有效。但是,我以前在ST的CubeMX IDE中使用了CubeMX代码生成,它在源目录中放置了一个.s文件(据我所知)来定义NVIC,以及用于未明确定义的异常/中断(即,由默认弱实现处理的异常/中断)的默认函数我看不出这在新工作流中

我最近使用PlatformIO为STM32开发了以下工作流程:

  • 使用CubeMX实用程序创建.ioc文件
  • stm32pio
    命令行实用程序的.ioc文件生成源代码和平台配置
  • 使用VSCode(Mac)的PlatformIO插件进行编辑、构建和调试
总的来说,这非常有效。但是,我以前在ST的CubeMX IDE中使用了CubeMX代码生成,它在源目录中放置了一个.s文件(据我所知)来定义NVIC,以及用于未明确定义的异常/中断(即,由默认弱实现处理的异常/中断)的默认函数我看不出这在新工作流中的定义。这是作为构建过程的一部分动态生成的吗


我提出这个问题的原因是(除了希望更好地理解整个过程之外),我想为EXTI0编写一个中断处理程序,但将其作为软件中断触发,而不是为其分配一个pin。如果这是不可能的,那么也许整个观点都没有意义。

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

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

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的构建应该是相同的。

无法回答这个特定的工作流/IDE,但您应该查找向量表。它必须在源文件中的某个位置定义,可能是汇编(assembly)或C。您通常可以在STM32上触发EXTI软件中断。我不知道STM32F0的具体细节,但在参考手册中有解释。