打印

关于STM32 停止模式的一个小问题

[复制链接]
3557|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sz_stm32|  楼主 | 2012-1-15 14:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
看MDK自带的关于STM32 STOP模式例程中,一旦进入STOP模式,所有时钟就停止,但是看MDK自带例程却发现还有如下一句:
/* Request to enter STOP mode with regulator ON */
    PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);      
    /* At this stage the system has resumed from STOP mode -------------------*/
    /* Turn on led connected to PC.06 */
    GPIO_SetBits(GPIOC, GPIO_Pin_6);

这是时钟都停止了,在置位PC6是否不妥?
沙发
airwill| | 2012-1-16 13:53 | 只看该作者
这里只是为了显示一个指示灯在那里, 以免用户或是你自己以为没有电了.
出个状态而已. 对功能没有影响.

使用特权

评论回复
板凳
香水城| | 2012-1-17 11:09 | 只看该作者
执行这句之后,PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);  
CPU就停止了,下面的语句不会被马上执行的;在CPU被从停止模式唤醒后,程序才会继续往下执行。

所以那句设置PC6的语句是在唤醒后执行的。

使用特权

评论回复
地板
252tp| | 2018-9-7 09:42 | 只看该作者
香水城 发表于 2012-1-17 11:09
执行这句之后,PWR_EnterSTOPMode(PWR_Regulator_ON, PWR_STOPEntry_WFI);  
CPU就停止了,下面的语句不会 ...

香版现在我用stm32f030c8t6进入停止模式,好像直接就绕过去了,我不开定时器中断使用查询的时候能正常进入,一旦开了定时中断就不行了?是什么原因?

使用特权

评论回复
5
香水城| | 2018-9-7 09:57 | 只看该作者
252tp 发表于 2018-9-7 09:42
香版现在我用stm32f030c8t6进入停止模式,好像直接就绕过去了,我不开定时器中断使用查询的时候能正常进 ...

注意进入STOP模式前要确保没有待处理的中断请求存在,否则STOP执行指令会被无视。

使用特权

评论回复
6
252tp| | 2018-9-7 11:16 | 只看该作者
香水城 发表于 2018-9-7 09:57
注意进入STOP模式前要确保没有待处理的中断请求存在,否则STOP执行指令会被无视。 ...

片子STM32F030C8,写了个测试版本还是进不去(时钟使用的是内部HSI倍频来的),香版帮忙看下。手册里面有写Note: To enter Stop mode, all EXTI Line pending bits (in Pending register
(EXTI_PR)), all peripherals interrupt pending bits and RTC Alarm flag must
be reset. Otherwise, the Stop mode entry procedure is ignored and
program execution continues. 下面代码就初始化了GPIO,还有个TIM14定时器,开了定时器中断而已,其它外设都没有开
int main(void)
{
        static u8 bSciTxdCnt = 0x00;
        static u8 bBtnChkCnt = 0x00;
       
        GPIO_Config();
        TIM14_Config();
        //EXIT0_Init();
        //EXIT1_Init();
        //EXIT2_Init();
        NVIC_Config();
        HalAcLedOn();       
        TestSingnal();
        for(;;)
        {
                       
                        if(flag_500ms & 0x04)
                        {
                                flag_500ms &= (~0x04);

                                        bBtnChkCnt++;
                                        if(bBtnChkCnt >= 10)
                                        {
                                                bBtnChkCnt = 0x00;
                                                ADC_Cmd(ADC1, DISABLE);
                                                TIM_Cmd(TIM14,DISABLE);
                                                TIM_ClearITPendingBit(TIM14, TIM_IT_Update);
                                                sTimer14IntDis();
                                                HalAcLedOff();
                                                RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);
                                                PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFE);
                                                ADC1_CH_DMA_Config();
                                                SystemInit();
                                                bSciTxdCnt = 0x00;
                                                NVIC_Config();
                                                TIM_ClearITPendingBit(TIM14, TIM_IT_Update);
                                                TIM_Cmd(TIM14,ENABLE);
                                        }
                                }

使用特权

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

本版积分规则

4

主题

6

帖子

0

粉丝