STM32F103C8 Bluepill板HAL_delay()问题
STM32F103C8 Bluepill board HAL_delay() problem
我正在使用STM32 cubeMX 进行配置,使用Keil 进行编程。
已将板载led引脚pc13引脚设置为输出引脚,默认为推挽模式。将调试器设置为串行线,因为我使用 ST-link V2 作为调试器。 RCC 将 HSE 设置为 crystal/ceramic 谐振器。
和时钟配置设置为默认和生成的项目。
现在我从一个简单的 LED blink 程序开始。如下
HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
HAL_Delay(1000);
构建成功,没有错误并上传,想知道我的 led 没有 blinking 和震惊,因为我以前做过这个,现在它不起作用。
当我一步一步调试时,我的代码只是重复地从两个函数开始。
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 灯亮了 link 只有我将 HAL_dealy 值从 1000 更改为 100 并且工作正常但是,当使用 1000 时根本不起作用。
所以为了测试,我逐渐增加了延迟值,我发现超过 HAL_delay(400) 它不起作用。
无法找到原因任何帮助都将不胜感激。
按照 Tom 的建议,我使用 STstudio 调试了 uwTickFreq。
我得到了以下输出波形。
之后,我还上传了以下代码。并定义了一个变量为“unsigned long int a;”
HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
HAL_Delay(100);
a= HAL_GetTick();
现在我调试了一个使用STstudio的值。奇怪的是,一旦达到 300 左右,a 的值就变成了 0。
似乎终于,当我注意到控制器中的重置问题时,我发现了问题,我四处搜索并找到了一些东西 here。
所以我用STM32立方体编程器检查了我在MCU中设置的可选字节。
设置如下。
因此我启用了这三个可选字节。
并且重置的问题消失了,我现在可以正常使用HAL_delay功能,现在HAL_GetTick()的值也增加了300多。
还有一个问题,我认为是看门狗引起了复位,但为什么它只在我使用计时功能时才引起。
我正在使用STM32 cubeMX 进行配置,使用Keil 进行编程。
已将板载led引脚pc13引脚设置为输出引脚,默认为推挽模式。将调试器设置为串行线,因为我使用 ST-link V2 作为调试器。 RCC 将 HSE 设置为 crystal/ceramic 谐振器。
和时钟配置设置为默认和生成的项目。
现在我从一个简单的 LED blink 程序开始。如下
HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
HAL_Delay(1000);
构建成功,没有错误并上传,想知道我的 led 没有 blinking 和震惊,因为我以前做过这个,现在它不起作用。 当我一步一步调试时,我的代码只是重复地从两个函数开始。
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 灯亮了 link 只有我将 HAL_dealy 值从 1000 更改为 100 并且工作正常但是,当使用 1000 时根本不起作用。 所以为了测试,我逐渐增加了延迟值,我发现超过 HAL_delay(400) 它不起作用。
无法找到原因任何帮助都将不胜感激。
按照 Tom 的建议,我使用 STstudio 调试了 uwTickFreq。
我得到了以下输出波形。
之后,我还上传了以下代码。并定义了一个变量为“unsigned long int a;”
HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
HAL_Delay(100);
a= HAL_GetTick();
现在我调试了一个使用STstudio的值。奇怪的是,一旦达到 300 左右,a 的值就变成了 0。
似乎终于,当我注意到控制器中的重置问题时,我发现了问题,我四处搜索并找到了一些东西 here。
所以我用STM32立方体编程器检查了我在MCU中设置的可选字节。 设置如下。
因此我启用了这三个可选字节。
并且重置的问题消失了,我现在可以正常使用HAL_delay功能,现在HAL_GetTick()的值也增加了300多。
还有一个问题,我认为是看门狗引起了复位,但为什么它只在我使用计时功能时才引起。