Há pouco tempo, ele ajudou no desenvolvimento de microcontroladores de uma empresa pouco conhecida - Milander. O ambiente oficial de desenvolvimento Keil. Eu não gostei, mas o processador é baseado na arquitetura de outra empresa ARM pouco conhecida, o que significa que existe um compilador gcc para ele. E onde houver gcc, o QtCreator também pode ser usado como um IDE.

1. Introdução
Inicialmente, a tarefa era bastante simples. Encontre os arquivos necessários para criar o projeto. Pegue um projeto já realizado sob stm32f407 e processe-o com um arquivo. No entanto, durante a implementação de um plano tão simples, havia um desejo de fazer um projeto um pouco mais interessante do que se pensava inicialmente.
Preparação
Primeiro, você precisa fazer o download do compilador e depurador para microcontroladores com base nos núcleos da série Cortex-M. A versão mais recente está aqui
[1] . Você também precisará do QtCreator, os não preguiçosos podem compilar a partir da fonte, os preguiçosos podem chegar aqui
[2] . Também precisamos do openocd para piscar e depurar o microcontrolador.
[3] Compilador GCC para Cortex-M no site da ARM
[9]Instale o software especificado, bem como todas as dependências, conforme necessário. Em seguida, procedemos à configuração do ambiente.
Definir o QtCreator'a nas imagensSe não estiver ativado, ative o suporte bare metal em Ajuda -> Sobre módulos
Adicionar compiladores
g ++

gcc

Adicionar depurador gdb

Criamos um perfil de depuração openocd; essa
não é
uma grande muleta. O caminho para o arquivo de configuração deve ser especificado como absoluto. O arquivo para cada microcontrolador é diferente, isso introduz certos inconvenientes.

Definir metal nu

E colocar tudo em um conjunto

Bibliotecas de microcontroladores
Uma pesquisa superficial no site de Milander não produziu um conjunto oficial de bibliotecas para trabalhar com periféricos e o núcleo do microcontrolador. A montagem suporta gcc e está localizada no github
[4] . A montagem foi para o projeto finalizado do stm32f407 com bastante facilidade e, depois de consertá-lo em alguns lugares, já estava feliz em exibir o microcontrolador. Editando o arquivo de configuração do openocd e agora tudo está piscando. Um pouco mais de trabalho de serralheiro e depuração já está funcionando. E parece que isso é tudo - uma vitória fácil. Mas as bibliotecas suportam vários microcontroladores. E microcontroladores em núcleos diferentes também usam bibliotecas periféricas diferentes. Imediatamente surgiu a idéia de criar um projeto para que você possa selecionar facilmente o microcontrolador desejado, e o próprio ambiente selecionará as bibliotecas e periféricos principais necessários. Essa ideia me veio na época em que eu dominei o stm32f407. A oportunidade de realizar uma idéia tão interessante não poderia ser desperdiçada.
Algumas noites escolhendo nas bibliotecas e qbs
[5] deram um resultado positivo. Foi possível configurar a compilação para os seguintes microcontroladores: MDR1901VC1T (19011), MDR1986VE1T (1986 BE1T), MDR1986VE3 (1986 BE3), MDR1986BE4 (1986 BE4x), MDR1986VE8T (1986 BE8x), MDR1986VE9x (1986). Embora a descrição das bibliotecas de origem não suportasse MDR1986VE8T, havia uma parte dos arquivos da biblioteca principal e da biblioteca periférica. Alguns dos arquivos de cabeçalho encontrados no repositório ARM estavam ausentes
[6] .
Projeto final
O resultado foi um modelo bastante modesto que permite escrever projetos para vários microcontroladores. Encontra o modelo no github
[7] . A biblioteca de origem sofreu várias alterações cosméticas. Embora eu quisesse manter a compatibilidade com o projeto original, tive que forçar
[8] e perder a compatibilidade, mas essa é uma taxa por versatilidade. Você pode baixar o projeto da seguinte maneira.
git clone https://github.com/WicRus/emdr1986x-std-per-lib-qbs.git --recursive
Você também pode clonar um projeto diretamente do QtCreator, especificando o endereço do repositório e marcando Recursivamente.
Reprodução
O principal resultado é um modelo universal com suporte para vários microcontroladores com várias bibliotecas principais e periféricas. No entanto, houve vários pontos que devem ser observados:
- Foi possível verificar o firmware e a depuração apenas no MDR1986VE1T.
- Os arquivos de configuração openocd de destino foram localizados apenas para MDR1986VE1T e MDR1986VE9x. Para o restante dos controladores, você precisa levar ou escrever em algum lugar.
- As bibliotecas para o MDR1986VE8T foram compiladas sem muita compreensão do problema. É necessário verificar a operação correta.
- As bibliotecas de origem foram alteradas significativamente. Possíveis problemas de mesclagem.
- Ao criar para MDR1901VC1T, MDR1986BE4, MDR1986VE9x, um aviso é emitido sobre bibliotecas de kernel desatualizadas. É necessário atualizar as bibliotecas do kernel por analogia com o MDR1986VE8T e, em seguida, verifique a operação correta.
- Recurso de criação de configuração do openocd. Para cada tipo individual de microcontrolador, você pode precisar de um kit de compilação separado no QtCreator.
ReferênciasCuidado, os links são abertos nesta janela.
0. A base para o site KDPV Milander1. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads2. https://www.qt.io/download-qt-installer3. http://openocd.org4. https://github.com/eldarkg/emdr1986x-std-per-lib5. https://doc.qt.io/qbs/6. https://github.com/ARM-software/CMSIS_57. https://github.com/WicRus/emdr1986x-std-per-lib-qbs8. https://github.com/WicRus/emdr1986x-std-per-lib9. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloadsHistórico de edições.17/09/19 Adicionado um link para o GNU Arm Embedded Toolchain.