0

我使用 STM32 cubeMX 进行配置,使用 Keil 进行编程。已将板载 LED 引脚 pc13 引脚设置为输出引脚,默认为推挽模式。将调试器设置为串行线,因为我使用 ST-link V2 作为调试器。RCC 将 HSE 设置为晶体/陶瓷谐振器。并将时钟配置设置为默认值并生成项目。 在此处输入图像描述

在此处输入图像描述

在此处输入图像描述

现在我从一个简单的 LED 闪烁程序开始。如下

    HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
    HAL_Delay(1000);

成功构建,没有错误并上传,我想知道我的 LED 没有闪烁和震惊,因为我以前做过,现在这不起作用。当我逐步调试并且我的代码只是重复来自两个函数时。

  while ((HAL_GetTick() - tickstart) < wait)
  {
  }
__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}

在这段代码中没有发生任何事情我知道代码是正确的,但是 HAL_delay 配置中有一些错误。在挠了一天之后,我尝试上传以下代码

    HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
    HAL_Delay(100);

奇怪的是,现在我的 LED 正在闪烁,只有我将 HAL_dealy 值从 1000 更改为100 并且它工作正常,但是当使用 1000 时根本不起作用。所以为了测试,我逐渐增加了延迟值,我发现超过 HAL_delay(400) 它不起作用。

无法找到原因任何帮助将是可观的。

正如汤姆所建议的那样,我使用 STstudio 调试了 uwTickFreq。我得到了以下输出波形。 在此处输入图像描述

之后,我还上传了以下代码。并将变量定义为“unsigned long int a;”

    HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
    HAL_Delay(100);
    a= HAL_GetTick();

现在我使用 STstudio 调试了 a 的值。奇怪的是,一旦达到 300 左右,a 的值就会变为 0。 在此处输入图像描述

4

1 回答 1

0

似乎终于,当我注意到控制器中的重置问题时,我遇到了问题,我四处搜索并在这里找到了一些东西。

所以我用 STM32 立方体编程器检查了我在 MCU 中设置的可选字节。它设置如下。

在此处输入图像描述

因此我启用了这三个可选字节。

在此处输入图像描述

并且重置的问题消失了,我现在可以正确使用 HAL_delay 函数,现在 HAL_GetTick() 的值也增加了 300 多。

仍然有一个我认为看门狗导致重置的问题,但为什么它只会在我使用计时功能时导致。

于 2021-02-07T06:25:36.403 回答