10 votos

El uso de la ST-LINK Utilidad para configurar la RTC a la hora actual

Lo que yo estaba haciendo

Estoy usando un microcontrolador STM32 y para mi proyecto, necesito ser capaz de enviar datos a determinadas horas del día (es decir, a las 11am y 2pm). El microcontrolador necesita saber qué hora es antes de que pueda lograr esto. Por desgracia, sólo tengo una comunicación unidireccional, y por lo tanto no puede solicitar la hora actual de la red.

Por lo tanto quiero configurar la hora actual, directamente después de estoy hecho de programación. Yo sabía que soy capaz de escribir datos en la flash con el ST-LINK de la Utilidad de Interfaz de Línea de Comandos (ST-LINK_CLI) utilizando el siguiente comando:

ST-LINK_CLI.exe -w32 <Address> <data> -Rst

Escribí un simple script de prueba que escribe la marca de tiempo Unix para algunas direcciones no se utilizan actualmente en el código.

Estaba a punto de escribir una función para leer la marca de tiempo y se usa para establecer la RTC tiempo. Hasta que he leído lo siguiente en el ST-LINK de la Utilidad de Manual de Usuario:

-w32 soporta la escritura en la memoria Flash, la FISCALÍA, la SRAM y R/W registros.

Cuando el manual dice que soporta la escritura R/W registros, esto significa que puede acceder directamente a la RTC de los registros y del conjunto de ellos? Lo he intentado, pero me parece que no puede escribir en estos registros.

Yo prefiero usar este método si lo hace, como no iba a necesitar para escribir una función específica para manejarlo en el microcontrolador más. Esto significa que puede establecer el RTC tiempo de cualquier microcontrolador que tenemos actualmente en uso, en lugar de tener que actualizar su código.


Lo que yo quería hacer

Para establecer el RTC registros, he tratado de hacer los siguientes pasos, tal como se describe en el STM Manual de Referencia:

  • conjunto de DPB poco en PWR_CR registro
  • escribir 0xCA a RTC_WPR registro
  • escribir 0x53 a RTC_WPR registro
  • detener el RTC estableciendo el inicio de bits en el registro RTC_ISR
  • seleccione el 1Hz reloj por escrito a la RTC_PRER registro
  • la carga de la hora actual por escrito a la RTC_TR registro
  • la carga de la fecha actual por escrito a la RTC_DR registro
  • inicio de la RTC restableciendo el INIT poco en RTC_ISR registro

Para tener acceso a los registros, he utilizado las siguientes direcciones:

  • PWR_CR: 0x4000 7000
  • RTC_WPR: 0x4000 2824
  • RTC_ISR: 0x4000 280C
  • RTC_PRER: 0x4000 2810
  • RTC_TR: 0x4000 2800
  • RTC_DR: 0x4000 2804

Lo que salió mal

Yo no soy capaz de escribir a cualquiera de estos registros. Con el ST-LINK de la Utilidad, me sale el siguiente mensaje:

Error ocurrió durante la memoria de escribir!!!

El uso de la ST-LINK_CLI:

Escrito 0 x 00000100 en 0x40007000...Error!

La lectura de estos registros es ningún problema, pero no puedo escribir en ellos el uso de la ST-LINK de la Utilidad o de su Interfaz de Línea de Comandos.


La pregunta

¿Cómo puedo escribir en el R/W registros mediante la ST-LINK Utilidad?

¿Hay algún tipo de protección contra escritura para permitir la escritura a la RTC de registros, que he pasado por alto?

4voto

Andrew Walker Puntos 9038

Algunos registros son sólo legales específicas para una anchura de acceso (es decir, -w32 puede no ser la correcta), o puede que no vuelva a leer el escrito de valores que podría causar un problema con la verificación.

También podría ser la secuencia o el estado de las restricciones en el acceso de las cosas.

Una opción que se debe evitar la mayoría de los concebible asuntos relativos a las embarcaciones de un pequeño programa para hacer el trabajo que estaría vinculado a ejecutar en la memoria RAM. Puedes sustituir los datos en su binario después de averiguar el desplazamiento, subir la versión modificada, y ejecutarlo. O usted podría tener el programa, obtener valores a partir de una región de memoria RAM fuera del archivo de extensiones, que se puede establecer antes de correr. Con el más fino de control de la stlink también podría pasar los valores en los registros de la CPU, aunque es posible(?) necesidad de la alternativa de código abierto programa de línea de comandos en lugar de ST hacerlo (esta pequeña rutina en la memoria RAM es el método por cierto ¿que programa lleva a cabo la escritura de flash)

4voto

Spectre208 Puntos 83

Así, uno de los problemas era, como Chris Stratton señaló:

Algunos registros .. no puede leer los escritos de los valores que podría causar un problema con la verificación.

Esto significaba que el error en la comprobación, causando el error a la pantalla, incluso a pesar de que la operación de escritura que realmente sucedió.

A continuación, es la respuesta que obtengo cuando la lectura de la PWR_ISR registro, la configuración de INIT poco, luego de leer el registro de nuevo:

0x4000280C : 00000027

Escrito 0x00000080 en 0x4000280C...Error!

0x4000280C : 000000A7

La verificación de la ST-LINK Utilidad comprueba si el valor escrito a la dirección y de lectura de la dirección del partido. En este caso, la escritura de la operación fue un éxito, aunque los dos valores no coinciden, ya que la INICIALIZACIÓN de bit se establece ahora.

El otro problema era que yo no podía notar el efecto de la operación de escritura. Mientras está conectado al microcontrolador, se consigue mantenerse en el estado reset por la ST-LINK (conocido como "conectar en reset"). Tuve que usar el HOTPLUG opción de conexión, el cual se conecta al microcontrolador sin necesidad de detener o restablecer.

"Conectar con la función de reinicio" opción permite conectar con el destino antes de ejecutar cualquier instrucción. Esto es útil en muchos casos, como cuando el destino contiene un código que desactiva el JTAG/SWD pines.

El "HotPlug" opción permite conectarse a la meta sin parar o reiniciar. Esto es útil para la actualización de direcciones de la memoria RAM o la IP de registros mientras se está ejecutando la aplicación

El archivo de proceso por lotes totalmente trabaja como yo quería! El comando ahora tiene este aspecto:

ST-LINK_CLI.exe -c HOTPLUG -w32 <Address> <data> -w32 <Address> <data> ...

1voto

TheBonsai Puntos 3112

Creo que lo que pasa es que después de la escritura, una verificación de lectura se realiza. Si el mismo registro devuelve la hora actual en una lectura, a pesar de tener éxito en la actualización de la RTC, el depurador no se dará cuenta. Esto es menos probable para explicar un problema con la alimentación de registro (a menos que el depurador es el acceso a ese registro también bajo el capó). Compruebe el valor de la lectura de forma manual. Si hubo más problema significativo, esta lectura puede fallar demasiado. Además, trate de los otros registros en la lista.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X