在新项目中重新组织STM32代码示例会降低代码的速度



我已经基于STM32Cube_FW_L4_V1.15.0ProjectsNUCLEO-L432KCExamplesTIMTIM_PWMInput中的示例代码构建了一个项目。我使用的Nucleo板是Nucleo-L432KC,我正在用STM32CubIDE 1.3.0对其进行编程。

随着项目的扩大,我试图在一个新项目中更好地组织代码,该项目包含头文件和源文件,因为除了STMHAL项目中的普通文件外,几乎所有内容都在main.c中。我最终在STMCubeIDE中以STM32项目的形式创建了一个新的、经过重组的项目,并运行了代码。然而,与大多数代码都在main.c中的项目相比,它的运行速度非常慢,这很奇怪,因为它主要是定义、inits等。在main.c中,我有无限循环和HAL_TIM_IC_CaptureCallback()。循环如下:

while (1)
{
if (TIM15_DutyCycle > 50 && TIM2_DutyCycle < 50)
{
BSP_LED_Off(LED3);
DWT_Delay_us(200);
}else
{
BSP_LED_On(LED3);
DWT_Delay_us(200);
}
}
}

它产生一个信号,我用另一个定时器读取它的频率。现在的问题是,这些代码在示例项目中有效,但在新项目中无效。用示波器,我看到信号仍然生成,所以代码正在运行,但时间完全不正常,而且非常慢。我想我的问题是,是什么原因导致了这种情况?将代码组织在几个文件中是否会导致过多的上下文切换和执行速度减慢?或者可能是STM32CubeIDE中的某些项目设置导致了这种情况?我还没有发现任何区别。时钟设置等应该都是一样的,但我可能会错过一些东西,尽管它主要是从其他项目复制粘贴的,只是重新组织的。任何项目都不会给出编译器错误或警告。

我意识到这些都是非常普遍的问题,但由于我的代码在原始项目中具有预期的行为,我认为显示所有代码可能没有必要。也许有人以前也经历过类似的事情?

在多个文件中组织代码会导致上下文过多吗切换和较慢的执行?

否。

我的第一个猜测是你无意中更改了时钟设置。您是否更改了SystemClock_Config((?

启用主时钟输出(MCO(引脚,然后使用示波器检查时钟是否以预期频率(80 MHz?(运行。在调用SystemClock_Config((之后添加此行以启用MCO。这是假设您使用的PLL与示例类似。

SystemClock_Config();
HAL_RCC_MCOConfig(RCC_MCO1, RCC_MCO1SOURCE_PLLCLK, RCC_MCODIV_1);

我的第二个猜测是,你的代码中有一个bug,它的行为与你预期的不一样。您需要显示更多代码才能获得帮助。例如,显示计时器配置并显示DWT_Delay_us()

最新更新