打印
[其他ST产品]

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

[复制链接]
2618|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xshtz|  楼主 | 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);

请教怎么实现外设功能的时钟势能与关闭
沙发
香水城| | 2008-4-18 21:27 | 只看该作者

什么芯片?

使用特权

评论回复
板凳
xshtz|  楼主 | 2008-4-20 11:36 | 只看该作者

STR710

使用特权

评论回复
地板
浪淘沙| | 2008-4-20 11:58 | 只看该作者

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

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

试试直接DISABLE:APB_ClockConfig (APB2, DISABLE, RTC_Periph );

使用特权

评论回复
5
xshtz|  楼主 | 2008-4-20 14:12 | 只看该作者

在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

使用特权

评论回复
6
香水城| | 2008-4-20 14:39 | 只看该作者

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

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

再有,你可以直接察看寄存器的值,看它是否正确。

使用特权

评论回复
7
xshtz|  楼主 | 2008-4-20 14:50 | 只看该作者

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

使用特权

评论回复
8
xshtz|  楼主 | 2008-4-20 14:53 | 只看该作者

还是不行啊 : (((

使用特权

评论回复
9
xshtz|  楼主 | 2008-4-20 15:09 | 只看该作者

香水

香水,我查看了寄存器,发现对它的操作没有变化,这是怎么回事呢?

使用特权

评论回复
10
xshtz|  楼主 | 2008-4-20 15:20 | 只看该作者

寄存器没有变化的截图

使用特权

评论回复
11
xshtz|  楼主 | 2008-4-20 16:17 | 只看该作者

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


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。

使用特权

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

本版积分规则

12

主题

39

帖子

1

粉丝