打印

GDF103的PCLK1可以大于数据手册说的54MHZ!

[复制链接]
4335|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zitral|  楼主 | 2014-9-23 09:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 zitral 于 2014-9-29 17:04 编辑

图中TIM5的时钟源最大是54MHZ,可我的工程中怎么感觉是108MHZ呢!
以下是我对TIMER的配置
void AUDIO_TIMERConfig(void)
{
        TIM_TimeBaseInitTypeDef TIM_BaseInitStructure;
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);
       TIM_BaseInitStructure.TIM_Period=1113;
       TIM_BaseInitStructure.TIM_Prescaler=0;
       TIM_BaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
       TIM_BaseInitStructure.TIM_CounterMode=TIM_CounterMode_Down;
       TIM_TimeBaseInit(TIM5,&TIM_BaseInitStructure);
       TIM_SelectOutputTrigger(TIM5,TIM_TRGOSource_Update);
        //TIM_Cmd(TIM5,ENABLE);
}
系统时钟108mhz
运行过程中会修改
TIM5->ARR=108000000/48000-1;使之以48khz频率更新计数器!可是按照时钟说明,不应该是54000000/48000-1么!好奇怪!求解释!!


沙发
sunmeat| | 2014-9-23 10:05 | 只看该作者
你用的是GD的哪个型号了,我在手册中怎么没找到TM5了

使用特权

评论回复
板凳
zitral|  楼主 | 2014-9-23 10:08 | 只看该作者
sunmeat 发表于 2014-9-23 10:05
你用的是GD的哪个型号了,我在手册中怎么没找到TM5了

是GD32F103RG

使用特权

评论回复
地板
sunmeat| | 2014-9-23 10:08 | 只看该作者
这是哪个型号,哪个手册中的了

使用特权

评论回复
5
zitral|  楼主 | 2014-9-23 10:12 | 只看该作者
sunmeat 发表于 2014-9-23 10:08
这是哪个型号,哪个手册中的了

GD32F103xx_Datasheet_V2.0.pdf (816.07 KB)
F103RGT6

使用特权

评论回复
6
sunmeat| | 2014-9-23 10:13 | 只看该作者
108000000是AHB的时钟,APB的时钟自动二分频了吧

使用特权

评论回复
7
sunmeat| | 2014-9-23 10:15 | 只看该作者
zitral 发表于 2014-9-23 10:12
F103RGT6

看到了,我看的是中文版的手册,晕

使用特权

评论回复
8
sunmeat| | 2014-9-23 10:21 | 只看该作者
应该是AHB/2*2=108MHZ吧,仔细看看APB1的分频系数和预分频系数

使用特权

评论回复
9
zitral|  楼主 | 2014-9-23 15:14 | 只看该作者
sunmeat 发表于 2014-9-23 10:13
108000000是AHB的时钟,APB的时钟自动二分频了吧

APB的时钟不应该是自动二分频吧!我用的是ST库函数配置的时钟,HSE=12000000,使用的是system_stm32f10x.c中的SetSysClockTo72,时钟刚好是108000000(因为里面默认的是HSE=8000000),
SetSysClockTo72函数中有个
/* HCLK = SYSCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
      
    /* PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
   
    /* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

也就是说 PCLK1=108000000,难道apb1可以到108000000?!

使用特权

评论回复
10
sunmeat| | 2014-9-23 15:36 | 只看该作者
zitral 发表于 2014-9-23 15:14
APB的时钟不应该是自动二分频吧!我用的是ST库函数配置的时钟,HSE=12000000,使用的是system_stm32f10x. ...

我也是这块板子,试试给你回复

使用特权

评论回复
11
sunmeat| | 2014-9-23 16:12 | 只看该作者
zitral 发表于 2014-9-23 15:14
APB的时钟不应该是自动二分频吧!我用的是ST库函数配置的时钟,HSE=12000000,使用的是system_stm32f10x. ...

系统时钟被倍频为72MHZ,然后
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;//AHB不分频    72MHZ
      
    /* PCLK2 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;//APB2不分频   72MHZ
   
    /* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;//APB1 2分频   36MHZ

哪来的108MHZ呢

使用特权

评论回复
12
zitral|  楼主 | 2014-9-23 16:26 | 只看该作者
sunmeat 发表于 2014-9-23 16:12
系统时钟被倍频为72MHZ,然后

哪来的108MHZ呢

/*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
库函数里HSE是按默认的8000000算的,我用的是HSE=12000000,调用RCC_GetClocksFreq得到也是108000000,PCLK1是54000000,我只看了/* PCLK1 = HCLK */应该是 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;//APB1 2分频
但是我用的TIM5计数器以48000HZ产生一个Trigger,和我之前用ST的芯片设置的值就不同!之前是要系统时钟除以2的,现在不用!!郁闷了!

