打印
[STM32F0]

STM32F072 进入STOP模式UART1唤醒问题

[复制链接]
4210|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuyuqiong1|  楼主 | 2015-2-11 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近用STM32F072-DISCOV板子,发现我进入stop模式后电流在18个ua,请问我进入后怎么进行唤醒呢?

用uart1,手册说可以,但是不知道怎么设置,我设置了没有反应啊~~~~



void USART_NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;

  NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPriority = 1;
  NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;

       
       
  NVIC_Init(&NVIC_InitStructure);
}



void UART_vInit(void)  串口初始化
{
    USART_InitTypeDef USART_InitStructure;
    EXTI_InitTypeDef  EXTI_InitStructure;

    /*
    *  USART1_TX -> PA9 , USART1_RX -> PA10
    */
       
  /* USART2 Pins configuration
    -PA9 = USART1_TX
    -PA10 = USART1_RX
    -PA12 = USART1_RTS (DE)
  */       
                /* Enable GPIOA clock */
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);   //引脚时钟配置  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1  ,ENABLE);//串口时钟配置


  /* GPIO configuration for USART1 signals */
  /* (1) Select AF mode (10) on PA9 and PA10 */
  /* (2) AF1 for USART1 signals */
  GPIOA->MODER = (GPIOA->MODER & ~(GPIO_MODER_MODER9|GPIO_MODER_MODER10))\
                 | (GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1); /* (1) */
  GPIOA->AFR[1] = (GPIOA->AFR[1] &~ (GPIO_AFRH_AFRH1 | GPIO_AFRH_AFRH2))\
                  | (1 << (1 * 4)) | (1 << (2 * 4)); /* (2) */ //串口引脚配置

               
               
    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;



    USART_Init(RS_USART, &USART_InitStructure);
    USART_ClearFlag(RS_USART,USART_FLAG_TC);//串口先清除标志

    USART_ITConfig(RS_USART, USART_IT_WU|USART_IT_RXNE, ENABLE);
        USART_ITConfig(RS_USART, USART_IT_TXE, DISABLE);        //串口使能RX/WU
               
        USART_STOPModeCmd(USART1,ENABLE);//串口使能停止
        USART_StopModeWakeUpSourceConfig(USART1,USART_WakeUpSource_RXNE);
               
        EXTI_InitStructure.EXTI_Line = EXTI_Line25;//串口使能STOP唤醒中断
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);       
       
    USART_NVIC_Configuration();//nvic中断使能
    USART_Cmd(RS_USART, ENABLE);


}

StopMode_Measure();//停止模式函数调用

void StopMode_Measure(void)
{
  __IO uint32_t index = 0;
  GPIO_InitTypeDef GPIO_InitStructure;

  /* Allow access to Backup */
  PWR_BackupAccessCmd(ENABLE);


  /* Configure all GPIO as analog to reduce current consumption on non used IOs */
  /* Enable GPIOs clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC |
                        RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOF , ENABLE);

  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
  GPIO_Init(GPIOD, &GPIO_InitStructure);
  GPIO_Init(GPIOF, &GPIO_InitStructure);
  GPIO_Init(GPIOA, &GPIO_InitStructure);
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  /* Disable GPIOs clock */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA |RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC |
                        RCC_AHBPeriph_GPIOD | RCC_AHBPeriph_GPIOF, DISABLE);
                   
               
        UART_vInit();//串口使能唤醒模式

  /* Enter Stop Mode */
  PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);//进入STOP模式


}

//串口中断函数  
void UART_viIsr(void)   //interrupt 4 using 2   /* use registerbank 2 for interrupt */
{
    if((RS_USART->ISR & USART_FLAG_RXNE) != (uint16_t)RESET)
    {
        RS_USART->ISR = (UInt16)~USART_FLAG_RXNE;
        if(RxIsFull())
        {
            RxSetOverFlow();
        }
        else
        {
            Rs232Rx_Buf[RxTail] = (UInt8)(RS_USART->RDR & (uint16_t)0x01FF);
            RxTail = RxNextPosit(RxTail);
        }
    }
    if((RS_USART->ISR & USART_FLAG_TXE) != (UInt16)RESET)
    {
        RS_USART->ISR = (UInt16)~USART_FLAG_TXE;
        if(TxHasData())
        {
            RS_USART->TDR = (Rs232Tx_Buf[TxHead] & (UInt16)0x01FF);
            TxHead = TxNextPosit(TxHead);
            TxResetIdle();
        }
        else
        {
            TxSetIdle();
            USART_ITConfig(RS_USART, USART_IT_TXE, DISABLE);
        }

    }


    //Òç³ö´¦Àí
    if(USART_GetFlagStatus(RS_USART,USART_FLAG_ORE) != (UInt16)RESET)
    {
        USART_ClearFlag(RS_USART,USART_FLAG_ORE);
        USART_ReceiveData(RS_USART);
    }
               
                if(USART_GetFlagStatus(RS_USART,USART_IT_WU)!= (UInt16)RESET)//唤醒STOP模式
                {
                                        EXTI_ClearITPendingBit(EXTI_Line25);
                }

}



大家有没有唤醒的例子,给个参考吧~~~急死了,都一天了,还没整出来~~~急急急
沙发
mmuuss586| | 2015-2-11 19:42 | 只看该作者
用外部中断PA0唤醒看看;
例程可以参考F1的或051的;

使用特权

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

本版积分规则

16

主题

168

帖子

2

粉丝