CubeMX 配置野火 H743 开发板时钟出错

使用 CubeMX 配置野火的 STM32H743IIT6 挑战者 V2 开发板,自动生成的时钟代码无法运行,使用野火教程中的时钟配置代码正常运行

SYS 配置

img

CLOCK 配置

img

自动生成的代码

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Supply configuration update enable
  */
  HAL_PWREx_ConfigSupply(PWR_LDO_SUPPLY);

  /** Configure the main internal regulator output voltage
  */

  while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {}

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 5;
  RCC_OscInitStruct.PLL.PLLN = 192;
  RCC_OscInitStruct.PLL.PLLP = 2;
  RCC_OscInitStruct.PLL.PLLQ = 48;
  RCC_OscInitStruct.PLL.PLLR = 2;
  RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3;
  RCC_OscInitStruct.PLL.PLLVCOSEL = RCC_PLL1VCOWIDE;
  RCC_OscInitStruct.PLL.PLLFRACN = 0;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2
                              |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2;
  RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2;
  RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

引用 皆我百晓生 小程序回复内容作答:
根据您提供的信息,您遇到了使用CubeMX配置野火STM32H743IIT6挑战者V2开发板时钟出错的问题。自动生成的时钟代码无法运行,而使用野火教程中的时钟配置代码可以正常运行。

根据您提供的代码,发现在自动生成的代码中,使用了RCC_OscInitStruct结构体来配置时钟。其中,配置了HSE作为时钟源,并且使能了PLL。根据代码中的配置,时钟源频率为HSE/PLL_M = 5MHz,PLL倍频系数为192,使得系统时钟频率为5MHz * 192 = 960MHz。同时,还配置了各个时钟分频系数。

根据问题描述,可以推测问题可能出在生成代码时,CubeMX没有正确配置时钟源和PLL的倍频系数等参数。为了解决问题,可以尝试以下操作:

  1. 确保所使用的CubeMX版本是最新的,并且已经正确安装了相关的插件和更新包。
  2. 检查CubeMX中的时钟配置是否正确。可以尝试重新生成代码,确保勾选了正确的时钟源并配置了正确的倍频系数等参数。
  3. 如果问题仍然存在,可以尝试手动修改生成的代码,将时钟源和倍频系数等参数配置为与野火教程中的时钟配置代码相同的数值。

如果以上方法仍然无法解决问题,建议参考野火的技术支持或野火论坛中的相关帖子,以获取更详细的帮助和支持。

题主,这个问题我来替你解决(参考结合AI智能、文心一言),若有帮助,还望采纳,点击回答右侧采纳即可。


可能是因为 CubeMX 配置时钟的方式有误,导致生成的代码不正确。建议按照野火教程中的方法手动配置时钟,并使用野火提供的时钟配置代码进行测试。下面是 STM32H743IIT6 挑战者 V2 开发板的时钟配置代码示例:

/* Configure the main internal regulator output voltage */
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

/* Initializes the RCC Oscillators according to the specified parameters in the RCC_OscInitTypeDef structure. */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 360;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
    Error_Handler();
}

/* Initializes the CPU, AHB and APB buses clocks */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                            |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
    Error_Handler();
}

需要注意的是,时钟配置代码中的参数应该根据实际情况进行修改,不同的芯片、外部晶振和需求都有可能会导致时钟配置有所不同。



/* Configure the main internal regulator output voltage */
__HAL_RCC_PWR_CLK_ENABLE();
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
/* Initializes the RCC Oscillators according to the specified parameters in the RCC_OscInitTypeDef structure. */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE|RCC_OSCILLATORTYPE_LSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.LSEState = RCC_LSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLM = 8;
RCC_OscInitStruct.PLL.PLLN = 360;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = 7;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
    Error_Handler();
}
/* Initializes the CPU, AHB and APB buses clocks */
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                            |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_4) != HAL_OK)
{
    Error_Handler();
}

有了正确的配置了干嘛还要纠结cube昵

CubeMX配置错误:如果CubeMX配置错误,可能会导致生成的时钟代码无法正常运行。您可以尝试重新配置CubeMX,或者参考野火教程中的时钟配置代码。
时钟配置错误:如果时钟配置错误,可能会导致生成的时钟代码无法正常运行。您可以尝试检查时钟配置,修复错误。
系统设置错误:如果系统设置错误,可能会导致生成的时钟代码无法正常运行。您可以尝试重新设置系统。
其他软件冲突:如果其他软件与时钟代码冲突,可能会导致生成的时钟代码无法正常运行。您可以尝试关闭其他软件,或者在时钟代码中添加兼容性代码

CubeMX自动生成的代码可能使用了不同版本的HAL库。如果您的项目使用了不同版本的HAL库,可能会导致与野火教程不一致的问题。

是不是版本不对应呀或者是环境没配好

【以下回答由 GPT 生成】

解决方案:

