正点原子STM32H743IIT6_ADC时钟配置手记
ADC可以选择 adc_hclk 或 adc_ker_ck 作为时钟源. (英文手册P900)
其中 adc_ker_ck 可以选择 pll2_p_ck , pll3_r_ck 或 per_ck.
再其中 per_clk 可以有 HSI, CSI, HSE 三个选择.

AHB时钟 (hclk)
这个就不多说了,直接用原子给的函数
调用:Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq)
按自己要求,自行配置;

外设时钟 (per_ck)
寄存器:RCC Domain 1 Kernel Clock Configuration Register (RCC_D1CCIPR)
位29:28:CKPERSEL[1:0]:per_ck clock source selection.
00:将 hsi_ker_ck 时钟选作 per_ck 时钟(复位后的默认值);
01:将 csi_ker_ck 时钟选作 per_ck 时钟 ;
10:将 hse_ck 时钟选作 per_ck 时钟 ;
11:保留,禁止 per_ck 时钟.
调用:__HAL_RCC_CLKP_CONFIG(__CLKPSource__);
__CLKPSource__:选择外设时钟源.
RCC_CLKPSOURCE_HSI:将 HSI (64Mhz) 时钟选作 per_ck 时钟;
RCC_CLKPSOURCE_CSI:将 CSI (4MHz) 时钟选作 per_ck 时钟;
RCC_CLKPSOURCE_HSE:将 HSE (25MHz) 时钟选作 per_ck 时钟.

PLL2时钟
(PLL3和PLL2一样,函数 / 寄存器名称中的2改成3即可)
(寄存器过多,就不仔细写每一位的内容了)
寄存器:RCC PLL2 Dividers Configuration Register (RCC_PLL2DIVR):(英文手册P382)
配置 R,Q,P,N 四个系数
寄存器:RCC PLLs Configuration Register (RCC_PLLCFGR):(英文手册P376)
各个时钟的输出使能
寄存器:RCC PLLs Clock Source Selection Register (RCC_PLLCKSELR):(英文手册P374)
配置 M 分频系数,输入频率范围 (REG) 和 VCO
调用:RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider);
结构体:RCC_PLL2InitTypeDef
包含:PLL2M, PLL2N, PLL2P, PLL2Q, PLL2R, PLL2RGE, PLL2VCOSEL
Divider:输出使能
可选:DIVIDER_P_UPDATE, DIVIDER_Q_UPDATE, DIVIDER_R_UPDATE.
(上面三个是 if - else if - else 关系)

ADC 时钟
寄存器:RCC AHB1 Clock Register (RCC_AHB1ENR)
位5:ADC12EN:ADC1/2 Peripheral Clocks Enable.
调用:__HAL_RCC_ADC12_CLK_ENABLE();
直接将AHB总线的时钟频率赋予ADC;
寄存器:RCC Domain 3 Kernel Clock Configuration Register (RCC_D3CCIPR)
位17:16:ADCSEL[1:0]: SAR ADC kernel clock source selection
00:将 pll2_p_ck 时钟选作内核外设时钟(复位后的默认值)
01:将 pll3_r_ck 时钟选作内核外设时钟
10:将 per_ck 时钟选作内核外设时钟
其他:保留,禁止内核时钟
调用:__HAL_RCC_ADC_CONFIG(__ADCCLKSource__);
__ADCCLKSource__:选择ADC时钟源
RCC_ADCCLKSOURCE_PLL2:将 PLL2 作为 ADC 时钟源
RCC_ADCCLKSOURCE_PLL3:将 PLL3 作为 ADC 时钟源
RCC_ADCCLKSOURCE_CLKP:将 per_ck 作为 ADC 时钟源

终极手段
调用:HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef *PeriphClkInit);
可以直接配置各个外设的时钟(不止 ACD, 所有外设时钟都可以在这里直接设置)
具体配置请看函数内容
该函数调用了
RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider);
RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider);
__HAL_RCC_CLKP_CONFIG(__CLKPSource__);
所以也可以在结构体中直接配置,选择 ADC 时钟.
以上
仅作为学习笔记,备忘