Interaction avec la mémoire d’une puce STM32 en C

Je souhaite interagir avec la mémoire d’une puce STM32 , STM32L476 , tout d’abord pour lire et stocker sa signature électronique (MCU_ID), puis pour écrire des données dans sa mémoire . J’utilise un socket STM32QFP64 lié à un JTAG ST-LINK .
Je suis assez bon en C mais je commence vraiment la programmation intégrée. J’ai donc choisi Atollic Studio IDE car il semblait assez complet et était basé sur Eclipse que j’avais déjà utilisé auparavant.

Mon problème est que je ne trouve pas de documentation répertoriant les fonctions, les variables, etc. que je pourrais utiliser pour interagir avec la puce. J’ai parcouru presque tous les PDF donnés sur le site ST, j’ai lu le GitHub de ST, mais comme je suis débutant, j’aurais pu rater ces informations car je ne savais pas à quoi ressemblait ce que je cherchais.

Le code ci-dessous est irrévocable et complètement imaginé , mais il pourrait aider à comprendre ce que j’essaye de faire, ce que je décris en quelque sorte comme ceci:

#define MEMORY_ADRESS_MCU_ID FFFFF // A memory adress ( I should be able to find it in STM32L476 documentation) #define MEMORY_ADRESS_TO_WRITE FFFF // Same unsigned extractMCUID() { return READ_IN_MEMORY(MEMORY_ADRESS_MCU_ID); // Returns the ID stored in a particular memory adress } void writeData(char* d) { WRITE_IN_MEMORY(MEMORY_ADRESS_TO_WRITE, d); // Writes data in specified memory adress } 

Ainsi, dans ce cas et plus généralement encore :

1) Où devrais-je chercher une telle documentation?

2) Ces fonctions et variables changent-elles en fonction de la puce STM32 à laquelle je fais face?

3) Où aurais-je pu trouver les réponses aux questions 1) et 2) si ce n’était pas sur StackExchange?

La STM publie plusieurs types de documents pour chaque MCU et il m’est difficile de deviner quel document contiendra l’information recherchée. Je cherche donc dans les documents des mots clés associés jusqu’à ce que je me concentre sur les informations. Les deux documents les plus importants sont la fiche technique et le manuel de référence, je commence donc toujours par eux.

Dans ce cas, j’ai commencé à rechercher “MCU_ID” dans la fiche technique et je n’ai rien trouvé. J’ai donc recherché l’ID “générique” et l’ai associé au mot clé plus spécifique “unique”. J’ai cherché dans la fiche technique le mot “unique” mais je n’ai pas trouvé les informations d’adresse du registre. J’ai alors cherché dans le Manuel de référence “ID unique” et trouvé l’adresse de base du registre à la section 49.1 à la page 1808.

Oui, des détails tels que celui-ci peuvent changer d’un MCU STM à un autre, vous devez donc vous assurer que vous utilisez la feuille de données et le manuel de référence appropriés. Cependant, STM fournit une couche d’abstraction matérielle (HAL) appelée STM32Cube, qui élimine des détails spécifiques à la MCU comme celui-ci et vous permet d’appeler des fonctions plus génériques indépendantes de la MCU.

Edit: Il est possible que je vous ai indiqué le mauvais registre d’ID. Clifford souligne dans les commentaires qu’il existe un registre d’identifiant de périphérique MCU à l’adresse 0xE0042000. Ce registre d’ID de périphérique MCU est différent du registre d’ID de périphérique unique et est décrit à la section 48.6.1 à la page 1782 du Manuel de référence.

Vous voudrez peut-être jeter un oeil ici: http://www.openstm32.org

Cette partie peut vous donner un indice: char in_ccram_buffer[1024] __atsortingbute__((section("ccmram")));

J’ai quelque chose de similaire dans mon code AVR:

  const uint16_t tempTable[42] __atsortingbute__((section(".eeprom"))) = ... 

travaille un charme.