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

[复制链接]
8053|3
 楼主| arlenchan 发表于 2013-5-20 16:32 | 显示全部楼层 |阅读模式
如题,为什么RCC_PCLK1Config(RCC_HCLK_Div2)函数不起作用?

代码如下:
  1. static void Clock_Init(void)
  2. {
  3.         ErrorStatus HSEStartUpStatus;
  4.        
  5.         //Init RCC external facilities register
  6.         RCC_DeInit();
  7.        
  8.         //Turn on the External High Speed oscillator (HSE).
  9.         RCC_HSEConfig(RCC_HSE_ON);
  10.        
  11.         //Waits for HSE start-up.
  12.         HSEStartUpStatus = RCC_WaitForHSEStartUp();
  13.        
  14.         //HSE is ready
  15.         if(HSEStartUpStatus == SUCCESS)
  16.         {        
  17.                 //Enables the Prefetch Buffer
  18.                 //FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

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

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

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

  28.                 RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_4);

  29.                 RCC_PLLCmd(ENABLE);

  30.                 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
  31.                
  32.                 //Enables the RCC_SYSCLKSource_HSE.
  33.                 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  34.                 //Check HSE used as system clock or not
  35.                 while(RCC_GetSYSCLKSource() != 0x08)
  36.                 {
  37.                         // TODO : doing some thing here to prevent problem
  38.                 }       
  39.         }
  40.         else
  41.         {
  42.                 // TODO : What append if not ?
  43.         }
  44. }
初始化完成以后,我使用TIM3,预将period time设置为1ms,参数如下:
  1. #define PRESCALER_TIMER3        ((uint16_t)15)            /*FCK_CNT = 16MHz / (15 + 1) = 1us   */
  2. #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

粉丝
快速回复 在线客服 返回列表 返回顶部