Template para projetos usando microcontroladores da ST e o STM32CubeMX. Consiste numa estrutura especifica de pastas, um Makefile e alguns arquivos de configuração.
-
É necessário colocar o local de instalação na varíavel de ambiente
CUBE_PATH -
make
Linux:
sudo apt install makeWindows:
msys2> pacman -S make -
CMake
Linux:
sudo apt install cmakeWindows: Baixe o zip ou o instalador no Installing CMake
É necessário que a pasta
bindessa instalação esteja noPATH. No instalador do Windows, isso é feito automaticamente -
É necessário que a pasta
bindessa instalação esteja noPATH -
uncrustify
Linux:
sudo apt install uncrustifyWindows: Baixe o .zip no SourceForge. Adicione o local do executável na variável de ambiente
PATH. -
STM32 Cube Programmer ou J-Link
É necessário que o executável também esteja no
PATH
Primeiro é necessário criar um projeto do Cube na pasta cube/ com o nome desejado,
que deve ter as seguintes opções de projeto:
Project:
- Application Structure: Basic
- Do not generate the main()
- Toolchain / IDE: Makefile
Code Generator:
- STM32Cube Firmware Library Package: Copy all used libraries into the project folder
- Generated files:
- Generate peripheral initialization as a pair of .c/.h files per peripheral
- Delete previously generated files when not re-generated
Um arquivo de exemplo se encontra em cube/stm32_project_template.ioc com todas as configurações necessárias.
Para projetos existentes, basta mover o arquivo .ioc para a pasta cube/.
O arquivo CMakeLists.txt deve ser editado de acordo com o projeto.
Para isso é necessário mudar o nome do projeto, o qual deve ter o mesmo do arquivo do Cube (por exemplo, stm32_project_template.ioc), porém sem a extensão .ioc.
# Cube file name without .ioc extension
project(stm32_project_template C ASM)Os argumentos
CeASMestão relacionados ao tipo de linguagem que o projeto utiliza (C e Assembly).
Também é necessário alterar as seguintes configurações:
# Device Configuration
set(DEVICE_CORTEX F3)
set(DEVICE_FAMILY STM32F3xx)
set(DEVICE_TYPE STM32F303xx)
set(DEVICE_DEF STM32F303xE)
set(DEVICE STM32F303RE)Basta pegar o nome completo do microcontrolador e colocar nessas configurações, seguindo o padrão, fazendo as substituições que forem precisas por x.
Em caso de dúvida, veja o nome do arquivo .ld gerado na pasta cube, ele contém o nome completo do microcontrolador.
Com as configurações realizadas corretamente, você deve se direcionar para a pasta build. Estando lá, basta rodar o seguinte comando:
cmake ..Esse comando é de extrema importância, pois nenhum dos outros comandos de compilação funcionarão sem ele ter sido rodado antes.
Todos os comandos que envolvam
makedevem ser rodados dentro da pastabuild, após o comandocmake ..ter sido feito.
Basicamente, ele configura o ambiente do CMake e gera os arquivos do cube, caso a pasta cube esteja vazia. Todavia, caso você queira apenas gerar os arquivos do cube, também é possível rodar o comando
make cubePara compilar os arquivos, após ter rodado cmake .., ainda dentro da pasta build, rode:
makeO comando make apenas compilará o código principal, não compilando nenhum teste. Para compilar um teste, cujo arquivo se chama nome_do_teste.c, rode:
make nome_do_testeSe acontecer algum erro, pode ser necessário limpar os arquivos já compilados. Para isso, dentro da pasta build, faça:
make cleanIsso apaga todos os arquivos de compilação gerados, exceto aqueles que vêm das bibliotecas da ST geradas pelo Cube. Isso é feito para agilizar um novo build, já que raramente será necessário recompilar esses arquivos. Todavia, caso seja necessário, é possível limpá-los com o comando:
make clean_cubeAlém disso, caso seja necessário limpar todos os arquivos de compilação, você pode rodar o comando:
make clean_allCaso você queira apagar os arquivos compilados e recompilá-los, é possível fazer isso com um comando só, rodando, dentro da pasta build, o comando:
make rebuildE, caso você queira apagar e recompilar todos os arquivos compilados, incluindo os do cube, rode o comando:
make rebuild_allPara gravar os arquivos na placa, rode
make flashOu, caso use um gravador com J-Link:
make jflashAlém disso, para gravar um teste, cujo nome do arquivo é nome_do_teste.c, deve-se rodar:
make flash_nome_do_testeOu, caso use um gravador com J-Link:
make jflash_nome_do_testePara garantir que o código está formatado, utilize o atalho CTRL+S para salvar e formatar o arquivo em que se está mexendo ou, para formatar todos os arquivos do repositório de uma vez, rode:
make formatCrie um diretório chamado lib e adicione o submódulo nele.
Exemplo:
mkdir lib
git submodule add --name STMSensors [email protected]:ThundeRatz/STMSensors.git lib/STMSensorsAo clonar um repositório que já tem submódulos, é necessário clonar os repositórios desse submódulo. Isso pode ser feito de duas formas, clonando junto com o repositório do projeto ou depois de já ter clonado.
Exemplo:
Para se clonar junto, deve-se fazer:
git clone --recurse-submodules [email protected]:ThundeRatz/STM32ProjectTemplate.gitPara se clonar depois de já ter clonado o repositório do projeto:
git submodule update --initO diretório test contém arquivos para testes de partes específicas do projeto, separando isso do código do projeto em si. Esses arquivos devem ser implementados de acordo com as necessidades dos desenvolvedores.
Para compilar e gravar um teste, siga as instruções na seção de compilação e na seção para gravação.
Cada arquivo de teste no diretório de testes funciona de forma independente, ou seja, cada um deve ter uma função main(), sendo cada um compilado, gravado e executado separadamente.
Em breve