Memória do Microcontrolador STM32F103C8T6

Confira nesse artigo o Mapa de Memória do Microcontrolador STM32F103C8T6. Confira os detalhes da FLASH e SRAM desse mcu.

Esse é o décimo artigo da série escrita pelo engenheiro Ismael Lopes da Silva, exclusivamente para o site “www.embarcados.com.br”. Nessa série focarei no Microcontrolador da STMicroelectronics, o MCU STM32F103C8T6, que é um ARM Cortex-M3. Os pré-requisitos para uma boa compreensão dos artigos é ter o domínio da Linguagem C Embedded e conceitos de eletrônica.

Mapa de Memória do Processador ARM Cortex-M3

O processador ARM Cortex-M3 possui um mapa de memória padrão, que fornece até 4 GB de memória endereçável, que é o máximo que um barramento de 32 bits pode endereçar, conforme ilustrado na figura 1:

Memória do Microcontrolador STM32F103C8T6
Figura 1 – Mapa de memória ARM Cortex-M3

Nesse artigo, você observará que a memória de programa do nosso MCU STM32F103C8T6, é uma parte da memória de código (Code), que é a primeira seção do mapa, conforme ilustrado na parte inferior da figura 1. Essa faixa de código, de tamanho máximo de 0.5GB, é padrão para atender os mais variados modelos de microcontroladores, e seus recursos e tamanhos.

Mapa de Memória do Microcontrolador STM32F103C8T6

Esse artigo foi baseado na documentação oficial da STMicroelectronics, desse link:

Memória do Microcontrolador STM32F103C8T6
Figura 2 – Mapa de memória do MCU STM32F103C8T6

Memória FLASH interna do Microcontrolador STM32F103C8T6

O MCU STM32F103C8T6, é um dispositivo com média densidade de memória FLASH, mais especificadamente 64 kbytes. A memória FLASH é usada para armazenar o código da aplicação, dados somente de leitura do programa e para armazenar a tabela de vetores (vector table). Cada deslocamento do ponteiro são quatro bytes (4 x 8 Bytes = 32 bits), portanto, cada posição endereçável da memória FLASH contém 8 Bytes de comprimento.

  • Tamanho: 64 kbytes (65.536)
  • Endereço inicial: 0x0800.0000
  • Endereço final: 0x0800.FFFF
  • Tipo: Não volátil
Memória do Microcontrolador STM32F103C8T6
Figura 3 – Mapa da memória FLASH com média densidade 64k/128 kBytes

Segue o mapa das páginas da memória FLASH principal para o MCU STM32F103C8T6, de média densidade, com 64 kBytes.

Memória do Microcontrolador STM32F103C8T6
Figura4 – Organização da memória FLASH do STM32F103C8T6 em páginas

Memória SRAM interna do Microcontrolador STM32F103C8T6

A SRAM é usada para armazenar dados globais e variáveis estáticas. Também usada para os propósitos de Stack e Heap (alocação dinâmica).

  • Tamanho: 20 kbytes (20.480)
  • Endereço inicial: 0x2000.0000
  • Endereço final: 0x2000.4FFF
  • Tipo: Volátil

Observação: Código também pode ser executado na memória SRAM.

Memória do Sistema (System memory) do Microcontrolador STM32F103C8T6

  • Função: O Bootloader é armazenado nessa memória
  • Tamanho: 2 kBytes (2.048)
  • Endereço inicial: 0x1FFF.F000
  • Endereço final: 0x1FFF.F7FF
  • Tipo: Somente de leitura

Por padrão, o MCU não executa nenhum código de programa na memória do Sistema, mas, pode ser configurado para fazer o Boot ou executar o Bootloader. Ver figura 4.

Memória Options Bytes do Microcontrolador STM32F103C8T6

Essa memória são bytes de opção, configuráveis pelo usuário, que podem controlar recursos do MCU. Essas opções fornecem aos usuários uma maneira conveniente de alterar as configurações de seu dispositivo. Ver figura 4.

  • Tamanho: 16 Bytes
  • Endereço inicial: 0x1FFF.F800
  • Endereço final: 0x1FFF.F80F

Código e Dados de Programa

O que exatamente é um programa? Um programa é uma coleção de código e dados. Um código de programa opera os dados. Onde armazenamos o código? O código, que são as instruções, são armazenados na memória de programa, que em nosso caso, é a memória FLASH, interna do microcontrolador. É muito importante entender os diferentes tipos de dados do programa.

Onde armazenamos os dados do programa? Os dados podem ser armazenados na memória FLASH ou na memória SRAM, dependendo da natureza dos dados. Se for um dado constante, não faz sentido armazená-lo na memória SRAM.

Essa é a razão pela qual podemos armazenar dados constante na memória FLASH. A memória FLASH pode ser considerada como uma memória somente de leitura (ROM). Podemos modificar o conteúdo da memória FLASH, mas, não em tempo de execução. Existem alguns procedimentos para alterar o conteúdo da memória FLASH.

É por isso que podemos tratar a FLASH como memória somente de leitura (ROM) e a SRAM como memória de leitura e escrita (RAM). E quanto às variáveis do programa? As variáveis do programa são chamadas de dados de leitura e escrita, porque o valor das variáveis pode ser alterado em qualquer ponto durante a execução do programa.

Analisar as Memórias FLASH e SRAM no STM32CubeIDE

Vamos reutilizar o programa do oitavo artigo, somente para analisarmos as memórias FLASH e SRAM dessa aplicação. Usando o STM32CubeIDE, no mesmo workspace que criamos os artigos anteriores, então, na janela “Projetc Explorer”, clique com o botão direito do mouse sobre o projeto “04RegPC_LR_SP”, depois dê um “Clean Project” e “Build Project”.

Disponibilize a visualização da janela “Build Analyzer”, conforme ilustrado na figura 5. Note que a aba “Memory Regions” está selecionada e podemos ver os limites (tamanhos) da memória FLASH (ROM) e SRAM (RAM).

5 1
Figura 5 – Janela Build Analyzer

Agora selecione a aba “Memory Details”. Podemos ver na figura 6 os detalhes das seções e seus endereços correspondentes para cada tipo de memória (ROM e RAM).

6
Figura 6 – Detalhes da memória FLASH e SRAM

Outros artigos da série

<< Usando a GNU Compiler Collection (GCC) para ARM Cortex-M3Usando uma calculadora para operações Bit a Bit (Bitwise) >>

Nasci em 1969 na cidade de Campinas, São Paulo. Sou apaixonado por eletrônica, programação e outros assuntos relacionados. Sou técnico em eletrônica e engenheiro eletricista com ênfase em eletrônica. Um dos meus hobby é estudar eletrônica, LTSpice, MCU (Arduino, STM32 e outros). Tento acompanhar a evolução tecnológica, que é um desafio. Com o EMBARCADOS espero continuar aprendendo e também compartilharei informações.
ismael.lopes.br@hotmail.com
https://github.com/IsmaelLopesSilva

Notificações
Notificar
guest
2 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Fabio Luiz
Fabio Luiz
18/01/2021 07:55

Show de artigo, obrigado por compartilhar seu conhecimento!

WEBINAR

Imagens de Ultrassom: Princípios e Aplicações

DATA: 26/10 ÀS 19:30 H