打印

STM32F2时钟配置问题

[复制链接]
6830|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
f43067|  楼主 | 2012-4-25 10:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
请问F2系列怎么配置较低的主频?假如接外部8M晶振,那将PLLM设为8,这样VCO输入频率为1M,将PLLN设为最小为192,这样VCO输出为192M,然后将PLLP设为最大为8,这样得到的系统时钟为192/8=24M,我的疑问是是不是将PLL作为系统时钟,那系统时钟就不能低于24M?难道想用24M以下的主频时就只能选24M以下的晶振然后将HSE直接作为系统时钟?
沙发
gaochy1126| | 2012-4-25 13:14 | 只看该作者
这个应该都是通过分频寄存器来实现的,看看例程,自己分析一下,应该很简单的

使用特权

评论回复
板凳
f43067|  楼主 | 2012-4-25 13:51 | 只看该作者
例程上都是按照120M的主频跑的。

使用特权

评论回复
地板
mage心寒| | 2012-4-25 16:55 | 只看该作者
void RCC_Configuration(void)
{
        SystemInit();//下面是给各模块开启时钟
/*   ErrorStatus HSEStartUpStatus;
        RCC_DeInit();                       //复位RCC模块的寄存器,复位成缺省值
        RCC_HSEConfig(RCC_HSE_ON);     // 开始HSE时钟,因为PLL用HSE作为时钟源
        HSEStartUpStatus = RCC_WaitForHSEStartUp();  //等待HSE起振
        if(HSEStartUpStatus == SUCCESS)
        {
            RCC_HCLKConfig(RCC_SYSCLK_Div1);   //设置AHP时钟         
                RCC_PCLK2Config(RCC_HCLK_Div1);    // 设置高速APB2时钟
                RCC_PCLK1Config(RCC_HCLK_Div2);    // 设置低速APB1时钟
                RCC_PLLCmd(ENABLE); // 启动PLL
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); // 配置时钟系统为PLL
    } */
       
}
时钟是随便配置的亲,有1,2,4,8,16,64,128,256,512这个是AHB时钟,我用的是F2系列的,你看各个时钟下面挂的啥,我待会给你贴上来你就知道了。。

使用特权

评论回复
5
mage心寒| | 2012-4-25 16:56 | 只看该作者
上面是我自己写的程序,我贴库里面的,在rcc.c文件里面:
/**
  * @brief  Configures the AHB clock (HCLK).
  * @note   Depending on the device voltage range, the software has to set correctly
  *         these bits to ensure that HCLK not exceed the maximum allowed frequency
  *         (for more details refer to section above
  *           "CPU, AHB and APB busses clocks configuration functions")
  * @param  RCC_SYSCLK: defines the AHB clock divider. This clock is derived from
  *         the system clock (SYSCLK).
  *          This parameter can be one of the following values:
  *            @arg RCC_SYSCLK_Div1: AHB clock = SYSCLK
  *            @arg RCC_SYSCLK_Div2: AHB clock = SYSCLK/2
  *            @arg RCC_SYSCLK_Div4: AHB clock = SYSCLK/4
  *            @arg RCC_SYSCLK_Div8: AHB clock = SYSCLK/8
  *            @arg RCC_SYSCLK_Div16: AHB clock = SYSCLK/16
  *            @arg RCC_SYSCLK_Div64: AHB clock = SYSCLK/64
  *            @arg RCC_SYSCLK_Div128: AHB clock = SYSCLK/128
  *            @arg RCC_SYSCLK_Div256: AHB clock = SYSCLK/256
  *            @arg RCC_SYSCLK_Div512: AHB clock = SYSCLK/512
  * @retval None
  */
void RCC_HCLKConfig(uint32_t RCC_SYSCLK)
{
  uint32_t tmpreg = 0;
  
  /* Check the parameters */
  assert_param(IS_RCC_HCLK(RCC_SYSCLK));

  tmpreg = RCC->CFGR;

  /* Clear HPRE[3:0] bits */
  tmpreg &= ~RCC_CFGR_HPRE;

  /* Set HPRE[3:0] bits according to RCC_SYSCLK value */
  tmpreg |= RCC_SYSCLK;

  /* Store the new value */
  RCC->CFGR = tmpreg;
}

