Teach Remote lab lessons

Teach lesson

STM32 Mbed CodeIDE (1/8): primeiro piscar

Os estudantes usam o STM32 Mbed CodeIDE para editar main.cpp, compilar e fazer upload de um programa de piscar com DigitalOut, além de registrar evidências do LED na placa real.

  • STM32 Nucleo (Mbed)
  • 50 min
  • Ensino médio / formação técnica introdutória em eletrônica
  • Português (Brasil)
  • Embedded systems
STM32 Nucleo (Mbed)
STM32 Nucleo (Mbed)

Learning Outcomes

  • Reconheça o fluxo de trabalho STM32 Mbed CodeIDE e o arquivo de entrada main.cpp.

  • Escreva um programa Mbed mínimo com DigitalOut e ThisThread::sleep_for().

  • Colete evidências de que o código compilou, carregou e alterou uma saída real.

Student activity preview

Activity Content

Preview only. In a class session, students can fill in responses and submit their work to the teacher.

1

Antes de abrir o laboratório

8 min

A programação embarcada costuma começar com uma prova visível simples: seu código consegue alterar um dispositivo físico quando recebe uma instrução? Uma primeira piscada é pequena, mas verifica toda a cadeia — editar, compilar, fazer upload e observar a placa real.

Mbed OS fornece ao seu programa C++ um conjunto de APIs prontas para trabalho com microcontroladores: pinos digitais, entradas analógicas, saídas PWM, temporização, threads e mensagens seriais. Neste laboratório, CodeIDE fornece o ambiente Mbed para a placa STM32 remota. Seu programa reside em main.cpp, inclui mbed.h, inicia em int main() e controla o hardware criando objetos Mbed.

Por exemplo, DigitalOut status_led(PB_5, 0); cria um objeto de saída chamado status_led conectado ao pino STM32 PB_5. Lições posteriores usam outros objetos Mbed, como DigitalIn, AnalogIn e PwmOut.

As explicações desta atividade são suficientes para concluir a tarefa. Se quiser consultar a documentação oficial enquanto trabalha, mantenha estas páginas por perto:

- APIs de entrada e saída do Mbed OS
- Referência da API do Mbed CE

Do main.cpp ao hardware visível

Fluxo de trabalho do arquivo main.cpp por meio de Compile e Upload to board bem-sucedidos para observar o STM32 remoto com a câmera.

Use Abrir laboratório, abra main.cpp em Arquivos, substitua e salve o código, selecione
Compile, depois Upload to board e, por fim, observe a câmera ao vivo. Nesta primeira
lição, ignore interruptores, botões, potenciômetros, entrada do console, limites e medidor de
energia. Salve antes de cada compilação; uma mensagem de compilação não prova que o LED
piscou, portanto confirme o resultado pela câmera ao vivo.

A ideia inicial é piscar: ligar uma saída, esperar, desligar, esperar e repetir.

Em Mbed, você primeiro cria um objeto conectado a um pino:

DigitalOut status_led(PB_5, 0);

Leia essa linha como: "faça uma saída digital chamada status_led no pino PB_5 e inicie-a no valor 0."

A placa que você está programando é a STM32 Nucleo WB55RG.

Placa STM32 Nucleo WB55RG

Foto da placa STM32 Nucleo WB55RG usada no laboratório remoto LabsLand.

Esta foto mostra a própria placa do microcontrolador. É para orientação, não para identificar o LED exato de uma imagem estática. O laboratório remoto ao vivo também pode mostrar controles separados ou hardware de treinamento, mas eles não são mostrados nesta foto. Você não conecta nada ao seu próprio computador; CodeIDE envia o programa compilado para a placa remota.

Dentro de while (true), o programa se repete para sempre:

status_led = !status_led.read();
ThisThread::sleep_for(500ms);

Leia a primeira linha como: "leia o valor atual, altere-o para o valor oposto e armazene o novo valor de volta na saída." O operador ! significa "não" ou "oposto" para um valor 0/1.

Uma mudança de estado é uma transição, como ligado para desligado ou desligado para ligado. Um ciclo completo de piscadas precisa de duas mudanças de estado: uma para ligar e outra para desligar novamente.

Para uma espera 500ms após cada alternância, qual descrição de tempo está correta?

2

Crie e teste o piscar

26 min

Planeje duas compilações e cerca de 18 minutos de tempo de laboratório ativo: primeiro 500ms, depois 1000ms. Se a fila do laboratório remoto estiver ocupada, responda ambas as perguntas de previsão e prepare os títulos para ambas as observações antes da sua vez.

Copie todas as linhas de #include "mbed.h" até o } final. O código inicial contém exatamente um marcador que impede a compilação. Substitua TODO 1 antes de salvar ou compilar; TODO_WAIT_VALUE não é C++ válido.

#include "mbed.h"

DigitalOut status_led(PB_5, 0);

int main() {
    // 1: substitua o espaço reservado por 500 ms para compilação 1.
    const auto wait_time = TODO_WAIT_VALUE;

    while (true) {
        status_led = !status_led.read();
        ThisThread::sleep_for(wait_time);
    }
}

Antes de alterar o tempo de espera, preveja o que acontecerá. Use sua resposta sobre o intervalo entre mudanças de estado para decidir se 1000ms fará o LED mudar mais rápido, mais devagar ou quase no mesmo ritmo.

