STM32--时钟树1

什么是时钟

简单来说,时钟是具有周期性的脉冲信号,最常用的是占空比50%的方波。

一、认识时钟树F1

在这里插入图片描述
在这里插入图片描述
外部的可以选择一分频或者二分频而内部的只能二分频
PTT:锁相环,倍频系数

认识时钟树F4

在这里插入图片描述
在这里插入图片描述

认识时钟树F7

在这里插入图片描述
在这里插入图片描述

认识时钟树H7

在这里插入图片描述
在这里插入图片描述

二、配置系统时钟

在这里插入图片描述

如果要使用某个外设,必须先使能改外设的时钟

1、F1系列

sys_stm32_clock_init 函数
HAL_RCC_OscConfig()函数

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
//两个形参
typedef struct 
{ 
	uint32_t  OscillatorType; 		/* 选择需要配置的振荡器 */ 
	uint32_t  HSEState; 			/* HSE 状态 */ 
	uint32_t  HSEPredivValue; 		/* HSE 预分频值 */ 
	uint32_t  LSEState; 			/* LSE 状态 */ 
	uint32_t  HSIState; 			/* HSI状态 */ 
	uint32_t  HSICalibrationValue; 	/* HSI 校准值 */ 
	uint32_t  LSIState; 			/* LSI 状态 */ 
	RCC_PLLInitTypeDef  PLL; 		/* PLL 结构体 */ 
}RCC_OscInitTypeDef;

typedef struct 
{ 
	uint32_t  PLLState; 		/* PLL 状态 */ 
	uint32_t  PLLSource; 	/* PLL 时钟源 */ 
	uint32_t  PLLMUL; 		/* PLL 倍频系数 */ 
}RCC_PLLInitTypeDef;

HAL_RCC_ClockConfig函数

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)

typedef struct 
{ 
	uint32_t  ClockType; 		/* 要配置的时钟(SYSCLK/HCLK/PCLK1/PCLK2) */ 
	uint32_t  SYSCLKSource; 		/* 系统时钟源 */ 
	uint32_t  AHBCLKDivider; 		/* AHB  时钟预分频系数 */ 
	uint32_t  APB1CLKDivider; 	/* APB1 时钟预分频系数 */ 
	uint32_t  APB2CLKDivider; 	/* APB2 时钟预分频系数 */ 
}RCC_ClkInitTypeDef;

uint32_t FLatency 

#define  FLASH_LATENCY_0   0x00000000U 				/* FLASH 0个等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_0 		/* FLASH 1个等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_1 		/* FLASH 2个等待周期 */

2、F4/F7系列

注: 配合上面的简图看更容易理解
HAL_RCC_OscConfig()函数

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
typedef struct 
{ 
	uint32_t  OscillatorType; 		/* 选择需要配置的振荡器 */ 
	uint32_t  HSEState; 			/* HSE 状态 */ 
	uint32_t  LSEState; 			/* LSE 状态 */ 
	uint32_t  HSIState; 			/* HSI 状态 */ 
	uint32_t  HSICalibrationValue; 	/* HSI 校准微调值,范围0x0~0x1F */ 
	uint32_t  LSIState; 			/* LSI 状态 */ 
	RCC_PLLInitTypeDef  PLL; 		/* PLL 结构体 */ 
}RCC_OscInitTypeDef;

typedef struct 
{ 
	uint32_t  PLLState; 		/* PLL 状态 */ 
	uint32_t  PLLSource; 	/* PLL 时钟源 */ 
	uint32_t  PLLM; 		/* PLL 分频系数 M */ 
	uint32_t  PLLN; 		/* PLL 倍频系数 N */ 
	uint32_t  PLLP; 		/* PLL 分频系数 P */ 
	uint32_t  PLLQ; 		/* PLL 分频系数 Q */ 
}RCC_PLLInitTypeDef; 

HAL_RCC_ClockConfig()函数

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)
typedef struct 
{ 
	uint32_t  ClockType; 		/* 要配置的时钟(SYSCLK/HCLK/PCLK1/PCLK2) */ 
	uint32_t  SYSCLKSource; 		/* 系统时钟源 */ 
	uint32_t  AHBCLKDivider; 		/* AHB  时钟预分频系数 */ 
	uint32_t  APB1CLKDivider; 	/* APB1 时钟预分频系数 */ 
	uint32_t  APB2CLKDivider; 	/* APB2 时钟预分频系数 */ 
}RCC_ClkInitTypeDef;

uint32_t FLatency 

#define  FLASH_LATENCY_0   FLASH_ACR_LATENCY_0WS 	/* FLASH 0个等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_1WS 	/* FLASH 1个等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_2WS 	/* FLASH 2个等待周期 */ 
... 
#define  FLASH_LATENCY_15   FLASH_ACR_LATENCY_15WS 	/* FLASH 15个等待周期 */

3、H7系列

HAL_RCC_OscConfig()函数

HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef  *RCC_OscInitStruct)
typedef struct 
{ 
	uint32_t  OscillatorType; 		/* 选择需要配置的振荡器 */ 
	uint32_t  HSEState; 			/* HSE 状态 */ 
	uint32_t  LSEState; 			/* LSE 状态 */ 
	uint32_t  HSIState; 			/* HSI 状态 */ 
	uint32_t  HSICalibrationValue; 	/* HSI 校准微调值 */ 
	uint32_t  LSIState; 			/* LSI 状态 */ 
	uint32_t  HSI48State; 		 	/* HSI48 状态 */ 
	uint32_t  CSIState; 			/* CSI 状态 */ 
	uint32_t  CSICalibrationValue; 	/* CSI 校准微调值 */ 
	RCC_PLLInitTypeDef  PLL; 		/* PLL 结构体 */ 
}RCC_OscInitTypeDef;
typedef struct 
{ 
	uint32_t  PLLState; 		/* PLL1 状态 */ 
	uint32_t  PLLSource; 		/* PLL1 时钟源 */ 
	uint32_t  PLLM; 			/* PLL1 分频系数 M */ 
	uint32_t  PLLN; 			/* PLL1 倍频系数 N */ 
	uint32_t  PLLP; 			/* PLL1 分频系数 P */ 
	uint32_t  PLLQ; 			/* PLL1 分频系数 Q */ 
	uint32_t  PLLR; 			/* PLL1 分频系数 R */ 
	uint32_t  PLLRGE; 		/* PLL1 时钟输入范围 */ 
	uint32_t  PLLVCOSEL; 		/* PLL1 时钟输出范围 */ 
	uint32_t  PLLFRACN; 		/* PLL1 VCO 乘数因子的小数部分 */ 
}RCC_PLLInitTypeDef;

HAL_RCC_ClockConfig()函数

HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef  *RCC_ClkInitStruct, uint32_t FLatency)
//参数介绍
typedef struct 
{ 
	uint32_t  ClockType; 		/* 要配置的时钟 */ 
	uint32_t  SYSCLKSource; 		/* 系统时钟源 */ 
	uint32_t  SYSCLKDivider; 		/* SYSCLK 分频系数 */ 
	uint32_t  AHBCLKDivider; 		/* AHB  时钟预分频系数 */ 
	uint32_t  APB3CLKDivider; 	/* APB3 时钟预分频系数 */ 
	uint32_t  APB1CLKDivider; 	/* APB1 时钟预分频系数 */ 
	uint32_t  APB2CLKDivider; 	/* APB2 时钟预分频系数 */ 
	uint32_t  APB4CLKDivider; 	/* APB4 时钟预分频系数 */ 
}RCC_ClkInitTypeDef; 

uint32_t FLatency 

#define  FLASH_LATENCY_0   FLASH_ACR_LATENCY_0WS 	/* FLASH 0个等待周期 */ 
#define  FLASH_LATENCY_1   FLASH_ACR_LATENCY_1WS 	/* FLASH 1个等待周期 */ 
#define  FLASH_LATENCY_2   FLASH_ACR_LATENCY_2WS 	/* FLASH 2个等待周期 */ 
... 
#define  FLASH_LATENCY_15   FLASH_ACR_LATENCY_15WS 	/* FLASH 15个等待周期 */ 

HAL_RCCEx_PeriphCLKConfig ()函数

HAL_StatusTypeDef HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef  *PeriphClkInit)
typedef struct 
{ 
	uint32_t  PeriphClockSelection; 			/* 要配置的扩展时钟 */ 
	RCC_PLL2InitTypeDef  PLL2; 			/* PLL2 时钟配置结构体 */ 
	RCC_PLL3InitTypeDef  PLL3; 			/* PLL3 时钟配置结构体 */ 
	uint32_t  FmcClockSelection; 			/* FMC 时钟源 */ 
	uint32_t  QspiClockSelection; 			/* QSPI 时钟源 */ 
	uint32_t  Usart234578ClockSelection; 		/* USART2/3/4/5/7/8 时钟源 */ 
	uint32_t  Usart16ClockSelection; 			/* USART1/6 时钟源 */ 
	uint32_t  UsbClockSelection; 			/* USB 时钟源 */ 
	...省略... 
}RCC_PeriphCLKInitTypeDef;

typedef struct 
{ 
	uint32_t  PLL2M; 		/* PLL2 分频系数 M */ 
	uint32_t  PLL2N; 		/* PLL2 倍频系数 N */ 
	uint32_t  PLL2P; 		/* PLL2 倍频系数 P */ 
	uint32_t  PLL2Q; 		/* PLL2 倍频系数 Q */ 
	uint32_t  PLL2R; 		/* PLL2 倍频系数 R */ 
	uint32_t  PLL2RGE; 		/* PLL2 时钟输入范围 */ 
	uint32_t  PLL2VCOSEL; 	/* PLL2 时钟输出范围 */ 
	uint32_t  PLL2FRACN; 	/* PLL2 VCO 乘数因子的小数部分 */ 
}RCC_PLL2InitTypeDef;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值