Início rápido do STM32. Parte 2 Olá, mundo na HAL, depuração no Atollic TrueSTUDIO

Da última vez que dominamos a criação de um novo projeto usando o STM CubeMX, a primeira parte pode ser encontrada aqui.

Para quem tem preguiça de reler - tudo acabou com o fato de o projeto vazio ter sido montado com sucesso.



Nesta parte, escreveremos o exemplo mais simples do Hello World no HAL, veremos como executar e usar o depurador e descobriremos quanta memória nosso programa consome, que nesta parte será escrita no HAL.

Tomamos como base o mesmo projeto vazio que foi inicializado na última parte.

Para piscar o LED, precisamos seguir o seguinte algoritmo:

  1. Defina o estado inverso ao atual na perna do microcontrolador. Ou seja, havia 0 - conjunto 1, havia 1 - conjunto 0 e assim por diante.
  2. Aguarde N pelo número de microssegundos e retorne à etapa 1.

Para cumprir o primeiro ponto, precisamos informar ao compilador a qual pino e porta o LED está conectado e qual funciona para inverter seu estado.

Primeiro, descobrimos onde conectamos o LED.

No arquivo main.c, imediatamente após os comentários introdutórios que a empresa ST gentilmente nos escreveu, há uma linha para conectar o arquivo de cabeçalho main.h



Clique com o botão direito nessa linha e localize o item Declaração Aberta



Ao clicar nele, iremos para o arquivo main.h

Onde encontrar nossos nomes declarados de pinos e portas.



Lembre-se, na primeira parte, ao inicializar a saída do LED PC13, preenchemos o campo Etiqueta do usuário e inserimos CLOCK_LED lá?

Ao gerar o projeto, o STM32CubeMX levou em consideração nossos desejos e agora, em vez dos GPIO_PIN_13 e GPIOC abstratos, podemos acessar nosso LED através dos CLOCK_LED_Pin e CLOCK_LED_GPIO_Port mais inteligíveis.

Com isso - o que vamos gerenciar - descobrimos.

Agora, estamos procurando uma função que possa mudar o estado do nosso GPIO para o oposto.
Para fazer isso, na árvore de projetos no lado esquerdo da tela - encontre o arquivo:

Drivers -> STM32F1xx_HAL_Driver -> Inc -> stm32f1xx_hal_gpio.h 

Tem muitas coisas, mas precisamos de descrições das funções incluídas no bloco / * Exported functions * /

Encontre a função lá

 void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 

É exatamente disso que precisamos.



Para que o LED pisque constantemente, é necessário colocar a chamada de nossa função em principal no corpo do loop principal do programa.

E para distinguir entre piscadas - adicione depois disso um atraso usando a função HAL_Delay (500);

Nesse caso, o atraso será de 500 ms.



A propósito, a função HAL_Delay também é descrita em

 Drivers -> STM32F1xx_HAL_Driver -> Inc 

somente no arquivo stm32f1xx_hal.h
Ou seja, para piscar um LED - precisávamos escrever apenas 2 linhas de código.
Se fizemos tudo certo, você pode tentar executar o depurador e ver como o programa é executado.





Você pode navegar pelo código do programa usando os botões F5 e F6
Ao mesmo tempo, o botão F6 funciona apenas em chamadas de função, e o botão F5 permite que você insira a função chamada e veja o que acontece dentro.



A única coisa que você não deseja detectar falhas durante a depuração é aconselhá-lo a desativar a otimização. Isso é feito através do menu Projeto -> Propriedades

O valor do Nível de otimização deve ser definido como Nenhum (-O0)



Depois de parar a depuração, o controlador reiniciará o código novamente e o executará ciclicamente.

O resultado deve ser algo como isto.



Resumir


O uso do HAL nos permitiu implementar essa tarefa escrevendo apenas 2 linhas de código.

Mas, para simplificação do trabalho, era necessário pagar com memória



1,54 KB de RAM e 4,69 KB de flash.

Deixe-me lembrá-lo de que a otimização está desativada, ou seja, "-O0"

É muito ou pouco?

Esta pergunta pode ser respondida com confiança apenas nas seguintes partes do artigo.

O artigo original está no meu blog como sempre.

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


All Articles