Antes do teste, o que a mudança de wait_time de 500ms para 1000ms deve fazer?

Como encontrar o LED que muda: após o upload, compare a câmera ao vivo antes e depois de o programa começar. Ignore LEDs que permaneçam sempre acesos ou sempre apagados e breves flashes de upload ou status. Observe o LED que continua mudando no intervalo programado; ao passar de 500ms para 1000ms, o mesmo LED deve continuar mudando, agora no novo ritmo.

O cartão do laboratório possui um botão Marcar prática como concluída. Não clique ainda; use-o somente depois de concluir todas as etapas numeradas, incluindo o novo teste 1000ms.

  1. Abra o laboratório STM32 Mbed CodeIDE no botão Abrir laboratório desta atividade.

  2. Em CodeIDE, abra main.cpp.

  3. Substitua o arquivo pelo programa acima e substitua TODO_WAIT_VALUE por 500ms.

  4. Pesquise main.cpp por TODO. Quando a pesquisa não encontrar correspondências, salve. Compile somente após salvar.

  5. Selecione Compile para a compilação 1. Se houver erro, verifique a substituição do TODO, a grafia, as chaves {}, os parênteses () e os pontos e vírgulas.

  6. Antes de clicar em Upload, observe a câmera ao vivo e escolha a área da placa que acompanhará.

  7. Faça upload do programa para a placa. Aguarde até que a área do console ou de status indique que a programação terminou.

  8. Observe a mesma área da câmera e procure o LED que muda repetidamente no intervalo programado. Ignore LEDs de energia ou status que permaneçam acesos e breves flashes de upload. Use um cronômetro: comece a marcar quando o LED mudar de estado, conte mais cinco mudanças e pare na sexta mudança visível. Tanto a passagem de apagado para aceso quanto a de aceso para apagado contam como uma mudança.

  9. Altere wait_time de 500ms para 1000ms, salve main.cpp, compile a compilação 2, carregue e observe a mesma área LED novamente.

  10. Somente após a conclusão da etapa 9, clique em Marcar prática como concluída.

Registre as duas observações nas caixas abaixo. A razão para cronometrar cinco intervalos é prática: uma alteração LED é curta e difícil de cronometrar com precisão em uma câmera ao vivo, mas cinco alterações fornecem uma estimativa mais estável.

Use este método para cada versão:

1. Inicie o cronômetro quando LED mudar de estado. Esta alteração inicial é o início do intervalo 1.
2. Conte as próximas alterações visíveis em voz alta ou no papel: 1, 2, 3, 4, 5.
3. Pare o cronômetro na mudança que você contou como 5. Sua duração cronometrada agora cobre cinco intervalos de mudança de estado.
4. Divida a duração cronometrada por 5 para estimar um intervalo de mudança de estado.
5. Um ciclo completo de piscada leva duas mudanças de estado, então multiplique seu intervalo de mudança de estado por 2.

Exemplo: se cinco intervalos durarem cerca de 2,6 s, cada mudança de estado levará aproximadamente 0,52 s e um ciclo completo de piscada, cerca de 1,04 s.

Para 500ms, escreva sua observação usando este formato:

- Contei 5 intervalos de mudança de estado a partir da repetição de LED.
- Tempo para 5 intervalos (s):
- Tempo para 1 intervalo de mudança de estado, aproximadamente (s):
- Tempo para 1 ciclo de piscada completo, aproximadamente (s):
- Isso correspondeu à minha previsão? sim/não, porque...

Para 1000ms, escreva sua observação usando este formato:

- Contei 5 intervalos de mudança de estado do mesmo LED repetido.
- Tempo para 5 intervalos (s):
- Tempo para 1 intervalo de mudança de estado, aproximadamente (s):
- Comparado com 500ms, o LED mudou mais rápido/mais lento/quase o mesmo:
- Isso correspondeu à minha previsão? sim/não, porque...
- É necessária solução de problemas? sim/não. Se sim, o que mudou?

Escreva uma nota de evidência da placa real. Inclua quatro detalhes: se a compilação e o upload terminaram, onde o LED apareceu na câmera ao vivo, o que mudou e como a versão de 1000 ms se comportou em comparação com a de 500 ms. Exemplo: "Compilação e upload concluídos; o LED próximo ao lado esquerdo da placa mudou de estado mais lentamente depois que passei de 500ms para 1000ms."

3

Compreender a estrutura Mbed

8 min

A maioria dos programas neste curso segue a mesma estrutura Mbed OS: inclui mbed.h, cria objetos de hardware como DigitalOut, inicia em int main() e coloca o comportamento repetido do controlador dentro de while (true).

Em suas próprias palavras, o que while (true) faz neste programa de piscar? Por que é necessário?

4

Envie seu código

8 min

Antes de enviar, deixe a versão final do 1000ms salva em main.cpp. Procure mais uma vez por TODO; o arquivo enviado não deve conter espaços reservados TODO.

Anexe seu main.cpp final salvo

Clique em Verificar arquivos salvos, confirme que main.cpp contém a versão final de piscada com 1000ms e clique em Anexar código salvo. Depois que o código for anexado, clique em Enviar atividade na parte inferior. O anexo exigido é o instantâneo do main.cpp salvo.