Nesse artigo será realizado uma breve introdução sobre a placa BluePill e como utilizá-la no ambiente STM32CubeIDE.
A placa BluePill possui um microcontrolador ARM de 32 bits com grande capacidade de atender diversas necessidades, além disso o preço é bastante atrativo. Pode ser adquirido desde sites chineses até fornecedores nacionais facilmente.
Além dos pinos padrão de I/O, ADC, PWM, possui 9 interfaces de comunicação serial e um RTC.
O RTC é um relógio interno que poderá ser utilizado na aplicação. É possível ajustá-lo e ele mantém a data e hora enquanto houver energia. Recomenda-se o uso de bateria a parte quando utilizado.
Dentro das interfaces de comunicação há duas bem interessantes, que são: USB e CAN. A USB é interessante para qualquer tipo de configuração utilizando o computador. Já a CAN é interessante para projetos que façam interface com um veículo.
Veja na figura abaixo os pinos de saída.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/stm32f103c8t6_pinout_voltage01-1024x545.png)
Instalando o ambiente de desenvolvimento STM32CubeIDE no Windows 10
Clique aqui para baixar a versão 1.11.2.
Para baixar a versão mais recente, acesse o site do fabricante, pelo endereço: st.com
Após baixado, siga a sequência de imagens abaixo para instalá-lo.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/01-1.png)
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/02-2.png)
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/03-1.png)
Se você chegou aqui, parabéns, tudo está instalado, veja o próximo tópico para inicializar um projeto e gravá-lo.
Criando um projeto
Clique no link do aplicativo e abra-o. No item 1, selecione o Workspace. Será a pasta onde os projetos serão armazenados. O item 2 será perguntando somente uma vez, o desenvolvedor pede para autorizar o envio de informações sobre o uso da plataforma. Fica a seu critério autorizar ou não. Para não autorizar, clique no botão No Thanks.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/04-1.png)
No primeiro uso, aparecerá as mensagens abaixo. No item 3 é para habilitar o uso da internet pelo ambiente, é recomendável selecionar e permitir o acesso, porque o ambiente baixa as bibliotecas dos microcontroladores conforme a necessidade. Dessa forma ocupa menos espaço e executa mais rápido. No item 4 ele questiona se deseja configurar os parâmetros de conexão, sugestão é clicar no botão No.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/05-1.png)
Para criar um novo projeto, clique no menu File->New->STM32 Project. Conforme imagem abaixo.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/06-1.png)
Nessa etapa, será necessário informar o Part Number do microcontrolador, no nosso caso é o STM32F103C6T6.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/07.png)
Informe o nome do projeto, clique no botão Finish, depois Finish novamente.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/08.png)
Aguarde o ambiente baixar todas as bibliotecas.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/09.jpg)
Após concluído, aparecerá o microcontrolador, conforme imagem abaixo.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/10.jpg)
Não utilizaremos nesse exemplo, porém recomendo sempre habilitar o modo de depuração, veja na imagem abaixo.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/11.png)
Habilite o pino PC13 como saída.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/12.png)
Para seguirmos boas práticas de desenvolvimento e código limpo, troque o nome do pino para sua função. O nome padrão é GPIO_Output, o novo nome será LED.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/13.png)
Habilite todos os pinos não utilizados para serem analógicos.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/14.png)
Compile sem nenhum código para testar o ambiente. Clique no menu Project->Build All. Ou tecle Ctrl+B (utilizo mais o atalho do teclado).
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/15.png)
Onde inserir o código?
Por causa da ferramenta de configuração do ARM é necessário atentar-se de alguns detalhes, porque essa ferramenta gera código a partir das configurações selecionadas, facilitando bastante o trabalho.
Dentro do arquivo main.c será encontrado trechos conforme a imagem abaixo.
![](https://lowlevelcode.dev/wp-content/uploads/2023/02/code.jpg)
Esse trecho foi reservado para o desenvolvedor inserir os includes da aplicação. Haverá trechos para define, macro, variáveis, etc. Todo o código que estiver dentro do BEGIN e END será mantido, o que estiver fora será perdido sempre que utilizar a função para gerar código (Alt+K).
Código exemplo
O código a seguir é um pisca pisca para o LED PC13 que está disponível na placa do BluePill.
Para seguir padrão de código limpo, criarei defines com o nome da atividade. No arquivo main.c procure o trecho abaixo e insira o código.
/* Private define ---------------------------------*/
/* USER CODE BEGIN PD */
#define LIGAR_LED HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET)
#define DESLIGAR_LED HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET)
#define AGUARDAR_1S HAL_Delay(1000)
/* USER CODE END PD */
Encontre a função principal, esta no formato: int main(void)
Dentro do trecho de loop infinito insira o código.
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1){
LIGAR_LED;
AGUARDAR_1S;
DESLIGAR_LED;
AGUARDAR_1S;
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
Compile o código Ctrl + B
Na aba Build Analyzer é possível verificar o quando a aplicação está utilizando de memória flash e RAM.
![](https://lowlevelcode.dev/wp-content/uploads/2023/03/build_size.jpg)
Como gravar o firmware?
É necessário um gravador para enviar o firmware para o microcontrolador. Para isso pode ser utilizado o USB ST-LINK V2, conforme a imagem.
![](https://lowlevelcode.dev/wp-content/uploads/2023/03/GravadorSTLINK_V2.png)
ATENÇÃO: Já observei que no mercado há modelos que os pinos de saída estão em outra posição. Então confirme com a documentação do que você adquiriu.
Caso o gravador tenha a posição dos pinos idêntica a imagem, então segue abaixo como conectá-lo a BluePill.
![](https://lowlevelcode.dev/wp-content/uploads/2023/03/GravadorSTLINK_V2_Conexao.png)
Expectativa de funcionamento. Caso tenha qualquer dificuldade, entre em contato, será um prazer ajudá-lo.
![](https://lowlevelcode.dev/wp-content/uploads/2023/03/Funcionando.gif)
Configuração dos jumpers de boot
O jumpers (pinos BOOT0 e BOOT1) de boot permitem configurar o bootloader, ou seja, de que forma será gravado e utilizado o firmware.
Veja na tabela abaixo as possíveis configurações.
BOOT1 | BOOT0 | Descrição |
X | 0 | Memoria flash do usuário |
0 | 1 | Memoria do sistema |
1 | 1 | Embedded SRAM |
Na primeira opção, o firmware é gravado e lido a partir de memória flash do usuário. Na segunda refere-se a memória do sistema. E na terceira na SRAM, nesse caso, após reiniciá-lo a aplicação apagar.
Caso a configuração não esteja adequada, poderão ocorrer falhas, principalmente durante a depuração do código.
BONUS
Clique neste link para baixar o esquema elétrico da BluePill.