Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente Pwrpc32

Código fuente Pwrpc32

premisa. El modo de espera solo puede activarse mediante el mecanismo de vigilancia rtc y las interrupciones externas.

RTC debe despertarlo después de 20 segundos, por lo que el perro guardián debe estar apagado (el perro guardián en espera todavía está funcionando; de lo contrario, el perro despertará la MCU para entonces).

Escribe una referencia de código para ti

/**

* @brief programa principal.

* @param Ninguno

* @retval:Ninguno

*/

int main(void)

{

/*Configuración del reloj del sistema*/

/*Mantener la configuración predeterminada HSI 8MHz */

/*Configuración GPIO*/

GPIO_Configuration();

/* Enciende el LED conectado al PC. 01 */

GPIO_SetBits(GPIOC, GPIO_Pin_1);

/*Habilitar relojes PWR y BKP*/

RCC_APB 1 cmd de reloj periférico (RCC_APB 1 periph_PWR | RCC_APB 1 periph_BKP, habilitado);

/*Permitir el acceso al dominio BKP*/

PWR_BackupAccessCmd (habilitado);

/*Configurar la fuente de reloj RTC y el preescalador */

RTC _ Configuration();

/*Esperar hasta que ocurra el segundo evento RTC*/

RTC _ clear FLAG(RTC _ FLAG _ SEC );

while(RTC _ GetFlagStatus(RTC _ FLAG _ SEC) = = RESET

#ifdef WKUP_20s

/* Configurar la alarma RTC después de 20 segundos (= 327000 * 61?s) */

RTC _ configurar alarma(RTC _ get counter() 327000

p>

# De lo contrario

#); ifdef WKUP _ 200 ms milisegundos

Establecer alarma RTC después de 200 ms (= 3276 * 61?s) */

RTC _ configurar alarma (RTC _ get counter() 3276); /p>

#endif

#endif

/*Configurar el modo de conversión ADC*/

ADC _ Configuración();

/* Conv de inicio de software normal de ADC1 */

ADC _ SoftwareStartConvCmd(ADC 1, enable);

/*Pruebe el indicador EOC*/

Y (!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));

/*Lea los datos de conversión regulares y borre la bandera EOC*/

regular convdata = ADC _ GetConversionValue(ADC 1);

ADC_Cmd(ADC1, deshabilitado);

/* Enciende el LED conectado al PC.

01 */

GPIO_ResetBits(GPIOC, GPIO_Pin_1);

/*Esperar a que se complete la última operación de escritura del registro RTC*/

RTC_ waitforlastask( );

/*Solicitud para ingresar al modo de espera (el indicador de activación en la función PWR_EnterSTANDBYMode se borra)*/

PWR _ EnterSTANDBYMode();

mientras (1)

{

}

}

/**

* @brief entra modo de espera.

* @param Ninguno

* @retval:Ninguno

*/

void PWR_EnterSTANDBYMode(void)

{

/*Borrar indicador de activación*/

PWR- gt | = CR_CWUF_SET;

/*Seleccionar modo de espera*/

PWR-gt; CR | = CR_PDDS_SET;

/*Establece el bit SLEEPDEEP del registro de control del sistema Cortex*/

*(_ _ IO uint 32 _ t *)SCB _ sys ctrl | = sys ctrl _ sleep deep _ Set;

/*Esta opción se utiliza para garantizar que la operación de almacenamiento se complete*/

#Si tiene definición (__CC_ARM)

_ _ force _ store();

#endif

/*Solicitud de espera de interrupción*/

_ _ WFI();

}

Las funciones cuyo código fuente no se puede ver se pueden ver en la biblioteca STM32. Espero que ayude. Si tiene alguna pregunta, envíeme un correo electrónico.