[Registro de aprendizaje] Experimento de vigilancia STM32

¿Por qué perro guardián?

        En un sistema de microcomputadora compuesto por una microcomputadora de un solo chip, el trabajo de la microcomputadora de un solo chip a menudo se ve interferido por campos electromagnéticos externos , lo que hace que el programa se escape y caiga en un bucle infinito, interrumpiendo el funcionamiento normal del programa. , y el sistema controlado por la microcomputadora de un solo chip no puede continuar funcionando, hará que todo el sistema se estanque y produzca consecuencias impredecibles . Por lo tanto, fuera de la consideración del monitoreo en tiempo real del estado de funcionamiento de la microcomputadora de un solo chip Se ha producido un módulo o chip utilizado específicamente para monitorear el estado de ejecución del programa de microcomputadora de un solo chip , comúnmente conocido como " vigilancia " .

¿Qué problema resuelve un perro guardián?

        El sistema no se puede restablecer al iniciar el funcionamiento normal.

        En el caso de que el sistema se salga de control (ejecución anormal del programa), el sistema se reinicia y el programa se vuelve a ejecutar.

Descripción general del organismo guardián

        STM32 tiene dos dispositivos de vigilancia integrados, lo que proporciona mayor seguridad, precisión horaria y   flexibilidad de uso. Se pueden utilizar dos dispositivos de vigilancia (vigilancia independiente / vigilancia de ventana ) para detectar y resolver fallas causadas por errores de software. Cuando el contador alcanza un valor de tiempo de espera determinado, se activa una interrupción (solo vigilancia de ventana) o se genera un reinicio del sistema.

        El mecanismo de vigilancia independiente (IWDG) está controlado por un reloj dedicado de baja velocidad ( LSI) y permanece activo incluso si falla el reloj principal .  El mecanismo de vigilancia independiente es adecuado para aplicaciones en las que se requiere que el mecanismo de vigilancia trabaje fuera del programa principal y tiene bajos requisitos de precisión de tiempo.

        El perro guardián de ventana (WWDG) es controlado por un reloj dividido del reloj APB1. Detecte operaciones de aplicaciones inusualmente tardías o prematuras a través de ventanas de tiempo configurables. Los perros guardianes de ventana son más adecuados para programas que requieren que el perro guardián funcione dentro de una ventana sincronizada con precisión.


Experimento de vigilancia independiente (IWDG)

Descripción funcional:

        Escriba 0xCCCC en el registro de claves ( IWDG_KR) para comenzar a habilitar el mecanismo de vigilancia independiente. En este momento, el contador comienza a disminuir desde su valor de reinicio 0xFFF . Cuando el valor del contador alcanza el valor final 0x000 , se genera una señal de reinicio ( IWDG_RESET) .

        Siempre que se escribe 0xAAAA en el registro de valor clave IWDG_KR (generalmente llamado alimentación de perro) , el valor del registro de recarga automática IWDG_RLR se recargará en el contador, evitando así un reinicio del perro guardián.

        Si el programa es anormal, el perro no podrá alimentarse normalmente y el sistema se reiniciará.

Diagrama de bloques de vigilancia independiente

        Registro de valor clave IWDG_KR: 0~15 bits son válidos

Registro preescalador IWDG_PR: 0~2 bits son válidos. Tiene función de protección contra escritura. Para operar, cancele primero la protección contra escritura.

Recargar registro IWDG_RLR: Los bits 0~11 son válidos. Tiene función de protección contra escritura. Para operar, cancele primero la protección contra escritura.

Registro de estado IWDG_SR: los bits 0~1 son válidos

Tiempo de espera de vigilancia independiente

Cálculo del tiempo de desbordamiento:

   Todo=((4 × 2^prer) × rlr ) /40 M3)

La frecuencia de reloj LSI=40K, un ciclo de reloj de vigilancia es el tiempo de espera mínimo.

Tiempo de espera máximo = (valor máximo del registro IWDG_RLR) X período de reloj de vigilancia

Función de biblioteca de operaciones de vigilancia independiente IWDG

void IWDG_WriteAccessCmd(uint16_t IWDG_WriteAccess);//Cancelar protección contra escritura: 0x5555 habilitar

void IWDG_SetPrescaler(uint8_t IWDG_Prescaler);//Establecer el coeficiente del preescalador: escribir PR

void IWDG_SetReload(uint16_t Reload);//Establece el valor de recarga: escribe RLR

void IWDG_ReloadCounter(void);//Alimenta al perro: escribe 0xAAAA en KR

void IWDG_Enable(void);//Habilitar vigilancia: escribir 0xCCCC en KR

