Código fuente Pwrpc32
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*/ p>
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.