使用特权

评论回复
13
zkcaptain| | 2014-9-23 17:58 | 只看该作者
/*  PLL configuration: PLLCLK = HSE * 9 = 72 MHz */
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE |
                                        RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE | RCC_CFGR_PLLMULL9);
库函数里HSE是按默认的8000000算的,我用的是HSE=12000000,调用RCC_GetClocksFreq得到也是108000000,PCLK1是54000000,我只看了/* PCLK1 = HCLK */应该是 RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;//APB1 2分频
但是我用的TIM5计数器以48000HZ产生一个Trigger,和我之前用ST的芯片设置的值就不同!之前是要系统时钟除以2的,现在不用!!郁闷了!

如果APB1预分频系数=1,那么TIM5的clk=APB1频率
如果APB1预分频系数不等于1,那么TIM5的clk=APB1频率x2

也就是TIM5的clk可以到108M

使用特权

评论回复
14
kekeke| | 2014-9-23 22:57 | 只看该作者
APB1的时钟可以到108MHZ,APB2只可以到54MHZ

使用特权

评论回复
15
sunmeat| | 2014-9-24 07:35 | 只看该作者
kekeke 发表于 2014-9-23 22:57
APB1的时钟可以到108MHZ,APB2只可以到54MHZ

楼上错了,APB1和APB2相反了

使用特权

评论回复
16
sunmeat| | 2014-9-24 07:37 | 只看该作者

TM5挂在APB1上,最大只能为54MHZ

使用特权

评论回复
17
zkcaptain| | 2014-9-24 09:29 | 只看该作者
sunmeat 发表于 2014-9-24 07:37
TM5挂在APB1上,最大只能为54MHZ


TIM5的时钟不是直接用的APB1,而是APB1再经过一个倍频器得到的,所以tim5的时钟可以是APB1的2倍,也就是TIM5的时钟最大可以等于系统时钟,还是直接给你上个图吧。

使用特权

评论回复
18
zitral|  楼主 | 2014-9-24 10:13 | 只看该作者
sunmeat 发表于 2014-9-24 07:37
TM5挂在APB1上,最大只能为54MHZ

发现一个bug
在/* PCLK1 = HCLK */
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
这个地方,不分频和2分频效果一样,PCLK1都能是108000000,也就是说PCLK1可以等于108000000!!而且不分频的时候我的板子也能正常跑!期待验证!

使用特权

评论回复
19
zitral|  楼主 | 2014-9-24 10:25 | 只看该作者
zkcaptain 发表于 2014-9-24 09:29
TIM5的时钟不是直接用的APB1,而是APB1再经过一个倍频器得到的,所以tim5的时钟可以是APB1的2倍,也就是T ...

明白了,原理是这样!!用ST的时候这一点也没注意到!一直认为是按APB1的时钟走的!!不专业了!
但是,我前面说的,GD的APB1却是能到108000000!ST的应该是不能到hclk吧!

使用特权

评论回复
20
zkcaptain| | 2014-9-24 11:17 | 只看该作者
zitral 发表于 2014-9-24 10:25
明白了,原理是这样!!用ST的时候这一点也没注意到!一直认为是按APB1的时钟走的!!不专业了!
但是, ...

都可以到HCLK

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

66

帖子

0

粉丝