问答

汇集网友智慧,解决技术难题

21ic问答首页 - 请问 MM32F103 的 ADC CLK 分频设置是不是有问题?

MCU MM32 国产芯片

请问 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 代码的定义也不一致。
希望得到解释说明。

回答 +关注 0
30人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册