Il y a certaines choses que je ne comprends pas sur le processus de démarrage du microcontrôleur STM32F4.
Ma compréhension est la suivante:
- Le démarrage ARM Cortex-M4 attend la valeur d'initialisation du pointeur de pile et les vecteurs d'interruption activés
0x00000000 + SCB->VTOR
, tandis qu'ilSCB->VTOR
est effacé lors de la réinitialisation. - Il n'y a pas de mémoire à cet endroit. La mémoire flash commence à
0x08000000
, SRAM à0x20000000
. - Afin de rendre possible le démarrage, le µC peut mapper la plage de mémoire flash ou SRAM sur
0x00000000
. La plage de mémoire à mapper est définie par l'état des broches de démarrage.
Mes questions:
Pourquoi le manuel de référence STM32F4 dit à la page 69 que
Lorsque le périphérique démarre à partir de SRAM, dans le code d'initialisation de l'application, vous devez déplacer la table vectorielle dans SRAM à l'aide de la table d'exception NVIC et du registre de décalage.
? À mon avis, cela n'est pas nécessaire, car toute la région de la mémoire est de toute façon aliasée. Fait intéressant, cela ne semble pas être nécessaire lorsque la région du flash est remappée à l'
0x0
espace.La seule utilisation pour le démarrage à partir de SRAM, je pense que c'est de réduire les cycles d'écriture sur le flash pendant le développement. Avant de libérer le µC de la réinitialisation, vous écrivez le programme dans SRAM à l'aide du débogueur, puis démarrez à partir de là. Cependant, comme vous disposez d'un accès au débogueur, il n'y aura de toute façon aucune restriction sur le démarrage. Alors pourquoi avoir cette fonctionnalité?
Le fait que la position de démarrage soit dérivée des broches indique (au moins à mon avis) que cette fonctionnalité doit être utilisée non pas pendant le développement mais en fonctionnement final. Et en fonctionnement final, SRAM est clair au démarrage. Par conséquent, il n'est pas logique de démarrer à partir de SRAM.