根据你提供的信息,问题可能出在时钟配置上。有几个可能的原因会导致这种情况发生。

首先,请确认你的开发板和野火教程所使用的开发板是否完全相同。如果不同,可能需要进行一些额外的配置。

接下来,请尝试以下解决方案:

解决方案一:修改时钟配置

尝试使用不同的时钟配置参数来生成代码。打开CubeMX,选择"System Core" -> "RCC",然后修改以下参数:

  • HSE: 如果你的开发板上有外部晶振或者外部时钟源,请确保选择了正确的频率并开启了HSE。
  • PLL: 修改PLL的配置参数,例如修改PLL_SOURCE为RCC_PLLSOURCE_HSE,修改PLLN为192,PLLM为5,PLLR为2等。
  • 其他时钟分频器: 如果需要,可以尝试修改其他时钟分频器的配置,例如AHB,APB,以及D1/D3域的时钟分频。

在生成代码之后,重新编译并下载到开发板中,看是否问题得到解决。

解决方案二:参考野火教程代码

如果修改时钟配置后问题仍然存在,可以尝试参考野火教程中的时钟配置代码。打开野火教程的时钟配置代码,将其添加到你的项目中,并替换掉原有的时钟配置函数。这样可以确保使用了正确的时钟配置参数。

请按照以下步骤尝试解决问题:

  1. 打开野火教程中的时钟配置代码,复制全部代码。
  2. 打开你的项目,找到main.c文件,定位到SystemClock_Config函数。
  3. 将野火教程中的时钟配置代码粘贴到SystemClock_Config函数内,并替换掉原有的代码。
  4. 保存文件并重新编译,然后下载到开发板中。

这样可以确保使用了正确的时钟配置参数,如果问题仍然存在,则可能需要进一步检查你的硬件连接和供电情况。

希望这些解决方案对解决你的问题有所帮助。如果问题依然存在或有任何其他疑问,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

结合GPT给出回答如下请题主参考
初步研究了一下您提供的信息,可能是由于 CubeMX 自动配置时钟时出现了一些问题,导致生成的代码无法正确运行。

建议您按照野火的教程进行时钟配置,以确保时钟配置正确。当然,您也可以尝试手动配置时钟,以便更好地掌握 STM32 的时钟配置知识。

此外,您也可以检查一下您使用的 CubeMX 版本是否是最新的版本,以确保得到最佳的支持和更新。

希望能对您有所帮助。

这可能是由于不同版本的STM32CubeMX或野火开发板库在时钟配置方面存在一些差异,或者可能是由于自动生成的代码存在某些错误或问题

如果您已经尝试了自动生成的代码并且遇到了问题,那么您可以尝试使用野火教程中提供的时钟配置代码野火教程中的代码是为他们的开发板特别编写的,所以应该可以在你的开发板上正常运行

以下是一些可能的步骤来帮助你配置时钟:

  1. 首先,确保你已经安装了正确版本的STM32CubeMX和野火开发板库
  2. 使用STM32CubeMX创建一个新的项目,并选择你的STM32H743IIT6开发板
  3. 在STM32CubeMX中,进入"Clock Configuration"或"Clock Tree"选项卡,并按照野火教程中的说明进行配置
  4. 检查自动生成的代码,特别是与时钟配置相关的代码,看看是否存在任何错误或问题如果发现有错误,你需要手动修复它们
  5. 如果自动生成的代码仍然无法正常运行,那么你可以尝试使用野火教程中提供的时钟配置代码
  6. 如果你仍然遇到问题,那么你可能需要查看STM32CubeMX和野火开发板库的文档或论坛,或者联系野火的技术支持团队以获取帮助

请注意,不同的STM32CubeMX版本和野火开发板库版本可能会有所不同,所以请确保你正在使用最新版本的软件和库

STM32H743使用CubeMX配置Lwip、Freertos


CubeMX 图形配置工具 (UART) H743_cubemx工具_烹小鲜啊的博客-CSDN博客 本文分两部分1.图形操作步骤2.自动生成代码结构分析一:使用CubeMX 配STM32H743 串口模块LPUSART1.使能调试口,以免使用SWD下载需要手动复位2.配置 时钟树 ,基础配置。配置480MHz3.配置串口模块4.配置NVIC中断控制器5.串口中断函数6.Project 设置设置项目名称和路径,IDE7.生成代码二。HAL库生成代码解析1.1 main.c用户自己增加的代码,必须放在 USER CODE相应的位置,负责再次使用CubeMX的时候会_cubemx工具 https://blog.csdn.net/denghuajing/article/details/123178073

检查与时钟相关的外设是否未正确配置,并确保使用的固件或编译器版本与 STM32H743IIT6 开发板兼容。

检查一下程序版本和开发板是否兼容

自动生成的代码不对,有问题撒

检查时钟分频器配置:根据您的需求,检查时钟分频器的配置是否正确,您可以参考野火教程中的时钟配置代码,确保分频器的配置符合您的预期