Recentemente, cada vez mais frequentemente me deparo com holivares sobre o tópico Cube MX e HAL, conforme aplicado aos controladores STM32.
Por um lado, há advogados que gostam da facilidade de configuração e da legibilidade do código.
Por outro lado, os aderentes escrevem tudo com as mãos, para as quais a velocidade do trabalho e o uso cuidadoso dos recursos são importantes.
Para pontuar todo o i - tente escrever "Hello world" com os três caminhos mais usados, CMSIS, LL, HAL. Vamos estimar os custos (recursos do controlador, o volume do arquivo executável e, é claro, o tempo do desenvolvedor).
O artigo consistirá em várias partes:
Início rápido do STM32. Parte 1 de software, materiais, Cube MX.
Início rápido do STM32. Parte 2 Olá, mundo no HAL, configurando a depuração no Atollic TrueSTUDIO
Início rápido do STM32. Parte 3 Olá Mundo na LL
Início rápido do STM32. Parte 4 Olá, mundo, no CMSIS
Início rápido do STM32. Parte 5 Resumo, Comparação de HAL, LL, CMSIS.
Primeiro, vamos decidir o que realmente iremos programar, ou seja, encontrar o hardware certo.
Uma opção ideal seria uma placa de orçamento no microcontrolador STM32F103C8T6.

Essa taxa pode ser encontrada em todo o site conhecido a um preço de 100 rublos russos.
Busca por palavras-chave: STM32F103C8T6 BRAÇO STM32 Mínimo
https://en.aliexpress.com/af/STM32F103C8T6-ARM-STM32-Minimum.html?SearchText=STM32F103C8T6+ARM+STM32+MinimumPara preencher o firmware e jogar com a depuração, também é necessário um programador
Para iniciantes e para uso futuro, o clone chinês do programador ST-LINK V2 é ideal.
Você pode comprar no mesmo site ao preço de 120 rublos russos.

