正點(diǎn)原子STM32H743IIT6_ADC時(shí)鐘配置手記
ADC可以選擇 adc_hclk 或 adc_ker_ck 作為時(shí)鐘源. (英文手冊(cè)P900)
其中 adc_ker_ck 可以選擇 pll2_p_ck , pll3_r_ck 或 per_ck.
再其中 per_clk 可以有 HSI, CSI, HSE 三個(gè)選擇.

AHB時(shí)鐘 (hclk)
這個(gè)就不多說(shuō)了,直接用原子給的函數(shù)
調(diào)用:Stm32_Clock_Init(u32 plln,u32 pllm,u32 pllp,u32 pllq)
按自己要求,自行配置;

外設(shè)時(shí)鐘 (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 時(shí)鐘選作 per_ck 時(shí)鐘(復(fù)位后的默認(rèn)值);?
01:將 csi_ker_ck 時(shí)鐘選作 per_ck 時(shí)鐘 ;
10:將 hse_ck 時(shí)鐘選作 per_ck 時(shí)鐘 ;
11:保留,禁止 per_ck 時(shí)鐘.
調(diào)用:__HAL_RCC_CLKP_CONFIG(__CLKPSource__);
__CLKPSource__:選擇外設(shè)時(shí)鐘源.
RCC_CLKPSOURCE_HSI:將?HSI?(64Mhz)?時(shí)鐘選作 per_ck 時(shí)鐘;
RCC_CLKPSOURCE_CSI:將?CSI?(4MHz)?時(shí)鐘選作 per_ck 時(shí)鐘;
RCC_CLKPSOURCE_HSE:將?HSE?(25MHz)?時(shí)鐘選作?per_ck 時(shí)鐘.

PLL2時(shí)鐘
(PLL3和PLL2一樣,函數(shù) / 寄存器名稱(chēng)中的2改成3即可)
(寄存器過(guò)多,就不仔細(xì)寫(xiě)每一位的內(nèi)容了)
寄存器:RCC PLL2 Dividers Configuration Register (RCC_PLL2DIVR):(英文手冊(cè)P382)
配置 R,Q,P,N 四個(gè)系數(shù)
寄存器:RCC PLLs Configuration Register (RCC_PLLCFGR):(英文手冊(cè)P376)
各個(gè)時(shí)鐘的輸出使能
寄存器:RCC PLLs Clock Source Selection Register (RCC_PLLCKSELR):(英文手冊(cè)P374)
配置 M 分頻系數(shù),輸入頻率范圍 (REG) 和 VCO
調(diào)用:RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider);
結(jié)構(gòu)體:RCC_PLL2InitTypeDef
包含:PLL2M, PLL2N,?PLL2P,?PLL2Q,?PLL2R,?PLL2RGE,?PLL2VCOSEL
Divider:輸出使能
可選:DIVIDER_P_UPDATE, DIVIDER_Q_UPDATE, DIVIDER_R_UPDATE.?
(上面三個(gè)是 if - else if - else 關(guān)系)

ADC 時(shí)鐘
寄存器:RCC AHB1 Clock Register (RCC_AHB1ENR)
位5:ADC12EN:ADC1/2 Peripheral Clocks Enable.
調(diào)用:__HAL_RCC_ADC12_CLK_ENABLE();
直接將AHB總線的時(shí)鐘頻率賦予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 時(shí)鐘選作內(nèi)核外設(shè)時(shí)鐘(復(fù)位后的默認(rèn)值)?
01:將 pll3_r_ck 時(shí)鐘選作內(nèi)核外設(shè)時(shí)鐘?
10:將 per_ck 時(shí)鐘選作內(nèi)核外設(shè)時(shí)鐘?
其他:保留,禁止內(nèi)核時(shí)鐘
調(diào)用:__HAL_RCC_ADC_CONFIG(__ADCCLKSource__);
__ADCCLKSource__:選擇ADC時(shí)鐘源
RCC_ADCCLKSOURCE_PLL2:將 PLL2 作為 ADC 時(shí)鐘源
RCC_ADCCLKSOURCE_PLL3:將?PLL3 作為 ADC 時(shí)鐘源
RCC_ADCCLKSOURCE_CLKP:將?per_ck 作為 ADC 時(shí)鐘源

終極手段
調(diào)用:HAL_RCCEx_PeriphCLKConfig(RCC_PeriphCLKInitTypeDef? *PeriphClkInit);
可以直接配置各個(gè)外設(shè)的時(shí)鐘(不止 ACD, 所有外設(shè)時(shí)鐘都可以在這里直接設(shè)置)
具體配置請(qǐng)看函數(shù)內(nèi)容
該函數(shù)調(diào)用了
RCCEx_PLL2_Config(RCC_PLL2InitTypeDef *pll2, uint32_t Divider);
RCCEx_PLL3_Config(RCC_PLL3InitTypeDef *pll3, uint32_t Divider);
__HAL_RCC_CLKP_CONFIG(__CLKPSource__);?
所以也可以在結(jié)構(gòu)體中直接配置,選擇 ADC 時(shí)鐘.
以上
僅作為學(xué)習(xí)筆記,備忘