tim 发表于 2024-1-8 20:25:20

麻烦大家帮我看看STM32F205这一路配置下来,ADC的时钟是多少

MCU是STM32F205RBT6,晶体8MHz,用的老的标准外设库


        RCC_DeInit();               
        RCC_HSEConfig(RCC_HSE_ON);                // Enable HSE (High Speed External clock)
        ...

        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        RCC_PCLK1Config(RCC_HCLK_Div2);                // APB1 Prescaler = 2
        RCC_PCLK2Config(RCC_HCLK_Div2);                // APB2 Prescaler = 2

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_ADC3, ENABLE);
        RCC_PLLConfig(RCC_PLLSource_HSE, 8, 240, 2, 4);
        ...

        RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
        ...

        ADC_CommonInitTypeDef ADC_CommonInitStructure;
        ...
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);                         // Enable ADC's APB interface Clock
        ...
        ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;       
        ...
        ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;        // Delay between 2 sampling phases

        ADC_CommonInit(&ADC_CommonInitStructure);
        ...

wanggoals 发表于 2024-1-8 21:41:29

闲着无聊,顺便帮你问问chatgpt

1、把你的问题粘贴给chatgpt回答如下:

这段代码是针对使用STM32F205RBT6微控制器的MCU进行的初始化设置。以下是对代码的逐行解释:
RCC_DeInit();
这一行将复位RCC (Reset and Clock Control)寄存器,将所有的时钟设置恢复为默认状态。
RCC_HSEConfig(RCC_HSE_ON);
这一行启用外部高速时钟(HSE),即将外部晶体振荡器作为系统时钟源。
RCC_HCLKConfig(RCC_SYSCLK_Div1);
这一行将AHB总线时钟设置为系统时钟,即HCLK = SYSCLK。
RCC_PCLK1Config(RCC_HCLK_Div2);
这一行将APB1总线时钟设置为HCLK的一半,即PCLK1 = HCLK/2。
RCC_PCLK2Config(RCC_HCLK_Div2);
这一行将APB2总线时钟设置为HCLK的一半,即PCLK2 = HCLK/2。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 | RCC_APB2Periph_ADC3, ENABLE);
这一行启用ADC1、ADC2和ADC3外设的时钟。
RCC_PLLConfig(RCC_PLLSource_HSE, 8, 240, 2, 4);
这一行配置PLL (Phase-Locked Loop)时钟源为HSE,输入分频系数为8,倍频系数为240,PLLM分频系数为2,PLLN倍频系数为4。
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
这一行启用电源(PWR)外设的时钟。
ADC_CommonInitTypeDef ADC_CommonInitStructure;
这一行定义了一个名为ADC_CommonInitStructure的结构体变量,用于配置ADC的公共参数。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
这一行启用ADC1外设的时钟。
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
这一行将ADC的分频系数设置为2,即ADC时钟频率为APB2时钟频率的一半。
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
这一行将ADC的两个采样阶段之间的延迟设置为5个时钟周期。
ADC_CommonInit(&ADC_CommonInitStructure);
这一行使用上述配置的参数初始化ADC的公共部分。
以上是部分代码,给出了一些初始化RCC和ADC的设置。这段代码使用了旧的标准外设库进行配置。请注意,这只是代码的一部分,可能还有其他代码用于配置其他外设和功能。

2、继续第二问:
经过这个配置后AD 时钟频率是多少,晶振8MHz?

根据给出的代码和配置信息,通过以下计算可以确定ADC的时钟频率:
首先,根据代码中的RCC_PLLConfig函数配置,PLL的输入频率为8MHz(晶振频率)。
根据代码中的RCC_PCLK2Config函数配置,APB2总线时钟频率为HCLK的一半,即4MHz。
根据代码中的ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2配置,ADC的时钟频率为APB2时钟频率的一半,即2MHz。
因此,经过这个配置后,ADC的时钟频率为2MHz。需要注意的是,这个值是根据代码推断的,并且可能还受到其他因素的影响。实际的时钟频率可能会有所不同。

tim 发表于 2024-1-8 22:13:01

wanggoals 发表于 2024-1-8 21:41
闲着无聊,顺便帮你问问chatgpt

1、把你的问题粘贴给chatgpt回答如下:
(引用自2楼)

第1问好像解释得还像模像样,第2问回答的结果肯定是错的{:sweat:}

chatgpt不靠谱啊

wanggoals 发表于 2024-1-8 22:50:35

感觉目前的ai的最大问题就是会一本正经的胡说八道。

重新问了下,发现还是错的;告诉它错了,没有考虑分频,输出还是错的;让它继续检查,最终回答如下:


非常抱歉之前的回答仍然有误。根据您提供的代码,以下是对ADC时钟频率进行修正的步骤:

RCC_HSEConfig(RCC_HSE_ON);:启用外部高速时钟(HSE)。

RCC_PLLConfig(RCC_PLLSource_HSE, 8, 240, 2, 4);:配置PLL时钟。根据代码,输入分频系数为8,倍频因子为240,分频系数为2。

RCC_HCLKConfig(RCC_SYSCLK_Div1);:将系统时钟(SYSCLK)作为HCLK的源,分频系数为1。

RCC_PCLK1Config(RCC_HCLK_Div2); 和 RCC_PCLK2Config(RCC_HCLK_Div2);:将HCLK作为APB1和APB2总线时钟源,分频系数为2。

ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;:将ADC的预分频系数设置为2。

根据上述修正,可以推断以下时钟频率:

外部高速时钟(HSE)频率:假设外部晶振的频率为8MHz。

PLL输入频率:由于输入分频系数为8,因此PLL的输入频率为8MHz / 8 = 1MHz。

PLL输出频率:根据配置,倍频因子为240,分频系数为2,因此PLL的输出频率为1MHz * 240 / 2 = 120MHz。

系统时钟(SYSCLK)频率:根据配置,SYSCLK的源为PLL输出,因此SYSCLK的频率为120MHz。

APB1总线时钟频率:根据配置,APB1总线时钟为SYSCLK的一半,即120MHz / 2 = 60MHz。

APB2总线时钟频率:根据配置,APB2总线时钟为SYSCLK的一半,即120MHz / 2 = 60MHz。

ADC时钟频率:根据配置,ADC的时钟源为APB2总线时钟的一半,即60MHz / 2 = 30MHz。

请注意,这些值是根据代码中的配置和修正推断的。实际的时钟频率可能受到其他因素的影响,例如MCU的硬件限制或其他配置设置。因此,在实际应用中,还是建议参考相关的文档和数据手册来确定ADC的准确时钟频率。

tim 发表于 2024-1-8 23:11:10

wanggoals 发表于 2024-1-8 22:50
感觉目前的ai的最大问题就是会一本正经的胡说八道。

重新问了下,发现还是错的;告诉它错了,没有考虑分频 ...
(引用自4楼)

{:handshake:}
这次给的解答和我对代码的理解是一致的
希望熟悉该芯片的朋友帮忙确认一下是否正确
页: [1]
查看完整版本: 麻烦大家帮我看看STM32F205这一路配置下来,ADC的时钟是多少