这个是配置AHB的

使用特权

评论回复
6
mage心寒| | 2012-4-25 16:57 | 只看该作者
/**
  * @brief  Configures the Low Speed APB clock (PCLK1).
  * @param  RCC_HCLK: defines the APB1 clock divider. This clock is derived from
  *         the AHB clock (HCLK).
  *          This parameter can be one of the following values:
  *            @arg RCC_HCLK_Div1:  APB1 clock = HCLK
  *            @arg RCC_HCLK_Div2:  APB1 clock = HCLK/2
  *            @arg RCC_HCLK_Div4:  APB1 clock = HCLK/4
  *            @arg RCC_HCLK_Div8:  APB1 clock = HCLK/8
  *            @arg RCC_HCLK_Div16: APB1 clock = HCLK/16
  * @retval None
  */
void RCC_PCLK1Config(uint32_t RCC_HCLK)
{
  uint32_t tmpreg = 0;

  /* Check the parameters */
  assert_param(IS_RCC_PCLK(RCC_HCLK));

  tmpreg = RCC->CFGR;

  /* Clear PPRE1[2:0] bits */
  tmpreg &= ~RCC_CFGR_PPRE1;

  /* Set PPRE1[2:0] bits according to RCC_HCLK value */
  tmpreg |= RCC_HCLK;

  /* Store the new value */
  RCC->CFGR = tmpreg;
}
APB1的,这两个使能分频16上面也有说APB2和这个一样。。

使用特权

评论回复
7
mage心寒| | 2012-4-25 16:59 | 只看该作者
STM32F205VC系统结构图.pdf (138.98 KB) 这个是F2系列的系统结构图,可以对着上面修改时钟达到你想要的速度,当然我是越快越好了。。F1跟这个也是差不多的。。对着看改就好了。。

使用特权

评论回复
8
f43067|  楼主 | 2012-4-25 17:27 | 只看该作者
:handshake很感谢mage心寒啊,一下解决我的问题了。小弟刚接触F2系列,文档看的不细致。

使用特权

评论回复
9
mage心寒| | 2012-4-25 19:23 | 只看该作者
8# f43067
我就没看过,我上周四刚开始搞,公司一个项目要用,我这个项目搞完就不搞这个了,搞DSP了。。我都是用到哪然后去看,英文资料看的会蛋疼的。。用到的时候去看下还是挺爽的亲。。加油哇。。。我对M3也不熟,而且我用的是F2系列的。。我现在也很蛋疼。。

使用特权

评论回复
10
lut1lut| | 2012-4-26 09:46 | 只看该作者
我的疑问是是不是将PLL ...
f43067 发表于 2012-4-25 10:11


使用PLL输出作为系统时钟SYSCLK,最小频率就是24MHz。datasheet上有明确的说明

PLL.png (28.6 KB )

PLL.png

使用特权

评论回复
11
mage心寒| | 2012-4-26 10:08 | 只看该作者
使用PLL输出作为系统时钟SYSCLK,最小频率就是24MHz。datasheet上有明确的说明
lut1lut 发表于 2012-4-26 09:46


系统时钟是这样的,可是你又不是直接用系统时钟,我们用的是挂在哪个总线下的东西就用哪个时钟,那个是可以随便配置的。。你说的那个系统时钟就是定时器的最小时钟吧,但是我们对于定时器应该是越快越好吧。。

使用特权

评论回复
12
wandersky| | 2012-8-20 17:37 | 只看该作者

使用特权

评论回复
13
Jason_Ding| | 2014-3-27 09:33 | 只看该作者
我是初学者,谢谢楼上解惑!

使用特权

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

本版积分规则

7

主题

20

帖子

0

粉丝