0

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

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

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

调用栈:

  • 主要的
  • SystemClock_Config
  • HAL_RCC_ClockConfig (632)
  • Hal_GetTick

Ps:RAM 在 0x080149A 之后损坏,这就是为什么程序会做一些奇怪的事情 Image 调试器,组装

解决方案

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;
4

1 回答 1

3

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

于 2016-04-28T08:27:17.257 回答