Busca por palavras-chave ST LINK Stlink ST 252dLink V2 Mini STM8 STM32:
https://en.aliexpress.com/af/ST-LINK-Stlink-ST%25252dLink-V2-Mini-STM8-STM32.html?SearchText=ST+LINK+Stlink+ST%252dLink+V2+Mini+STM8+ STM32Para desenvolver software para o STM32, você pode usar vários IDEs.
Os mais populares são IAR, Keil, Coocox (Eclipse).
Seguiremos o caminho que recentemente foi totalmente gratuito e totalmente fornecido pela própria ST.
Usaremos o Atollic TrueSTUDIO para STM32 ou nas pessoas comuns Tolik.
Quais são as vantagens deste software: absolutamente grátis, não há limite para o tamanho do código, existe um bom depurador, fácil instalação e configuração.
Contras: nenhuma conclusão automática de código.
Versões para Windows e Linux estão disponíveis.
Faça o download aqui
https://atollic.com/resources/download/Não deve haver nenhum problema com a instalação deste software, tudo é intuitivamente claro, escolhemos onde colocá-lo e clicamos em "próximo" o tempo todo.
Após a instalação, você não pode executá-lo, porque, além do próprio IDE, você precisa de outra coisa.
Se você ainda o iniciou, basta fechá-lo.
Como o TrueSTUDIO é uma ferramenta de desenvolvimento e depuração, eu gostaria de não montar o projeto manualmente (conectando as bibliotecas necessárias e prescrever os caminhos), mas obter um arquivo pré-configurado no qual você pode escrever imediatamente o código sem problemas desnecessários.
Para fazer isso, use o programa gerador de código Cube MX ou nas pessoas comuns “Kalokub”.
Este software é o primeiro obstáculo em holivares sobre o que escrever no STM: em registros e CMSIS ou no HAL.
Os defensores da primeira ideologia apresentam os seguintes argumentos: O Cube MX gera uma quantidade enorme e desnecessária de código, o que também atrasa o trabalho do MK.
Defensores do segundo - digamos que o código gerado automaticamente reduz o tempo de desenvolvimento, permitindo que o desenvolvedor alterne rapidamente para a parte da sarjeta do dispositivo (para a lógica principal), dando a rotina periférica ao software especializado (Cube MX).
Curiosamente - essas duas ideologias são verdadeiras e aplicáveis na prática, mas apenas cada uma em suas próprias condições.
Vejamos alguns exemplos:
Exemplo No. 1: É necessário desenvolver um dispositivo o mais barato possível, pois está planejado produzir em lotes de 100500 peças anualmente. Naturalmente, cada rublo extra do preço do dispositivo resultará em centenas de milhares de rublos de despesas no dispositivo final. Além disso, no desenvolvimento planejado, existem alguns cálculos pesados e trabalham com periféricos (ADC, SPI, UART) em velocidades máximas.
O dispositivo é um produto totalmente autônomo; no futuro, está planejado fazer alterações mínimas para todo o período de produção deste equipamento. O período de desenvolvimento até a amostra final é de 1 a 2 anos.
Exemplo No. 2: É necessário um protótipo de um dispositivo, que pode ser do interesse do cliente e ele solicitará 100 peças de dispositivos semelhantes para a conversão de suas instalações. O primeiro lote planejado deve ser enviado ao cliente em 2 meses. O tamanho do primeiro lote de teste de 10 peças.
As especificações técnicas exatas serão ajustadas no processo de trabalho no projeto, mas sabe-se que, no futuro, várias revisões do hardware estão planejadas, para as quais é necessário ajustar rapidamente toda a lógica aplicada.
No primeiro exemplo, a opção ideal seria selecionar o controlador mais barato e escrever um código dependente de hardware, mas ideal, onde o trabalho com periféricos será organizado através do acesso aos registros apropriados (CMSIS). O desenvolvedor envolvido neste projeto deve ter um conhecimento bom ou excelente da periferia de uma família MK específica. Idealmente - ao tentar acordá-lo à noite - ele deve nomear imediatamente o endereço do vetor necessário da tabela de vetores de interrupção.
No segundo exemplo, a escolha do controlador é determinada pelo hardware disponível, bem como o tempo necessário para gravar a funcionalidade exigida pelo cliente. Portanto, a velocidade e a otimização do próprio software estão desaparecendo em segundo plano. Não há tempo para inicialização manual, assim como não há tempo para trabalhar com dependências de hardware.
Nesse caso, é selecionado um controlador que pode ser rapidamente colocado em produção na região atual, inicializado usando o Cube MX, a lógica do aplicativo é escrita em HAL e o protótipo é transferido para o cliente para teste. Esse projeto pode ser conduzido por qualquer desenvolvedor médio que tenha adquirido habilidades em trabalhar com a linguagem de programação de destino. Praticamente não é necessário entender os meandros do trabalho da periferia.
Não importa o quão triste possa parecer - nas realidades do desenvolvimento de dispositivos modernos na Rússia - o exemplo 1 está se tornando menos comum, passando o bastão para o exemplo 2.
Voltaremos à discussão dos exemplos 1 e 2 no final da série de artigos e agora continuaremos com a preparação do espaço de trabalho.
Nesse estágio, faça uma pequena pausa, acesse
my.st.com e registre uma conta, pois a política da empresa ST não permite que você baixe os materiais necessários sem se registrar.
Depois de termos acesso ao site,
baixe o STM32 Cube MX.Na parte inferior da página, há um botão de seleção de versão, precisamos da versão 5.0.0

Ao longo do caminho, até sairmos daqui, baixamos mais duas coisas que serão úteis no futuro
https://www.st.com/en/development-tools/stsw-link008.htmlDriver ST-LINK V2

e
https://www.st.com/en/development-tools/stm32cubeprog.htmlPrograma pisca-pisca.

