Como desenvolvo para a descoberta do STM32 no Linux? [fechadas]

26

Eu tenho uma placa de descoberta STM32 e gostaria de poder programá-la no Linux.

Qual é a maneira mais fácil de fazer isso?

Gordon Williams
fonte
Instalei o Codesourcery no LinuxhUbuntu e um pouco empilhado: PATH está ok, mas o programa não aparece no dasboard ou no centro de software. Talvez seja o Ubuntu que eu mudaria de alguma forma, mas não sei como. Se você tem uma ideia, escreva. Obrigado. Tom
Tom Rert 22/03
11
@ TomRitzmann PeterJ está certo, não use respostas para fazer perguntas. Além disso, os problemas de software estão fora de tópico aqui, o SuperUser é o lugar certo.
clabacchio

Respostas:

12

Uma maneira fácil de programar e depurar a placa STM32 Discovery (ou qualquer STM32 usando um programador ST-Link) é usar o projeto 'stlink' https://github.com/texane/stlink (no entanto, o OpenOCD também parece popular)

As placas ST Nucleo também aparecem como um dispositivo flash USB, portanto nem precisam stlink- basta copiar o arquivo para elas.

Existem algumas páginas boas sobre como desenvolver a descoberta do STM32 no Linux, como http://gpio.kaltpost.de/?page_id=131 e http://torrentula.to.funpic.de/2012/03/22/ setup-up-the-stm32f4-arm-development-toolchain / e http://jethomson.wordpress.com/2011/11/17/getting-started-with-the-stm32f4discovery-in-linux/

No entanto, achei o último link o mais útil. Ele mostra como criar projetos STM32 da ST como estão - A única mudança é adicionar o Makefile, que parece ser uma solução perfeita.

Nas versões recentes do Ubuntu, há um pacote que você pode instalar que contém um compilador ARM:

sudo apt-get install gcc-arm-none-eabi

Observe que os processadores são todos um pouco diferentes. Todos STM32F0..4 precisarão de diferentes sinalizadores de compilador e o script do vinculador será ligeiramente diferente para cada um (embora apenas devido aos tamanhos de RAM e Flash alterados).

Editar: se você deseja começar muito rapidamente, também pode consultar http://www.espruino.com . É um intérprete de JavaScript executado no próprio STM32; portanto, depois de instalar o 'stlink' para que você possa piscar na placa, basta baixar uma imagem desse site, piscar e conectar-se a um aplicativo de terminal e iniciar a programação.

Gordon Williams
fonte
Aqui está uma lista de placas de STM32x Descoberta suportadas pelo OpenOCD: github.com/openrisc/openOCD/tree/master/tcl/board (procure por "descoberta" usando seu navegador)
rbaleksandar
8

Se você gosta mais de editores de texto e Makefiles, em vez de usar uma GUI, pode:

  • Instale uma cadeia de ferramentas que fornece arm-none-eabi-gcc. No Archlinux, você precisaria de community / arm-none-eabi-binutils, arm-none-eabi-gcc e arm-none-eabi-newlib (e arm-none-eabi-gdb, se desejar depurar) todos da comunidade repo ou https://launchpad.net/gcc-arm-embedded (que pode ser encontrado no AUR do Archlinux como gcc-arm-none-eabi-bin).
  • Decida, se e qual biblioteca você deseja usar para acessar o hardware. Do alto da minha cabeça, existem três opções comuns:
    1. Nenhum. Você escreve tudo do zero. Não é recomendável para iniciantes.
    2. STM32Cube : lib de CA fornecida pelo próprio ST.
    3. Libopencm3 : uma lib de código aberto que suporta muitos núcleos de córtex-m de diferentes fornecedores.
    4. STM32PLUS : uma biblioteca C ++. No entanto, não posso dizer muito mais sobre isso porque não o testei.
  • Crie ou copie seu primeiro projeto.
    1. Sem uma lib, escreva seu próprio makefile, script de vinculador, código de inicialização e execute um simples makefile. Boa sorte ;)
    2. Com o STM32Cube: Baixe e instale o STM32CubeMX . Uma vez descompactado, o arquivo * .exe é na verdade apenas um arquivo java e você pode executá-lo usando "java -jar filename.exe". A instalação precisa do sudo. Quando terminar, crie um projeto e gere o código para "Truestudio". Isso deve lhe dar um ponto de partida com um script vinculador, código de inicialização, alguma função principal trivial (e um makefile, se bem me lembro). Na verdade, mesmo que você não use a biblioteca STM32Cube, o STM32CubeMX é ótimo para calcular os valores da árvore do relógio e validar se você pode configurar o chip da maneira que pensa.
    3. Com o libopencm3: Obtenha os exemplos do libopencm3 , encontre um exemplo correspondente ao seu quadro e use-o como ponto de partida. Os exemplos devem estar prontos para execução. Basta digitar "make". Em seguida, use esse exemplo como ponto de partida para seu próprio desenvolvimento.
    4. Com o STM32Plus: eu não sei. Desculpe.
  • Leve seu projeto para o conselho. Qualquer uso

    1. O carregador de inicialização serial: stm32flash funciona muito bem.
    2. A porta de depuração: Você pode usar o openocd para conversar com o adaptador de depuração fornecido na placa. O Openocd é ótimo, mas a documentação nem sempre é a melhor. Em caso de dúvida, entre no canal openocd irc. As pessoas lá são muito legais.
  • Codifique em um editor de texto e use ferramentas de linha de comando. Este tutorial fornecerá muitas dicas.

