stm32f1和f4的移植

stm32f1中的sys_setrcc()在stm32f4中怎么使用

【以下回答由 GPT 生成】

回答

很抱歉,STM32F4系列与STM32F1系列的外设和寄存器有很大不同,因此无法直接使用STM32F1中的sys_setrcc()函数。但是你可以使用STM32F4的库函数来设置系统时钟。下面给出一个在STM32F4中设置系统时钟的示例代码:

// 包含头文件
#include "stm32f4xx_hal.h"

// 设置系统时钟函数
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  // 启用时钟并初始化RCC_OscInitTypeDef结构体
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
  RCC_OscInitStruct.PLL.PLLM = 16;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

  // 初始化RCC_ClkInitStruct结构体
  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_DIV2;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }

  // 使能 SYSCFG 时钟,以便可以使用 HAL_RCC_EnableCSS() 函数来使能主板上复位按键
  __HAL_RCC_SYSCFG_CLK_ENABLE();

  // 初始化直接存储访问(DMA) 控制器
  HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
}

在你的主函数中,调用SystemClock_Config()函数即可完成系统时钟的设置。请注意使用正确的头文件路径和函数调用。

希望这对你有帮助!如果还有其他问题,请随时提问。


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