HAL_GetTick() 使单片机崩溃

HAL_GetTick() crash mcu

我使用 STCubeMX 为我的 nucleo-f446ZE(STM32F446ZET6) 创建了一个简单的项目。

该项目应该是一个USB设备HID,但它无法启动。弄乱调试器后,我发现 MCU PC 寄存器转到 0x00000000 或 0xFFFFFFFF 或有时随机无效值。

我没有修改任何代码。我用 MDK-ARM(修改后的 GCC,Vision IDE)和 GCC(openSTM32)编译了代码,同样的事情发生了。

调用堆栈:

Ps: RAM 在 0x080149A 之后损坏,这就是程序执行奇怪操作的原因 图片

解决方案

CubeMX 没有很好地设置时钟。这是我用来使 USB 工作的设置。

  //RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  //RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  //RCC_OscInitStruct.HSICalibrationValue = 16;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 192;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  RCC_OscInitStruct.PLL.PLLR = 2;

RCC_ClkInitStruct 可能没有正确初始化(或根本没有)