欢迎光临散文网 会员登陆 & 注册

正点原子STM32H743IIT6_ADC时钟配置手记

2021-04-19 13:12 作者:CaiNiao传奇  | 我要投稿

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 时钟.


以上

仅作为学习笔记,备忘

正点原子STM32H743IIT6_ADC时钟配置手记的评论 (共 条)

分享到微博请遵守国家法律