FlagStatus IWDG_GetFlagStatus(uint16_t IWDG_FLAG);//Estado: recarga/actualización del preescalador

Pasos de la operación de vigilancia independiente

①Cancelar la protección contra escritura del registro:
IWDG_WriteAccessCmd ();
② Establezca el coeficiente de preescalador del organismo de control independiente para determinar el reloj:
IWDG_SetPrescaler ();
③ Establezca el valor de recarga del mecanismo de vigilancia y determine el tiempo de desbordamiento 
IWDG_SetReload ();
④ Habilitar vigilancia:
IWDG_Enable ()
⑤ Aplicación para alimentar perros:
IWDG_ReloadCounter ();

Cálculo del tiempo de desbordamiento: Tout=((4 × 2^prer) × rlr ) /40 ( M3)

Ejercicios practicos:

 

 El resultado de este programa: la luz roja parpadea una vez cada 200 ms en estado sin operación y la luz permanece constante después de presionar el botón KEY_UP.

 


Experimento de vigilancia de ventanas (WWDG)

Descripción general:

Se llama ventana porque el tiempo de alimentación del perro está dentro de un rango (ventana) con un límite superior e inferior. Puede establecer el tiempo límite superior (el límite inferior es fijo) configurando los registros relevantes. Alimente a su perro ni demasiado temprano ni demasiado tarde.

El perro guardián independiente limita el tiempo de alimentación del perro a 0-x, y x lo determina el registro correspondiente. No alimente a su perro demasiado tarde.

Diagrama de trabajo

 Diagrama de bloques de vigilancia de ventana:

 

Hay un contador regresivo de 7 bits T[6:0] en la ventana de vigilancia de STM32F , que generará un reinicio de vigilancia cuando ocurra una de las dos situaciones siguientes:

Al alimentar al perro, si el valor del contador es mayor que un cierto valor de configuración W[6:0] , este valor de configuración se define en el registro WWDG_CFR .

②Cuando el valor del contador disminuye de 0x40 a 0x3F [ el bit T6 salta a 0] .

Si el perro guardián está habilitado y las interrupciones están habilitadas, se genera una interrupción de despertar temprano ( EWI) cuando el contador regresivo es igual a 0x40 , que se puede usar para alimentar al perro y evitar un reinicio de WWDG .

Tiempo de espera de vigilancia de ventana

¿Por qué un vigilante de ventanas?

        Para los perros guardianes generales, el programa puede actualizar el perro guardián en cualquier momento antes de reiniciarlo, pero existe un peligro oculto: es posible que el programa se ejecute fuera de servicio y luego regrese al lugar normal, o que esté fuera de servicio. el programa se está ejecutando. Actualice la operación de vigilancia. En este caso, no se puede detectar la vigilancia general;

       Si se utiliza un perro guardián de ventana, el programador puede establecer una ventana de tiempo para actualizar el perro guardián de acuerdo con el tiempo de ejecución normal del programa para garantizar que el perro guardián no se actualice por adelantado o retrasado, de modo que se pueda detectar que el programa no sigue las instrucciones La operación de ruta normal omite ciertas secciones del programa de manera anormal.

Precauciones:

①El valor de la ventana superior W[6:0] debe ser mayor que el valor de la ventana inferior 0x40. De lo contrario no habrá ventana.

②La fuente de reloj de vigilancia de ventana PCLK1 (reloj de bus APB1) se divide

Proceso de configuración del perro guardián de ventana

①Habilitar reloj de vigilancia:
RCC_APB1PeriphClockCmd();
② Establecer el coeficiente de división de frecuencia:
WWDG_SetPrescaler ();
③Establezca el valor de la ventana superior:
WWDG_SetWindowValue ();
④Habilite las interrupciones del despertar temprano y agrúpelas ( opcional ):
WWDG_EnableIT ();  
NVIC_Init ();
⑤Habilitar vigilancia:
WWDG_Enable ();
⑥Alimenta al perro :
WWDG_SetCounter ();
⑦ Función de servicio de interrupción de escritura:
WWDG_IRQHandler ();
Fragmentos de código importantes:
stm32f10x.wwdg_h

 etc. h

etc. c 

C Principal 

Después de descargar el programa, la luz verde parpadea. Se detiene después de presionar el botón KEY_0. La luz roja parpadea cuando se suelta el botón.

Una vez completado el proceso del botón, la luz verde continúa parpadeando.

 

Supongo que te gusta

Origin blog.csdn.net/weixin_47723114/article/details/127627151
Recomendado
Clasificación