STM32 usa IAP para actualizar programas de usuario

  
 

IAP, el nombre completo es "Programación en la aplicación", el chino se interpreta como "Programación en el programa". IAP es una técnica para actualizar los programas internos de un microcontrolador que ejecuta un programa a través de la interfaz externa del microcontrolador (como USART, IIC, CAN, USB, Ethernet o incluso un canal de RF inalámbrico) (tenga en cuenta que esto es completamente Diferente a la tecnología ICP o ISP). La tecnología ICP (programación en circuito) consiste en programar la MCU a través del emulador en circuito, mientras que la tecnología ISP es la tecnología de programación guiada por el programa de cargador de arranque integrado de la MCU. Ya sea que se trate de tecnología ICP o ISP, es necesario realizar operaciones mecánicas, como conectar la línea de descarga y configurar la tapa del puente. Si la placa de circuito del producto ha sido sellada en la capa exterior, es difícil actualizar el programa. Si el producto se instala en un lugar difícil, como un espacio estrecho, es un desastre. Sin embargo, si se introduce la tecnología IAP, la situación embarazosa mencionada anteriormente se puede evitar completamente, e incluso si se utiliza un esquema de transmisión de datos inalámbrica o de larga distancia, se puede realizar la programación remota y la programación inalámbrica. Esto definitivamente no es posible con la tecnología ICP o ISP. El primer requisito previo para que un microcontrolador sea compatible con la tecnología IAP es que debe ser un microcontrolador basado en un flash reprogramable. El microcontrolador STM32 viene con memoria flash programable incorporada, y el STM32 tiene una rica interfaz de comunicación periférica en cantidad y variedad, por lo que es totalmente factible implementar la tecnología IAP en el STM32.

El núcleo de la implementación de la tecnología IAP es un programa IAP preprogramado dentro del microcontrolador. Este programa es el principal responsable de la sincronización de handshaking con el software de la computadora host externa, y luego recibirá los datos del programa de la computadora host a través de la interfaz de comunicación periférica y los escribirá en el área de flash especificada en el microcontrolador, y luego saltará para ejecutar la nueva escritura. El programa finalmente llegó a la meta de la actualización del programa.

Antes de implementar el programa IAP en el microcontrolador STM32, primero debemos revisar la estructura interna de organización flash de STM32 y su proceso de arranque. La dirección flash interna del STM32 comienza en 0x8000000. Normalmente, el archivo de programa se escribe desde esta dirección. Además, STM32 es un microcontrolador basado en el núcleo Cortex-M3. Responde internamente a la interrupción a través de una "tabla de vectores de interrupción". Después de que el programa se inicie, primero se reiniciará el vector de interrupción de la "tabla de vectores de interrupción". El programa está terminado. La dirección de inicio de esta tabla de vectores de interrupción es 0x8000004. Cuando se produce la interrupción, el mecanismo de hardware interno de STM32 ubicará automáticamente el puntero de la PC a la "tabla de vectores de interrupción" y tomará la fuente correspondiente de acuerdo con la fuente de interrupción. El vector de interrupción ejecuta la rutina de servicio de interrupción. Finalmente, necesita conocer el punto clave. Puede modificar la dirección de inicio del archivo de programa que se escribirá en la memoria flash modificando el script de enlace del proyecto STM32.

El esquema IAP se implementa en el microcontrolador STM32. Además del puerto serial convencional que recibe datos y escritura de datos flash y otras operaciones convencionales, también es necesario prestar atención al proceso de inicio y al modo de respuesta de interrupción del STM32. La figura 1 muestra el flujo de funcionamiento normal de STM32.
Figura 1

La interpretación de la Figura 1 es la siguiente:

1. Después del restablecimiento de STM32, la dirección del vector de interrupción de restablecimiento se buscará en la dirección 0x8000004, y se ejecutará la rutina de servicio de interrupción de restablecimiento. , como se muestra con el número de referencia (1) en la FIG.

2. El resultado final de la ejecución de la rutina del servicio de interrupción de reinicio es saltar a la función principal del programa C, como se muestra en la etiqueta (2) en la Figura 1, y la función principal debe ser un bucle infinito, que nunca es La función devuelta.

3. Durante la ejecución de la función principal, se produce una solicitud de interrupción. En este momento, el mecanismo de hardware de STM32 forzará el puntero de la PC a la tabla de vectores de interrupción, como se muestra en la etiqueta (3) en la Figura 1. .

4. De acuerdo con la fuente de interrupción, ingrese el programa de servicio de interrupción correspondiente, como se muestra en la etiqueta (5) en la Figura 1.

5. Después de que se ejecuta el programa de servicio de interrupción, el programa vuelve a la función principal nuevamente, como lo muestra la etiqueta (6) en la Figura 1. Si el programa IAP se agrega al STM32, la situación será como se muestra en la Figura 2.
Figura 2

La interpretación de la Figura 2 es la siguiente:

1, después del restablecimiento de STM32, la dirección del vector de interrupción de restablecimiento se obtiene de la dirección 0x8000004 y se ejecuta la rutina de servicio de interrupción de restablecimiento. Luego, pase a la función principal del programa IAP, como se muestra en las etiquetas (1) y (2) en la Figura 2. Este proceso es consistente con la parte correspondiente de la Figura 1.

2, después de completar el proceso IAP (el nuevo programa se escribe dentro de STM32, el cuadrado sombreado gris en la Figura 2, la dirección comienza en 0x8000004 + N + M) y salta a la nueva escritura. Ingrese a la tabla de vector de reinicio del programa, tome la dirección del vector de interrupción de reinicio del nuevo programa y salte para ejecutar la rutina de reinicio de servicio de interrupción del nuevo programa, y ​​luego pase a la función principal del nuevo programa. El proceso es como se muestra en la etiqueta (3) de la Figura 2. Mostrar La función principal del nuevo programa también debe tener la propiedad de no volver nunca. Al mismo tiempo, se debe tener en cuenta que dos tablas de vectores de interrupción aparecen en diferentes ubicaciones en el espacio de la memoria interna del STM32.

3. En el proceso de ejecución de la función principal del nuevo programa, se enviará una solicitud de interrupción, y el puntero del PC seguirá girando hacia la tabla de vectores de interrupción en la dirección 0x8000004, en lugar de la tabla de vectores de interrupción del nuevo programa, como se muestra en la Figura 2. El símbolo (5) se muestra en el centro. Tenga en cuenta que esto está determinado por el mecanismo de hardware del STM32.

4. De acuerdo con la fuente de interrupción, salte al servicio de interrupción correspondiente, como se muestra en la etiqueta (6) en la Figura 2. Tenga en cuenta que este es el salto a la rutina de servicio de interrupción del nuevo programa.

5. Después de ejecutar el servicio de interrupción, vuelva a la función principal. Esto se muestra mediante el número de referencia (8) en la Fig. 2.

A partir del análisis de los dos procesos anteriores, se puede saber que el programa que se va a escribir utilizando el proceso IAP debe satisfacer dos requisitos:

1. El nuevo programa debe ser del programa IAP. La dirección con el desplazamiento x comienza;

2, la tabla de vectores de interrupción del nuevo programa debe moverse en consecuencia, y el desplazamiento del movimiento es x;

y la posición de inicio del programa está establecida. El método es (entorno de desarrollo integrado keil uvision4) en la columna "Opción" de la interfaz "Opción para destino …." en la columna "Página", "IROM"; "Inicio" se cambia al lugar donde desea que comience el programa. Como se muestra en la Figura 3, la posición de inicio del programa se establece en 0x8002000.
Figure 3

El método para mover la tabla de vectores de interrupción es agregar una función al programa:
void NVIC_SetVectorTable (u32 NVIC_VectTab, u32 Offset);

donde el parámetro NVIC_VectTab es el comienzo de la tabla de vectores de interrupción La posición, y el parámetro Desviación es el desplazamiento de la dirección. Si la tabla de vectores de interrupción se mueve a 0x8002000, la función debe llamarse de la siguiente manera:
NVID_SetVectorTable (0x8000000, 0x2000);

También es necesario recordar al lector Sí, esta función solo modifica las variables de estructura utilizadas para almacenar el vector de interrupción en el programa STM32 sin cambiar sustancialmente la ubicación física de la tabla de vectores de interrupción en la memoria flash. Para obtener más información, estudie el prototipo del programa.

Con los preparativos anteriores, puede comenzar a diseñar una solución IAP de la siguiente manera:

1, después de reiniciar STM32, use el estado de un botón para sincronizar, cuando se presiona el botón, indica que se realizará. Proceso IAP;

2, proceso IAP, envíe el archivo de programa que se actualizará al dispositivo STM32 USART1 a través del software del equipo host, STM32 recibe los datos y luego escribe los datos recibidos desde la dirección 0x8002000; Br>

3, STM32 usa el temporizador para determinar si los datos se han recibido completamente, y el proceso IAP finaliza después de la recepción completa.

4. Después de restablecer nuevamente, la dirección de salto 0x8002004 comienza a ejecutar el programa recién escrito; Br>

Los últimos puntos a tener en cuenta:

1, el archivo de programa escrito por IAP es preferiblemente un archivo de formato .bin, pero no un archivo de formato .hex;

2, envíe los archivos de programa a STM32 lo más lento posible, ya que la velocidad de escritura de STM32 a FLASH no puede mantenerse al día con la velocidad de comunicación de la interfaz periférica;

3, se recomienda diseñar un diseño entre STM32 y la computadora host Conjunto de mecanismo de intercambio y mecanismo de gestión de errores, que puede mejorar en gran medida la tasa de éxito de IAP;

Copyright © Conocimiento de Windows All Rights Reserved