STM32 + CMSIS + STM32CubeIDE

Aqui, mostrarei como criar um projeto mínimo no CMSIS usando o IDE "nativo" para microcontroladores STM - STM32CubeIDE.

Talvez o STM32CubeIDE possua várias desvantagens, mas, na minha opinião, ele possui várias vantagens - como proprietárias e gratuitas, pelas quais, pelo menos, você deve prestar atenção nesse ambiente de desenvolvimento se não tiver feito isso antes.



O microcontrolador STM32F072 com o núcleo ARM Cortex-M0 foi escolhido como objeto do firmware para o STM32F103 mais familiar no ARM Cortex-M3, ajustado para o núcleo, o processo é idêntico.

Todos os recursos necessários podem ser baixados do st.com e aqui está o que você precisa:

  • Próprio IDE , uso a versão do Windows, mas também estão disponíveis versões para Mac e Linux

  • Biblioteca CMSIS para ARM Cortex-M0 , está localizada no arquivo STM32CubeFx, dividido por versão do kernel. O arquivo em si, além do CMSIS, contém muitos outros recursos, desde exemplos de trabalho com periféricos a drivers USB; na verdade, esse arquivo é usado se você criar um projeto usando o STM32Cube

  • A folha de dados e o manual de referência não machucam


Após a instalação, iniciando e selecionando a pasta Área de Trabalho, você pode começar a criar o projeto. Atualmente, o STM32CubeIDE versão 1.1.0, portanto, o local das várias configurações deve se basear nisso.

Criando um novo projeto - Arquivo / Novo / STM32Project . Depois de pensar um pouco, a janela para selecionar o microcontrolador aparece; no meu caso, é STM32F072RB no pacote LQFP64, seleciono a linha desejada e clique em Avançar. Também é proposto escolher o nome do projeto, local, linguagem de programação C / C ++, arquivo executável / biblioteca estática e se o projeto será gerado usando o CubeMX ou com um bigode. A geração do cubo, neste caso, não é necessária; portanto, o tipo de projeto Vazio é o acabamento.




À esquerda, na janela Project Explorer , a árvore do projeto apareceu, embora não esteja completamente vazia , conforme solicitado. Em princípio, se a estrutura de pastas gerada combina com você, você pode adicionar arquivos da biblioteca CMSIS e continuar trabalhando, mas aqui mostrarei como você pode harmonizar a estrutura do projeto com meu senso de beleza, para que tudo, exceto o script do vinculador, seja excluído. arquivo com a extensão .ld - será útil.



Todas as manipulações com pastas e arquivos podem ser realizadas no Explorer e dentro do IDE, clicando com o botão direito do mouse no nome do projeto, por exemplo: botão direito -> novo -> Pasta . Se a estrutura do projeto foi alterada fora do IDE, basta atualizar o projeto: botão direito -> Atualizar .

Minha versão da estrutura do projeto é assim:

  • Inicialização - o script do vinculador será armazenado aqui, o restante do projeto gerado, bem como o arquivo de inicialização retirado do CMSIS
  • CMSIS \ src e CMSIS \ inc - aqui serão os arquivos de origem, com a extensão .c na pasta scr e os arquivos de cabeçalho com a extensão .h na pasta inc , respectivamente, relacionados à biblioteca CMSIS
  • Core \ src e Core \ inc - o projeto em si será localizado aqui, para iniciantes, coloque main.ce main.h


Agora você precisa transferir os arquivos da biblioteca CMSIS para o projeto. A biblioteca consiste em arquivos principais e arquivos periféricos. Os arquivos do kernel começam com core_ ou cmsis_ , são comuns a todos os microcontroladores que usam esse kernel. Os arquivos periféricos contêm o nome do microcontrolador stm32 no nome e são específicos para um fabricante específico, neste caso, a empresa STM.

No formulário descompactado, o arquivo contém a pasta STM32Cube_FW_F0_V1.11.0 , todos os caminhos são relativos a esta pasta. Total, você precisa copiar:

No CMSIS \ inc :

  • Drivers \ CMSIS \ Include \ cmsis_compiler.h
  • Drivers \ CMSIS \ Include \ cmsis_gcc.h
  • Drivers \ CMSIS \ Include \ cmsis_version.h
  • Drivers \ CMSIS \ Include \ core_cm0.h
  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Include \ stmf0xx.h
  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Include \ stm32f072xb.h
  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Include \ system_stm32f0xx.h

No CMSIS \ src :

  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Source \ Templates \ system_stm32f0xx.c

Na inicialização:

  • Drivers \ CMSIS \ Device \ ST \ STM32F0xx \ Source \ Templates \ gcc \ startup_stm32f072xb.s

É assim que o projeto fica em seu formulário preenchido.


Como algumas manipulações com as pastas do projeto foram realizadas, é necessário exibi-lo nas configurações.

O botão direito do nome do projeto -> Propriedades -> Compilação C / C ++ -> Configurações -> Configurações da ferramenta -> Vinculador MCU GCC -> Geral - aqui você precisa especificar o novo local do script vinculador usando o botão Procurar ...


Você também deve especificar o caminho para os arquivos do projeto

Propriedades -> C / C ++ Geral -> Inclui
Propriedades -> C / C ++ Geral -> Local da Origem

Em Inclui caminhos para as pastas inc , e no Local de origem , seria lógico para pastas src , mas se você fizer isso, essas pastas serão adicionadas à árvore do projeto separadamente. Para não desorganizar visualmente a árvore, no Local de Origem, você pode especificar as pastas raiz Núcleo , CMSIS e Inicialização .



Para que o projeto seja compilado, você precisa descomentar a linha com o nome do microcontrolador no arquivo stm32f0xx.h e, é claro, adicionar a função principal em main.c.



Na verdade tudo. Uma compilação sem erros e imediatamente desapareceu em algum lugar com um kilobytes de memória RAM e meio e é RAM. Imediatamente, a pilha e o heap são lembrados; eles não foram mencionados em nenhum lugar no processo de criação do projeto. O tamanho da pilha e da pilha é indicado no arquivo de script do vinculador, aquele com a extensão .ld, eles podem e devem ser alterados de acordo com os requisitos do projeto. Esses valores estão localizados no início do arquivo no formato de rótulos _Min_Heap_Size / _Min_Stack_Size com o tamanho em hexadecimal.



Como exemplo, darei um pequeno projeto de um LED tradicional piscando.

O LED pisca na placa de depuração STM32F072B-DISCO, o relógio é realizado a partir de um gerador HSI48 interno com uma frequência de 48 MHz e o temporizador SysTick é usado como fonte de atraso, gerando interrupções com um período de 1 ms, pelo qual o tempo exato de atraso é contado. O LED está conectado ao pino 6 da porta C, configurado para saída push-pull.

Espero que esta informação seja útil para alguém, porque Ao mesmo tempo, apesar da abundância de materiais de programação do STM32, tive que vasculhar muitos manuais para perceber coisas que agora parecem óbvias.

Source: https://habr.com/ru/post/pt481478/


All Articles