Apreciar

mox
fonte
5

Eclipse , GCC e OpenOCD são uma cadeia de ferramentas. É recomendado pela EMCU-IT e há informações adicionais aqui . Essas páginas também recomendam o uso de um RTOS como o FreeRTOS.org , mas isso depende de você.

E para obter ajuda na compilação dos exemplos do STM32 no Linux, clique aqui . Esse link aponta para um makefile para os exemplos que podem ser chamados com

git clone git://github.com/snowcap-electronics/stm32-examples.git
cd stm32-examples
wget http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32_f105-07_f2xx_usb-host-device_lib.zip
unzip stm32_f105-07_f2xx_usb-host-device_lib.zip

Algumas pequenas correções de código também estão documentadas, mas a maior parte do projeto deve funcionar com

make CROSS_COMPILE=/path/to/arm-2011.03/bin/arm-none-eabi-
embedded.kyle
fonte
11
Obrigado! Eu não tinha visto esses links antes. Estou surpreso que não haja um guia mais definitivo em algum lugar, pois diferentes painéis de descoberta têm sinalizadores de construção sutilmente diferentes.
Gordon Williams
Sim, a ST criou uma placa muito barata e as distribuiu, milhares delas, e o próprio STM32 é um chip incrível, até o F4, mas programá-las é uma grande dor de cabeça. Seus drivers são incrivelmente mal documentados e não são bem nomeados, e não é fácil encontrar uma cadeia de IDE e ferramentas que funcionem bem juntas de graça.
hak8or
1

Eu tive sucesso com https://github.com/JorgeAparicio/bareCortexM (veja também as postagens no blog). Estou convencido de que posso simplesmente dar um passo ao longo do código ou navegar na memória do dispositivo em vez de inserir instruções de depuração no meu código ou adivinhar o que está acontecendo dentro do chip.

O projeto bareCortexM é um modelo Eclipse para desenvolvimento com a série Cortex M, especialmente STM32, em C ++ sem um sistema operacional. Ele está configurado para usar o openocd, gcc e possui scripts para piscar e depurar em vários destinos, incluindo alguns dos painéis de descoberta. Seguindo as instruções e instalando os plug-ins recomendados do Eclipse, pude usar meu STM32VLDISCOVERY no Ubuntu.

Conforme recomendado, eu combinei o modelo eclipse com a mesma biblioteca de modelos libstm32pp C ++ do mesmo autor para o hardware STM32. A libstm32pp fornece uma substituição surpreendentemente completa do CMSIS e dos drivers STM32 frequentemente criticados por um modelo de programação que permite dizer coisas como PB10::setMode(gpio::cr::GP_OPEN_DRAIN_2MHZ)e PINB::setLow()ou PINB::setHigh()quase todas compiladas em linha devido aos modelos C ++. A configuração é muito boa.

joeforker
fonte
Não recomendo mais o bareCortexM não mantido; verifique stm32plus em andybrown.me.uk/wk
joeforker
O problema com esses drivers de dispositivo é que eles são ineficientes. Para drivers de dispositivo adequados de alta velocidade que não desperdiçam ciclos de CPU, você precisa de um RTO abaixo para poder fazer o agendamento adequado.
Martin Martin
0

Talvez fosse útil para alguém: meu pequeno artigo (em russo) e um projeto simples . Tudo no linux e sem coisas desnecessárias como eclipse.

As bibliotecas foram retiradas do site da ST, makefile - de um dos muitos exemplos da GPL na Internet.

Eddy_Em
fonte
0

Aqui está um projeto de modelo pequeno, porém inovador, para o início rápido do uso da placa STM32F0 Discovery no Linux ou em qualquer outro sistema operacional:

https://github.com/dobromyslov/stm32f0-chibios-template

Observe que o projeto usa o ChibiOS - um sistema operacional de código aberto gratuito e de código aberto, para que não seja exatamente uma implementação simples do zero.

Viacheslav Dobromyslov
fonte
0

Eu uso o vim e arm-none-eabi-gcc, juntamente com todas as ferramentas usuais de desenvolvimento Linux. O Linux é, na minha opinião, um ambiente de desenvolvimento superior para o trabalho incorporado de longe. Para depuração, eu uso stlink e arm-none-eabi-gdb.

Martin
fonte
0

Considere a plataforma . Se você estiver familiarizado com a linha de comando, verá que a plataforma facilita consideravelmente o processo de desenvolvimento. pio initpode ser usado para configurar um projeto. pio runaproveita o conjunto de ferramentas para compilar. pio run --target uploadenvia o código para o dispositivo. O Platformio cuida do download dos componentes, bibliotecas, etc. da cadeia de ferramentas, conforme necessário.

dat
fonte