
Descrição curta do instrutor.
Introdução ao curso e aos microcontroladores.
Apresentação da Black Pill, placa de desenvolvimento que iremos utilizar para desenvolvimento dos programas durante o curso.
Vale salientar que, caso o estudante possua uma NUCLEO-F4xx ou até mesmo uma Blue Pill, o aprendizado não será prejudicado, e todos os exemplos podem ser construídos nestas placas.
Apresentação da documentação do STM32F411 incluindo:
Datasheet geral do componentes (elétrico)
Manual de Referência
Documentação da Biblioteca HAL para o STM32F4
Instruções para download e instalação da STM32CubeIDE. Este é o software que será utilizado para desenvolvimento nas aulas subsequentes.
Visão geral da STM32CubeIDE após sua instalação.
Abordando os principais elementos da interface baseada em Eclipse.
Instruções de como importar um projeto já existente dentro do Workspace do software de desenvolvimento.
Explicação da estrutura de um projeto dentro da CubeIDE e do plugin CubeMX.
Nesta aula será abordado a importância do clock para os microcontroladores, além da diferença entre osciladores internos e externos.
Apresentação das fontes de clock suportadas pelo STM32F411, abordando, inclusive, a estrutura interna destes.
Explicação do High Speed Internal clock, apresentando suas características, vantagens e desvantagens.
Explicação do High Speed External Clock, apresentando, assim como no HSI, suas principais características, aplicações, vantagens e desvantagens.
Um importante recurso presente em grande parte dos microcontroladores, o PLL, permite que a frequência de entrada seja multiplicada para atingir frequências mais altas, permitindo que um melhor desempenho seja extraído do microcontrolador.
Vale ressaltar que esse ganho de poder, tem também as suas desvantagens.
Não existe nenhuma fonte de de clock perfeita, cada uma tem suas vantagens e desvantagens.
Nesta aula, apresento uma técnica para determinar qual a melhor fonte de clock para o seu projeto, de acordo com as necessidades e características deste.
Nesta aula, iniciaremos com o periférico mais básico de um microcontrolador: As suas GPIOs.
Neste tópico, vamos entender como funciona, internamente uma porta de GPIO.
É importante que, antes de tratarmos de utilizar este importante periférico do microcontrolador, devemos compreender como esse opera, para que tenhamos condições de realizar um uso seguro e eficiente, tanto em seu modo de Entrada (Input) e Saída (Output).
Neste primeiro exemplo, iremos abordar como configurar uma GPIO, como entrada ou saída, seus parâmetros de configuração, e como trabalhamos com ela durante a execução do programa.
No exemplo 2, mostramos como as GPIOs podem ser utilizadas para exibir informações em um Display LCD, muito comum em diversos projetos, que irá permitir exibir qualquer informação desejada.
Aqui já iremos começar a abordar a importação de bibliotecas dentro do projeto.
Lista de Materiais:
Display LCD alfanumérico
Potenciômetro 10K
Neste tópico, iremos abordar as interrupções, entender primeiramente o seu conceito e, de uma forma didática, entender a sua importância no gerenciamento dos eventos de uma aplicação.
Veremos também como a rotina de interrupção acontece internamente no microcontrolador.
Nesta aula é abordada a estrutura de interrupção em um STM32F411, e o diagrama funcional da NVIC (Nested Vector Interrupt Control).
Também é abordado a questão dos cuidados que devem ser tomados ao tratar os eventos gerados nas ISRs.
Nesta parte, abordamos os callbacks e funções utilizados para interrupção de GPIO (EXTI) do STM32F411.
As funções de Callback disponibilizados pela HAL são um grande aliado no desenvolvimento da aplicação.
No exemplo de Interrupção de GPIO (EXTI) é abordado como configurar uma porta como interrupção, suas configurações disponíveis e como habilitar esta interrupção, afim de identificar quando um botão é pressionado, sem utilizar qualquer tipo de polling.
Vemos também a depuração/debug do código e a pilha de chamadas gerada pelos eventos dos botões.
Lista de Materiais:
3x Push buttons
3x Resistores 220R
3x Capacitores 100nF
Vamos entender, nesta aula, o que é um Timer e qual sua importância na escalabilidade de um programa, além de, associado a uma interrupção, permitir uma operação eficiente e responsiva da aplicação que está sendo desenvolvida.
Posteriormente, abordaremos como um timer funciona e seus elementos mais básicos, de forma conceitual, sem se ater à aplicação no STM32.
Um tipo especial de Timer, presente em praticamente toda linha STM32, é o RTC. Veremos suas principais diferenças, se comparados aos Timers de Uso Geral, e suas aplicações.
Após entendermos como funciona o Timer e o RTC, veremos as funções e rotinas implementadas pela HAL, incluindo os Callbacks dedicados as rotinas de interrupções.
Neste primeiro exemplo relacionado ao Timer, implementamos dois timers para piscar um LED, cada um.
Cada timer funcionará de uma forma diferente:
Timer em Modo Temporizador: Neste caso, iremos utilizar o modo temporizador para gerar o Toggle do LED.
Timer em Modo Interrupção: O Toggle do LED será gerado dentro do callback de interrupção do Timer.
Veremos ainda o sinal gerado através de Analisador Lógico.
Lista de Materiais:
2x LEDs
2x Resistores 330R
Após compreendermos como um timer funciona, em seu conceito, veremos como que estes dispositivos são implementados no microcontrolador da ST.
Vale salientar que, no STM32, há vários categorias de Timers, com funcionalidades possíveis distintas entre si (Contador, Temporizador, Input Capture, Output Captura, PWM, etc).
Veremos estas diferenças entre cada um destes, para que tenhamos condições de dominar este periférico do STM32.
No segundo exemplo de Timers, iremos utilizar o modo de Input Capture para capturar a saída de um sonar, afim de medir a distância de um objeto em relação ao emissor.
De bônus, ainda aplicamos o periférico de DMA, para obter as informações sem intervenção da CPU.
Lista de Materiais:
Sensor HC-SR04
No terceiro, e último exemplo de Timers, aplicamos uma das funcionalidades mais utilizadas para Timers, que é a implementação do PWM (Pulse Width Modulation).
Esta funcionalidade nos permite modular a potência entregue à uma determinada carga, veremos isto aplicado em alguns LEDs, para variar seu brilho.
Lista de Materiais:
2x LEDs
2x Resistores 330R
Nesta seção, veremos o Conversor Analógico-Digital (ADC), um periférico que irá permitir a leitura de grandezas analógicas.
Antes de abordarmos o ADC no STM32, veremos alguns parâmetros relevantes do ADC e entender seu conceito de funcionamento.
Analisaremos o que o Reference Manual nos fornece de informação para compreender as capacidades do periférico e como este é implementado.
Entendido como o ADC funciona no STM32, veremos as principais funções que a HAL nos fornece para manipular o periférico analógico, observando, claro, as relacionadas à Interrupção e uso do DMA.
No primeiro exemplo, veremos a aplicação mais simples do ADC, que é para a leitura de um potenciômetro, afim de identificar a tensão no terminal de saída (Wiper) gerada pelo componente.
Aplicaremos o método de leitura por Polling e por Interrupção.
Lista de Materiais:
2x Potenciômetros 10K
1x Capacitor 47nF
Display LCD alfanumérico
No Segundo exemplo, veremos uma forma de utilizar o ADC para reduzir a quantidade de GPIOs necessárias para ler botões em uma interface do usuário.
Utilizaremos um módulo que implementa 5 botões, que são lidos através de uma única saída analógica.
Neste exemplo utilizaremos o DMA para leitura do ADC sem interferência da CPU.
Lista de Materiais:
Módulo Keyes-AD
Display LCD alfanumérico
Potenciômetro 10K
Neste último exemplo do ADC, veremos como ler múltiplas saídas do ADC, com o DMA, para ler 2 Joysticks, que requerem dois canais de ADC, cada.
Este exemplo apresenta uma aplicação real, tanto no quesito de uso de Joysticks, quanto na implementação de vários canais de ADC. Pois a maioria dos projetos sempre exigem múltiplas medidas de variáveis analógicas.
Lista de Materiais:
Módulo joystick
2x Capacitores 47nF
Display LCD alfanumérico
Potenciômetro 10K
A partir desta seção, abordaremos as interfaces de comunicação seriais.
Estas interfaces vão permitir que nos comuniquemos com periféricos externos, microcontroladores e até mesmo um Computador.
A primeira interface que iremos abordar, é a UART. Uma interface serial assíncrona amplamente empregada em diversos projetos. Veremos, aqui, como ela funciona, suas aplicações, vantagens e desvantagens.
Entendido como a UART funciona, abordamos como o STM32F411 implementa este periférico, baseado nas informações presentes no Reference Manual.
Analisaremos as funções implementadas pela HAL para uso do periférico de UART, abordando, sempre, as rotinas de Callback e de DMA.
Neste primeiro exemplo da UART, iremos associar o circuito da Black Pill a um conversor USB-TTL (UART-USB) para nos comunicarmos com o Computador.
Veremos então, como configurar o PC para se comunicar com o microcontrolador e iremos desenvolver uma aplicação que irá devolver todos os bytes enviados pelo computador de volta para a máquina (Echo).
Lista de Materiais:
Conversor serial TTL–USB
Neste segundo e, último exemplo da UART no STM32, iremos utilizar o DMA para estabelecer uma comunicação entre duas Black Pills.
A aplicação proposta visa implementar um protocolo de envio de informações, onde uma placa receptora exibirá em um LCD, qual botão está pressionado na placa transmissora.
Lista de Materiais Transmissora:
Display LCD alfanumérico
Potenciômetro 10K
Lista de Materiais Receptora:
Módulo Keyes-AD
Seguindo nos protocolos de comunicação, iremos abordar uma interface muito utilizada para comunicação de alta velocidade entre periféricos.
Abordaremos seu conceito de funcionamento, os terminais lógicos necessários, e, claro, suas vantagens e desvantanges.
A SPI é uma interface de comunicação serial síncrona muito empregada em memórias FLASH e outros periféricos.
Após compreensão de como o conceito da SPI, veremos como o STM32F411 implementa este periférico.
Como sempre, é importante compreender como o microcontrolador implementa seus periféricos, afim de utiliza-lo de forma eficiente.
Como de praxe, veremos as rotinas fornecidas pela HAL para trabalharmos com os periféricos de SPI presentes no microcontroladores da linha STM32F4.
Abordaremos as funções utilizadas para Polling (também chamado de modo Blocking), Interrupção e DMA.
Neste primeiro exemplo da SPI, implementaremos um cenário com duas Black Pills, que se comunicarão pela SPI.
Uma será configurada como Master, e a outra como Slave. A finalidade é observarmos as diferenças de implementação destes dois modos no STM32, e como podemos trabalhar com estes.
Ligaremos ao circuito o Analisador Lógico, para que possamos visualizar as linhas lógicas da SPI e observar na prática os seus sinais.
No segundo exemplo, utilizamos um periférico de rádio que utiliza a SPI como meio de comunicação, o NRF24L01. Implementaremos este circuito em duas Black Pills, para estabelecer um link de comunicação via rádio, afim de transmitir informações de forma remota.
Lista de Materiais:
2x Módulos RF nRF24L01
Display matricial 8x8
2x Capacitores 22uF
NOVIDADE: Agora o curso possui Simulados, para lhe auxiliar no processo de aprendizagem!
Aprenda a criar Firmwares para o STM32F411 utilizando a STM32CubeIDE.
Neste curso você aprenderá sobre:
Utilizar a STM32CubeIDE de forma eficiente.
Compreender as documentações disponíveis, como procurá-las e utilizá-las.
Criar projetos para o STM32F411.
Configurar corretamente o microcontrolador de acordo com cada necessidade.
Utilizar a biblioteca HAL para programar o STM32.
Depurar o código e analisar o comportamento do programa.
Organização do programa e dicas para criar bibliotecas.
Proteger o programa gravado no microcontrolador.
Para desenvolvimento dos programas, utilizaremos a placa de desenvolvimento Blackpill e um gravador ST-Link v2, caso queria acompanhar os programas desenvolvimentos, mas caso opte por um kit oficial da ST, pode ser utilizado a NUCLEO-F411RE. É recomendável, também, ter em mãos estes dispositivos, além de componentes eletrônicos, como botões, LEDs e resistores.
O curso buscará apresentar-lhe o essencial para que você possa programar este microcontrolador em bare-metal (sem nenhum tipo de kernel o RTOS), apresentando-lhe como configurar os seus sistemas de clock, GPIOs, e demais periféricos, tais como Timers, I2C, SPI, UART, etc. E, ao final, desenvolver um simples projeto utilizando pelo menos 2 periféricos, com o objetivo de apresentar técnicas de programação, depuração e proteção do firmware.
É esperado que ao fim do curso você seja capaz de desenvolver projetos utilizando microcontroladores STM32, tendo condições de planejar, estruturar e desenvolver aplicações com uso consciente e eficiente dos recursos disponíveis na plataforma.
Espero ver você no curso, e qualquer dúvida, estou à disposição.
Observação:
- Você pode utilizar qualquer placa de desenvolvimento da ST Microeletronics para prosseguir com o curso, Bluepill, ou qualquer NUCLEO. Há uma exceção, caso, você esteja usando um microcontrolador da família STM32C5, você terá de utilizar a STM32CubeMX2.