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?