21ic问答首页 - 请问 MM32F103 的 ADC CLK 分频设置是不是有问题?
请问 MM32F103 的 ADC CLK 分频设置是不是有问题?
fish19682025-02-07
貌似提供的样例代码与规格书对应不上,样例代码里修改了 RCC CFGR 的 BIT 15:14 说对应 2,4, 6, 8 分频 ,但是 使用手册里,对应位 为 reserved 只读始终为 0,并且即便是这样 也只有四种分频选择,与 时钟配置树图 中的 /2, /4, /8 /10 /12 /14 /16 也对不上。 这是提供的信息有纰漏,还是在其他地方有更多信息,我不知道?
完整的问题在下:
我看到 ADC 参考样例代码的初始化过程中,调用了 RCC_ADCCLKConfig(RCC_PCLK2_Div6); 对应的函数内容为
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
tmpreg = RCC->CFGR;
/* Clear ADCPRE[1:0] bits */
tmpreg &= CFGR_ADCPRE_Reset_Mask;
/* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */
tmpreg |= RCC_PCLK2;
/* Store the new value */
RCC->CFGR = tmpreg;
}
其中 CFGR_ADCPRE_Reset_Mask 为 0xFFF3FFF 也就是说,修改 RCC->CFGR 的 Bit[15:14]
但是,规格书中(1.7中文版本)的 RCC CFGR 寄存器(第75页/463) 部分说 “15:14 Reserved始终读为0”并没有解释对应的内容,是否有问题?
HAL_RCC.c 中对应的 define 如下
#define RCC_PCLK2_Div2 ((uint32_t)0x00000000)
#define RCC_PCLK2_Div4 ((uint32_t)0x00004000)
#define RCC_PCLK2_Div6 ((uint32_t)0x00008000)
#define RCC_PCLK2_Div8 ((uint32_t)0x0000C000)
#define IS_RCC_ADCCLK(ADCCLK) (((ADCCLK) == RCC_PCLK2_Div2) || ((ADCCLK) == RCC_PCLK2_Div4) || \
((ADCCLK) == RCC_PCLK2_Div6) || ((ADCCLK) == RCC_PCLK2_Div8))
也就是这两个bit 从 00 到 11 四种组合分别对应 2,4,6,8分频。
在用户手册中 时钟树配置部分(68页/463) 的框图中,ADCCLK 由 APB2 再经 ADC Prescaler 后获得,但是框图中的分频选项为:/2, /4, /8 /10 /12 /14 /16 与这里 RCC 代码的定义也不一致。
希望得到解释说明。
完整的问题在下:
我看到 ADC 参考样例代码的初始化过程中,调用了 RCC_ADCCLKConfig(RCC_PCLK2_Div6); 对应的函数内容为
void RCC_ADCCLKConfig(uint32_t RCC_PCLK2)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_RCC_ADCCLK(RCC_PCLK2));
tmpreg = RCC->CFGR;
/* Clear ADCPRE[1:0] bits */
tmpreg &= CFGR_ADCPRE_Reset_Mask;
/* Set ADCPRE[1:0] bits according to RCC_PCLK2 value */
tmpreg |= RCC_PCLK2;
/* Store the new value */
RCC->CFGR = tmpreg;
}
其中 CFGR_ADCPRE_Reset_Mask 为 0xFFF3FFF 也就是说,修改 RCC->CFGR 的 Bit[15:14]
但是,规格书中(1.7中文版本)的 RCC CFGR 寄存器(第75页/463) 部分说 “15:14 Reserved始终读为0”并没有解释对应的内容,是否有问题?
HAL_RCC.c 中对应的 define 如下
#define RCC_PCLK2_Div2 ((uint32_t)0x00000000)
#define RCC_PCLK2_Div4 ((uint32_t)0x00004000)
#define RCC_PCLK2_Div6 ((uint32_t)0x00008000)
#define RCC_PCLK2_Div8 ((uint32_t)0x0000C000)
#define IS_RCC_ADCCLK(ADCCLK) (((ADCCLK) == RCC_PCLK2_Div2) || ((ADCCLK) == RCC_PCLK2_Div4) || \
((ADCCLK) == RCC_PCLK2_Div6) || ((ADCCLK) == RCC_PCLK2_Div8))
也就是这两个bit 从 00 到 11 四种组合分别对应 2,4,6,8分频。
在用户手册中 时钟树配置部分(68页/463) 的框图中,ADCCLK 由 APB2 再经 ADC Prescaler 后获得,但是框图中的分频选项为:/2, /4, /8 /10 /12 /14 /16 与这里 RCC 代码的定义也不一致。
希望得到解释说明。
您需要登录后才可以回复 登录 | 注册