0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F4时钟配置的操作步骤

CHANBAEK 来源:头条号秋天滴风 作者:头条号秋天滴风 2023-04-21 11:29 次阅读

本文将介绍STM32F4时钟配置的操作步骤、并对比时钟配置前后LED外设闪烁的快慢以及对应代码的讲解

一、使用默认时钟配置去执行代码、获取LED闪烁的周期

如下图所示我们默认使用的是HSI(内部高速时钟)且不进行任何配置

最后我们系统时钟、以及外设获得的时钟频率为16MHz

主函数中的代码如下:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_USART3_UART_Init();
  /* USER CODE BEGIN 2 */
	printf("this is clock system test2\\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
		mydelay(20);
		HAL_GPIO_TogglePin(GPIOF, GPIO_PIN_10);
		printf("TogglePin\\n");
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

自己写的延时函数如下:

void mydelay(uint8_t time)
{
	uint8_t i;
	uint16_t j;
	
	for(i= 0; i < time; i++)
	{
		for(j = 0; j < 5000; j++)
		{
		}
	}
}

实际测得LED闪烁的周期是在30ms左右

对STM32F4时钟进行配置后执行代码、获取LED闪烁的周期

如下图所示我们对时钟进行配置:

由于时钟频率168MHz是16MHz 10.5倍,我们将mydelay(20)改为mydelay(210)

实际测得LED闪烁的周期是在30ms左右

比对时钟配置前后、LED闪烁周期的区别

由上可知LED闪烁周期相同,但相同的延时周期内、配置后的168MHz系统时钟,运行的延时函数内的空指令数量是默认配置的10.5倍,综上时钟配置后使得指令运行的速度是原来的10.5倍

时钟部分的代码解析

SystemClock_Config();函数中就是我们在时钟树中设置的内容

void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** 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_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 25;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  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_5) != HAL_OK)
  {
    Error_Handler();
  }
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    237

    文章

    22449

    浏览量

    645875
  • 时钟
    +关注

    关注

    10

    文章

    1479

    浏览量

    130306
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66766
  • STM32F4
    +关注

    关注

    3

    文章

    192

    浏览量

    27676
收藏 人收藏

    评论

    相关推荐

    STM32F4时钟初始化配置

    00. 目录文章目录00. 目录01. STM32F4时钟系统概述02. STM32F4时钟系统图03. STM32F4
    发表于 07-23 06:53

    STM32F4时钟树的重要性

    STM32F4时钟时钟是单片机的心脏,重要性不言而喻,STM32F4时钟树是比较复杂的,所以不是一言两语能写清楚的,我只简单的描述下
    发表于 08-11 07:40

    配置STM32F407系统时钟的方法

    STM32F4的系统时钟非常重要,涉及到整个系统的运行结果,无论是什么操作,都需要时钟信号,不同型号的微控制器的默认系统时钟
    发表于 08-12 06:23

    STM32F407系统时钟配置时钟树方法

    STM32F407系统时钟配置时钟树方法一,采用官方库提供的配置(这里外部晶振25MHz,系统配置
    发表于 08-12 08:19

    STM32F4时钟系统的知识

    STM32F4时钟系统的知识在《STM32F4中文参考手册》第六章复位和时钟控制章节有非常详细的讲解,网上关于时钟系统的讲解也有很多,讲不出
    发表于 08-13 08:11

    STM32F4使用库函数配置外部中断的步骤

    转自“STM32F4外部中断入口和外部中断线 - Justice_Gao的日志 单片机论坛并根据自身体会修改目录简介使用库函数配置外部中断的步骤。1) 使能IO口时钟,初始化IO口为输
    发表于 08-13 07:59

    STM32F4的通用定时器配置步骤

    00. 目录文章目录00. 目录01. 通用定时器简介02. 通用定时器时钟03. 定时器配置步骤04. 硬件设计05. 程序示例06. 附录07. 声明01. 通用定时器简介STM32F4
    发表于 08-18 07:43

    介绍STM32F4时钟配置实现

    本文以外部高速时钟源HSE为例,介绍STM32F4时钟配置实现。一、概述STM32F4时钟树如下
    发表于 08-19 08:01

    STM32F4时钟信号输出

    STM32有几个时钟源?系统时钟SYSCLK来源于哪几个时钟源?STM32F4时钟信号输出是什么
    发表于 09-26 07:31

    如何对STM32F4的RTC时钟进行配置

    STM32F4的RTC是什么意思?如何对STM32F4的RTC时钟进行配置呢?
    发表于 11-22 07:24

    STM32F4串口通信的配置步骤是怎样的?

    STM32F4串口通信的配置步骤是怎样的?
    发表于 11-23 06:27

    如何速查STM32F4外设配置

    mcu编程方式是什么?如何速查STM32F4外设配置
    发表于 11-29 06:55

    STM32F4寄存器开发指南

    STM32F4寄存器的时钟该怎样去配置呢?如何去实现对STM32F4各个IO口的位操作呢?
    发表于 11-29 06:29

    STM32STM32F4时钟系统

    00. 目录文章目录00. 目录01. STM32F4时钟系统概述02. STM32F4时钟系统图03. STM32F4
    发表于 11-25 20:06 46次下载
    【<b class='flag-5'>STM32</b>】<b class='flag-5'>STM32F4</b><b class='flag-5'>时钟</b>系统

    AN3988 基于STM32F4时钟配置工具

    AN3988 基于STM32F4时钟配置工具
    发表于 11-24 08:32 0次下载
    AN3988 基于<b class='flag-5'>STM32F4</b>的<b class='flag-5'>时钟</b><b class='flag-5'>配置</b>工具