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.
New to LabsLand? Create your teacher account
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
DigitalOuteThisThread::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.
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
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:
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."
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.