Introdução
Vimos anteriormente como gravar binários (.s19 ou .srec) no STM8 usando o ST Visual Programmer (STVP). Se você ainda não leu esse artigo, clique aqui.Mas com esse método, para gravar uma placa com um STM8, é necessário ter um computador com o STVP instalado e uma pessoa operadora que saiba carregar o binário, configurar os Option Bytes, proteger a memória e finalmente gravar o STM8.
Esse artigo vai trazer um passo a passo de como modificar uma placa de desenvolvimento (a STM8SVLDISCOVERY ou a STM8S-DISCOVERY) para armazenar o binário e configurações de Option Bytes dentro do gravador, para que ele grave placas com STM8 sem precisar de um computador ou do STVP. Para seguir esse roteiro e fazer o Standalone, serão necessários:
- 1 placa discovery do STM8 (a STM8SVLDISCOVERY ou a STM8S-DISCOVERY)
- Ferro de solda, cabinhos de conexão entre placas e uma barra de pinos dupla
Modificações de hardware
Fazendo o conector
Primeiro, serão necessárias algumas modificações no hardware das placas:- A placa de cima é o gravador que usaremos. E esses são os principais componentes dela:
- O conector CN5 da placa tem 7 pinos, mas vamos precisar do sinal de reset (NRST) que não está nesse conector. Então vamos cortar um pedaço do oitavo pino, e soldar um fio para fora, de maneira que o conector encaixe corretamente no conector CN5 e que o sinal do pino 8 modificado saia pelo fio que soldamos:
Adaptando a alimentação da placa
Ainda é necessário fazer uma última modificação, e essa é diferente caso você tenha a placa STM8SVLDISCOVERY ou a placa STM8S-DISCOVERY:
Modificações de firmware
Conexões dos pinos de gravação
O microcontrolador presente no gravador da placa modificada é um ARM Cortex M3 (STM32F103C8T6), então precisamos de um gravador/debugger de ARM/STM32 para gravá-lo com o Firmware que contém os binários do STM8. Pode ser qualquer gravador/debugger de STM32 como as placas Discovery, Nucleo, ou o ST-LINK/V2. Nesse artigo, vamos usar a placa NUCLEO.
- Primero, é necessário desconectar os Jumpers CN2 para habilitar o pinos CN4 para reprogramarmos o microcontrolador do Standalone
- Vamos conectar o conector CN5 da placa Standalone com o conector CN4 da placa NUCLEO (você pode conferir a ligação dos pinos no esquemático da Discovery do STM8 e no da NUCLEO)
Para modificar o firmware do gravador precisamos da IDE IAR Embedded Workbench (EWARM). Para instalação dele, siga o passo 1 desse roteiro de instalação.
Com a IDE instalada, vamos fazer uma cópia do projeto do gravador Standalone, para isso:
- Acesse o projeto dele no GitHub, e faça o download do projeto:
- Ou, se já usa o Git, é só acessar o Git na pasta que quer salvar o projeto e colocar o seguinte comando:
git clone https://github.com/diegomendesmoreno/STM8_Standalone
Agora abra a pasta do projeto em \STM8_Standalone\Project e abra o arquivo STLink.eww.
Configurações do Standalone
Adicionando o binário ao projeto
Voltando a pasta do projeto, vá na pasta \STM8_Standalone\Conversor, e cole aqui o seu binário (.s19 ou .srec) que você aprendeu nesse post onde pegar.Com o binário na pasta, rode o arquivo S19Converter.exe, digite o nome do arquivo binário (incluindo a extensão.s19 ou .srec) e o programa vai transformar o binário em um vetor no arquivo HexCode.c dentro do projeto no IAR.
Voltando ao IAR, na árvore de arquivos à esquerda, abra a pasta User, e então o arquivo HexCode.c. Observe que todo o código do binário agora está dentro de const uint8 ProgInit[FILE_SIZE]. Observe que se você usou um binário .s19, talvez você precise deletar o excesso de zeros no final do vetor para o projeto compilar com sucesso.
Configurando a família, proteção de escrita e Option bytes
Dentro da mesma pasta User abra o arquivo main.h incluído em main.c.
- Habilitar escrita na EEPROM: habilita a gravação de dados de usuário que possam existir dentro de const uint8 EEPROMInit[EEP_SIZE]:
/* Habilitar escrita na EEPROM / Enables EEPROM writting 1 - Habilita a escrita do vetor EEPROMInit[EEP_SIZE] na EEPROM / Enables EEPROM writting 0 - Não habilita escrita na EEPROM / Disables EEPROM writting */ #define W_EEPs 1
- Habilitar Proteção de leitura (ROP): habilita proteção da memória FLASH contra leitura
/* Habilitar Proteção de leitura (ROP) / Enables ROP (Read Out Protection) 1 - Protege a memória FLASH contra leitura / Enables ROP (Read Out Protection) 0 - Não protege a FLASH contra leitura / Disables ROP (Read Out Protection) */ #define ATIVAR_ROP 0
- Escolha da família de microcontrolador utilizado
/* Família de microcontrolador utilizado / MCU Family Descomente a linha que contém a família do microcontrolador a ser gravado Uncomment the line that contains the STM8 family to be flashed */ #define STM8S001_STM8S003_STM8S103_STM8S903 //#define STM8S005_STM8S105_STM8S207_STM8S208 //#define STM8L001_STM8L101
- Configurações de Option Bytes: onde colocar os valores de option bytes (descritos na secão "Option bytes" no datasheet do MCU)
/* Mude os Option Bytes aqui de acordo com a família usada Configure the Option bytes from the STM8 family to be flashed */ #ifdef STM8S001_STM8S003_STM8S103_STM8S903 #define OPT1_BITS 0x00 // 0x4801 - UBC (UserBoot code size) - OPT1 #define NOPT1_BITS 0xFF // 0x4802 - UBC (UserBoot code size) - NOPT1 [...] #define OPT5_BITS 0x00 // 0x4809 - HSE clock startup - OPT5 #define NOPT5_BITS 0xFF // 0x480A - HSE clock startup - NOPT5 #endif #ifdef STM8S005_STM8S105_STM8S207_STM8S208 #define OPT1_BITS 0x00 // 0x4801 - UBC (UserBoot code size) - OPT1 #define NOPT1_BITS 0xFF // 0x4802 - UBC (UserBoot code size) - NOPT1 [...] #define OPTBL_BITS 0x00 // 0x480E - Bootloader - OPTBL #define NOPTBL_BITS 0xFF // 0x480F - Bootloader - NOPTBL #endif #ifdef STM8L001_STM8L101 #define OPT2_BITS 0x00 // 0x4802 - UBC (UserBoot code size) - OPT2 #define OPT3_BITS 0x00 // 0x4803 - DATASIZE - OPT3 #define OPT4_BITS 0x00 // 0x4808 - Independent watchdog option (IWDG) - OPT4 #endif
Após as configurações, recompile o projeto.
Gravando o STM8 (Standalone em ação)
Com o projeto configurado e as placas conectadas está na hora de regravarmos o firmware do gravador, e para isso já recomendo conectar ao gravador uma placa com o STM8 que se deseja gravar.Escolha a opção Download and Debug (Project >> Download and Debug), e aguarde a gravação e a entrada em modo de Debug. Aperte F5 para rodar a aplicação e veja o gravador gravando a placa com o STM8. Observe que o LED vermelho do gravador se acende, e apaga quando a gravação é concluída.
OBS: Se quiser monitorar as etapas, vá em View >> Live Watch e monitore a variável SWIM_Estado. Ela fica no estado 24 quando a gravação é concluída, e no estado 4 se ela não achar nenhum STM8 conectado a ela.
Créditos
Bruno Montanari - implementação do protocolo SWIM no MCU do ST-LINKFernando Caldeira - programa que converte os arquivos .s19 ou .srec no vetor hex no código.
Comentários
Postar um comentário