Manual

do

Maker

.

com

Nuttx - Como configurar a porta USB no STM32F103

Nuttx - Como configurar a porta USB no STM32F103

No artigo anterior relacionado ao Nuttx descrevi o processo para configurar um ambiente de compilação do sistema e como subir o firmware para a placa. Nesse artigo vou discorrer um pouco mais sobre a Blue Pill, como configurar a porta USB no STM32F103 para criar um dispositivo em /dev quando a board for conectada à porta USB. Mas para isso, alguns conceitos precisam ser esclarecidos.

Porque não aparece um dispositivo serial por padrão?

Algumas boards não tem um conversor USB/serial, outras dependem de habilitar no hardware o MODEM, como é o caso dessa STM32F103. O recurso está lá, basta ser habilitado e para isso utilizamos o menuconfig do Nuttx, que será o sistema operacional de tempo real que utilizaremos nessa board para nossos tutoriais. Vou me basear muito, mas muito mesmo nos tutoriais do Alan Carvalho, do canal Nuttx Channel, porque ele está anos luz à frente de qualquer coisa que eu possa escrever, recomendo o canal.

Como configurar a porta USB no STM32F103?

Agora que começa a brincadeira. O padrão da compilação do artigo anterior é a utilização da porta serial, mas imagine um conjunto de hardware composto por um STM32, um gravador e um FTDI. Um bocado de coisa para interagir com uma plaqunha, hum? Não vamos dispensar o gravador, mas podemos facilitar um bocado o acesso ao nsh do Nuttx, fazendo a placa funcionar como outra placa qualquer, como um Arduino, ESP8266/32 etc. Vamos à compilação.

Limpando a casa

Se você seguiu o tutorial anterior, já tem uma configuração definida no seu ambiente de compilação. Utilizar make clean irá somente limpar a compilação e para eliminar os vestígios da compilação anterior, será necessário utilizar o comando make distclean.

Selecionando a board

Estando tudo limpo, agora podemos iniciar uma nova configuração. Apenas para relembrar, o diretório de trabalho definido no artigo anterior é o nx, seguido pelo diretório do Nuttx, que para esse artigo é a versão 7.23, portanto o segundo nível de diretório é nuttx-7.23.

Entre no diretório como descrito abaixo e execute o comando para essa board:

cd ~/nx/nuttx-7.23/tools
./configure.sh stm32f103-minimum/nsh
cd ..
make menuconfig

Selecionando parâmetros

Ao abrir o menuconfig, siga os seguintes ítens:

System Type ->
     STM32 peripheral Support ->
          [*] USB Device

Volte ao menu principal agora. Precisamos habilitar alguns recursos mais. Siga o menu:

Board Selection ->
     [*] Enable USB Device Controls

Volte ao menu principal e siga o menu:

Device Drivers ->
     USB Device Driver Support ->
          [*] USB Modem (CDC/ACM) support ->

Ao selecionar esse ítem, o submenu será habilitado. Entre nesse submenu e siga:

[*] CDC/ACM console device

Isso habilitará o console serial sobre a porta USB.

Pra finalizar, volte 2 níveis de menu e desabilite o shell sobre a serial:

[*] Serial Driver Support ->
     Serial Console (USART1) --->
          (X) No serial console

Pronto. Foram vários menus, mas não foi necessário digitar uma linha de código sequer, hum?

Volte ao menu principal, selecionando sempre a opção Exit. Ao sair pela última vez, será perguntado se deseja salvar as configurações. Apenas confirme Yes e já podemos compilar nosso novo firmware. Veja como conectar o gravador ao STM32 nesse outro artigo.

Gravando o firmware

O comando para gravar:

st-flash write nuttx.bin 0x8000000

Isso deve resultar em algo como:

maple_mini-flashing.webp

Após subir o firmware, desconecte o gravador e conecte a Blue Pill à porta USB. Dentro de /dev deverá aparecer a porta ttyACM0.

Iniciando uma comunicação USB-serial

Agora que o dispositivo está pronto para uso, vamos usá-lo! Você pode usar seu programa de comunicação serial preferido. Para esse teste, estou utilizando o screen:

screen /dev/ttyACM0

Aperte enter 3 vezes e o shell se mostrará:

nuttx-nsh.webp

Os comandos disponíveis nessa compilação:

nuttx-commands.webp

Já dá pra começar a brincadeira, hum?

Pinout da Blue Pill

Nesse artigo ainda não será necessário, mas assim que começarmos a mexer com GPIO, precisaremos do pinout como referência, por isso aproveitei para deixá-lo aqui:

stm32_pinout.jpg

BluePill

Esse exato modelo utilizado nos tutoriais você encontra nesse link da Autocore Robótica, aproveite que as brincadeiras estão apenas começando e adquira a sua pra acompanhar. Futuramente vamos rodar esse sistema no ESP32 e até lá já estaremos todos ambientados!

Inscreva-se no nosso canal Manual do Maker no YouTube.

Também estamos no Instagram.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.