打印

为什么RCC_PCLK1Config(RCC_HCLK_Div2)函数不起作用?

[复制链接]
6913|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arlenchan|  楼主 | 2013-5-20 16:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如题,为什么RCC_PCLK1Config(RCC_HCLK_Div2)函数不起作用?

代码如下:
static void Clock_Init(void)
{
        ErrorStatus HSEStartUpStatus;
       
        //Init RCC external facilities register
        RCC_DeInit();
       
        //Turn on the External High Speed oscillator (HSE).
        RCC_HSEConfig(RCC_HSE_ON);
       
        //Waits for HSE start-up.
        HSEStartUpStatus = RCC_WaitForHSEStartUp();
       
        //HSE is ready
        if(HSEStartUpStatus == SUCCESS)
        {        
                //Enables the Prefetch Buffer
                //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

                //Sets the code latency value to FLASH Two Latency cycles
                //FLASH_SetLatency(FLASH_Latency_2);     
               
                //Configures the AHB clock (HCLK).32MHz
                RCC_HCLKConfig(RCC_SYSCLK_Div1);

                //Configures the Low Speed APB clock (PCLK1).16MHz
                RCC_PCLK1Config(RCC_HCLK_Div2);

                //Configures the High Speed APB clock (PCLK2). 32MHz
                RCC_PCLK2Config(RCC_HCLK_Div1);

                RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_4);

                RCC_PLLCmd(ENABLE);

                while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
               
                //Enables the RCC_SYSCLKSource_HSE.
                RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

                //Check HSE used as system clock or not
                while(RCC_GetSYSCLKSource() != 0x08)
                {
                        // TODO : doing some thing here to prevent problem
                }       
        }
        else
        {
                // TODO : What append if not ?
        }
}
初始化完成以后,我使用TIM3,预将period time设置为1ms,参数如下:
#define PRESCALER_TIMER3        ((uint16_t)15)            /*FCK_CNT = 16MHz / (15 + 1) = 1us   */
#define PERIOD_TIMER3                ((uint16_t)999)           /*T3 = FCK_CNT * PSC =  1us * (999 + 1) = 1ms */
但用示波器查看Δt = 500us 小了一倍,而后我改为 PRESCALER_TIMER3        ((uint16_t)31)  ,Δt = 1.00ms了,这样岂不是证明APB1分频得到32MHz频率吗? 可我设置的是16MHz , 求解。
沙发
tangxiujuan| | 2013-5-24 08:45 | 只看该作者
不分频 * 1
分频2以上 再 *2

使用特权

评论回复
板凳
sun1238898| | 2013-5-24 09:38 | 只看该作者
定时器里面有一个寄存器可以倍频2的,那你要查下你是否进行操作了那个寄存器。

使用特权

评论回复
地板
nightwish夜愿| | 2017-3-13 10:11 | 只看该作者
那就是说写1和写2是一样的啊

使用特权

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

本版积分规则

2

主题

9

帖子

0

粉丝