Lição do Teach
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.
Entre com uma conta de professor para preparar uma sessão. Os estudantes entram com um código da turma.
Ainda não tem uma conta na LabsLand? Criar sua conta de professor
Objetivos de aprendizagem
Reconheça o fluxo de trabalho STM32 Mbed CodeIDE e o arquivo de entrada
main.cpp.Escreva um programa Mbed mínimo com
DigitalOuteThisThread::sleep_for().Colete evidências de que o código compilou, carregou e alterou uma saída real.
Visualização da atividade do estudante
Conteúdo da atividade
Apenas visualização. Em uma sessão de aula, os estudantes podem preencher respostas e entregar o trabalho ao professor.
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:
Do main.cpp ao hardware visível
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
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?
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.
Abra o laboratório STM32 Mbed CodeIDE no botão Abrir laboratório desta atividade.
Em CodeIDE, abra
main.cpp.Substitua o arquivo pelo programa acima e substitua
TODO_WAIT_VALUEpor500ms.Pesquise
main.cppporTODO. Quando a pesquisa não encontrar correspondências, salve. Compile somente após salvar.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.Antes de clicar em Upload, observe a câmera ao vivo e escolha a área da placa que acompanhará.
Faça upload do programa para a placa. Aguarde até que a área do console ou de status indique que a programação terminou.
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.
Altere
wait_timede500mspara1000ms, salvemain.cpp, compile a compilação 2, carregue e observe a mesma área LED novamente.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:
- Inicie o cronômetro quando LED mudar de estado. Esta alteração inicial é o início do intervalo 1.
- Conte as próximas alterações visíveis em voz alta ou no papel: 1, 2, 3, 4, 5.
- 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.
- Divida a duração cronometrada por 5 para estimar um intervalo de mudança de estado.
- 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."
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?
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.
Transforme esta visualização em uma sessão de aula
Continue para o LabsLand Teach para usar esta lição com seus estudantes e conferir o acesso disponível para sua conta.
Ainda não tem uma conta na LabsLand? Criar sua conta de professor