外设时钟没有势能,但是外设仍然能跑,???

bbslb   2008-4-18 19:00 楼主
    SYS_INIT();           ---> 这里面将外设时钟都disable了
    /* GPIO Configuration */
    GPIO_Configuration();

    RCCU_Div2Config(ENABLE);                        // Enable DIV2
    RCCU_MCLKConfig(RCCU_DEFAULT);                    // Configure MCLK = RCLK
    RCCU_FCLKConfig(RCCU_DEFAULT);                    // Configure FCLK = RCLK
    RCCU_PCLKConfig(RCCU_DEFAULT);                    // Configure PCLK = RCLK
    RCCU_PLL1Config(RCCU_Mul_12, RCCU_Div_2) ;        // Configure the PLL1 ( * 12 , / 2 )
    while(RCCU_FlagStatus(RCCU_PLL1_LOCK) == RESET);// Wait PLL to lock
    RCCU_RCLKSourceConfig(RCCU_PLL1_Output) ;        // Select PLL1_Output as RCLK clock
    // at this step the CKOUT signal should be equal to 48 Mhz

    /* Enable RTC and EIC clocks on APB1 */
    APB_ClockConfig (APB1, ENABLE, UART0_Periph );
    
    /* Enable RTC and EIC clocks on APB2 */
    APB_ClockConfig (APB2, ENABLE, //RTC_Periph |    --> RTC 仍然可以跑
                                   EIC_Periph | 
                                //   TIM0_Periph |  --> T0仍然可以跑
                                   TIM1_Periph |
                                   GPIO0_Periph | 
                                   GPIO1_Periph | 
                                   GPIO2_Periph);
    
    /* Enable the CKOUT clock for debug purpose*/
    APB_ClockConfig (APB2, ENABLE, CKOUT_Periph);

请教怎么实现外设功能的时钟势能与关闭

回复评论 (10)

什么芯片?

                                  
点赞  2008-4-18 21:27

STR710

                                  
点赞  2008-4-20 11:36

试试直接DISABLE,怀疑你调试时先前已经使能

随后没有恢复到复位状态,所以造成这种情况。

试试直接DISABLE:APB_ClockConfig (APB2, DISABLE, RTC_Periph );
点赞  2008-4-20 11:58

在SYS_INIT函数中已经全部DISABLE了

  /* Set the PRCCU registers to theire reset values (This is for debug purpose) */
  RCCU->CCR = 0;
  RCCU->CFR = 0x00008008;
  RCCU->PLL1CR = 0x00000007;
  PCU->PWRCR = 0x8000;

  /* Disable all peripheral on APB1 */
  APB_ClockConfig (APB1, DISABLE,  APB1_ALL_Periph);
    
  /* Disable all peripheral on APB2 */
  APB_ClockConfig (APB2, DISABLE, APB2_ALL_Periph);
  
  /* Stop the PLL2 */
  RCCU_PLL2Disable();

  /* Stop unused periph clocks in PRCCU_PER register for low power consumption */
  //RCCU->PER &=~0x001F;
  RCCU->PER &= 0xfffe0014;      // save ~2mA
点赞  2008-4-20 14:12

请把完整的测试程序发上来

你也可以试试把DISABLE所有外设时钟的操作挪到配置好RCCU之后。

再有,你可以直接察看寄存器的值,看它是否正确。
点赞  2008-4-20 14:39

好的,我试试看。谢谢关注!

                                  
点赞  2008-4-20 14:50

还是不行啊 : (((

                                  
点赞  2008-4-20 14:53

香水

                                 香水,我查看了寄存器,发现对它的操作没有变化,这是怎么回事呢?
点赞  2008-4-20 15:09

寄存器没有变化的截图

                                  
点赞  2008-4-20 15:20

谢谢大家关注,此问题已经找到。


typedef volatile struct
{
  vu32 EMPTY[3];
  vu32 CKDIS;
  vu32 SWRES;
} APB_TypeDef;

-->>>

typedef volatile struct
{
  vu32 EMPTY[4];
  vu32 CKDIS;
  vu32 SWRES;
} APB_TypeDef;

我用的是比较老的库,有这个BUG。
点赞  2008-4-20 16:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复