Instalar o driver, o driver flash e o próprio Cub não causam dificuldades, apenas concordamos com tudo e clique em.
Após uma instalação completa do software necessário, podemos começar a criar um projeto.
Para fazer isso, execute o Cube MX.
Na janela que aparece, clique no botão "ACCESS TO MCU SELECTOR".

O microcontrolador STM32F103C8T6 está instalado em nossa placa de destino.
Digite seu nome na barra de pesquisa e clique duas vezes para selecionar a única opção encontrada.
Na mesma tabela, você pode ver o preenchimento principal do nosso MK (64 kilobytes de flash, 20 kilobytes de RAM, etc.).

Diante de nós, apareceu uma caixa controladora esquematicamente representada, com as pernas afastadas em diferentes direções.
Nesta fase, você deve definitivamente escolher o método de conectar o depurador.
Para fazer isso, selecione o item SYS na guia Pinagem e configuração no menu esquerdo e defina o valor do fio serial na lista suspensa sob o nome "Debug".
Ao mesmo tempo, notamos pelo canto do olho que o programa reservou dois pinos para fins de depuração no mnemônico do controlador.

Mais uma vez, lembramos que queremos piscar um LED em nossa placa.
Para fazer isso, você deve primeiro descobrir a qual perna específica está conectada.
Nisto, ajudaremos o diagrama do circuito elétrico:

ou mais colorido e fácil de entender pinagem do quadro

O LED desejado está na perna do PC13.
Por conseguinte, é necessário configurar esta saída para funcionar no modo de saída.
Para fazer isso:
- Encontramos a conclusão no diagrama mnemônico
- Clique com o botão direito do mouse e, no menu suspenso, selecione o item “GPIO_Output”
- Vá para o menu GPIO,
- Na lista, selecione PC13
- Nós preenchemos a tabela de configuração PC13-TAMPER-RTC de acordo com a captura de tela, estamos especialmente interessados no modo GPIO e nos parâmetros de etiqueta do usuário

Continuamos a configurar o projeto, vá para a guia Configuração do relógio.
Na verdade, esta é uma das guias mais importantes que permite definir as configurações do relógio periférico, mas por enquanto não tocaremos em nada aqui, pois o objetivo principal no momento não é esse.

Vá para a guia Gerente de Projeto, na guia Projeto.
Certifique-se de preencher os seguintes parâmetros:
- Nome do projeto (é melhor usar apenas letras latinas)
- O diretório em que o projeto será criado (também é melhor usar apenas o alfabeto latino)
- IDE no qual planejamos trabalhar no projeto (planejamos usar o TrueSTUDIO)

Descemos abaixo, na guia Gerador de código.
Aqui definitivamente observamos a opção Gerar inicialização periférica como par ...
Assim, obtemos um projeto mais estruturado, no qual, para cada tipo de periferia, há um par de arquivos C e H.

O último passo permaneceu. Subguia Configurações avançadas.
- Escolha o tipo de biblioteca HAL para todos os módulos periféricos
- Coletamos o projeto com as configurações atuais

No lançamento inicial, pode ser necessário fazer o download da versão atual da biblioteca para a família MK selecionada.
Concordamos em baixar arquivos:

Vamos aquecer a chaleira ou fazer café:

Após o término do trabalho do gerador de código, nós o abrimos imediatamente:

Escolha qualquer pasta onde o Atollic armazenará a área de trabalho:

Após a abertura bem-sucedida, veremos a janela principal do Atollic TrueSTUDIO for STM.
Informações gerais são de pouco interesse para nós; portanto, vá imediatamente para a árvore de arquivos.

Encontre o arquivo main.c e a função int main (void) lá:

Para autoteste - tente coletar um projeto vazio
- No menu Projeto -> Reconstruir projeto
- Abaixo, selecione a guia Console
- Após a montagem bem-sucedida - deve receber a inscrição Build Finished

Continua na próxima parte.
PS: Eu publiquei anteriormente o artigo no meu
blog pessoal .