
Uma breve história sobre o rake encontrada no caminho de conhecer o ARM no exemplo de stm32f103c8t6 e stm32l151rct6.
Meu conhecimento com microcontroladores começou com o AVR. Eu trabalhei neles por um bom tempo, indo das placas com faixas riscadas e montador no AtmelStudio4 para loot normal e makefiles auto-escritos para trabalhar no bloco de notas (no meu caso, KWrite) e na linha de comando.
Mas é hora de enfiar uma vara em seus irmãos mais velhos - ARM. A escolha de uma família específica foi longa e passiva (porque não havia necessidade direta, então eu não tinha pressa), mas no final acabou no stm32f1, pois era talvez o mais popular. Comprar um programador, quadro de depuração como o Discovery ou pílula azul? O que você é, eu sou um mestre em câmeras AVR! Qualquer placa pode ser fabricada com LUT, e mesmo quando você precisar, sem muito kit corporal. Portanto, compro um stm32f103c8t6 e começo a xamã com o traço do quadro. Do que eu preciso? Pelo menos duas portas devem ser trazidas para os pentes ... oops, é inconveniente exibir as portas completamente. Oh, bem, vou ter 8 pernas cada - do porto A, os mais jovens (0-7), do B, os mais velhos (8-15). Ainda assim, é claro, LEDs e botões, como sem indicação e controle. Aqui está o que me surpreende nas placas de depuração concluídas: a falta de pelo menos 2-3 LEDs e 1-2 botões que não entrariam em conflito com nada. Como eles imaginam a depuração? Sob os botões PA8, o próprio PA9 é solicitado, eles estão convenientemente localizados. USB, jumpers BOOT0, BOOT1 e um conector de bateria para relógios também são úteis. E conectores para quartzo, para que fique muito bonito (nunca usei os conectores para quartzo posteriormente). Para fonte de alimentação, o controlador não precisa mais que 3,6 V e, com USB, vem 5 V. É necessário instalar um estabilizador. Eu li muito como as pessoas escolhem estabilizadores com queda de tensão baixa ... por quê? A diferença é de um volts e meio, mas há carvalho 78l33 suficiente. E agora o conector JTAG. O conector de programação da Atmel tinha um ISP10 ou ISP6 padrão. Provavelmente o JTAG também é uma coisa padrão. Acontece que sim ... mas apenas para um único fabricante ou mesmo um dispositivo. Observamos o conector no st-link: bonito, 10 pinos. Olhamos para algum programador do AVR: oops, já com 20 pinos. Procuramos outro lugar: conectores mais incompatíveis com o deus dos padrões incompatíveis. Bem, se assim for, vamos inventar os nossos. Se alguma coisa, o adaptador entre eles não será mais complicado que o adaptador ISP-6 para ISP-10. Tudo parece estar pronto, você pode fazer uma taxa. Como se viu, um passo de 0,5 mm é bastante possível em um nível amador, nem precisei pintar com um marcador.
Agora, como piscar. Uma vez que existe USB, provavelmente é capaz de fazê-lo. Eu li a folha de dados - sim, não é possível via USB, mas via UART1. Opa, esqueci de retirá-lo. Além disso, também entra em conflito com o botão, com o que fica pendurado no PA9. Bem, vou exibir nas postagens, mas ainda há mais um botão. Um pouco de xamanismo e o quadro está pronto e até definido em stm32flash.


Parece ser resolvido com ferro, é hora de passar para o código. Depois de ler vários artigos na Internet, encontrei um arquivo pronto em gcc-arm-none-eabi. Vou descobrir exatamente como definir a sequência de montagem mais tarde. Até agora, estou dando oi mundos em botões e LEDs. Como esse é meu primeiro conhecimento dessa família, nenhum invólucro como o HAL é apenas um trabalho manual com registros. No entanto, esta é uma abordagem completamente natural, ao que me parece, não se poderia mencionar. Me incomoda um pouco o tempo todo puxar a força e o BOOT0 para o quadro, mas tudo bem, algum dia farei um programador JTAG. Curiosamente, eu não pisei no rake com o relógio desligado. Ele se lembrou de sua juventude quando escreveu o processamento em 3D no TurboPascal. Aqui eu tenho uma tela no ili9341 do raspberry pi e um controlador em até 72 MHz. Foi o que aconteceu - até 200 pontos por modelo e 11 fps. Obviamente, todas as matrizes de transformação são contadas em números de ponto fixo.
Em algum momento, eu queria criar um dispositivo vestível para funcionar por muito tempo com a energia da bateria. Olhei para a folha de dados e fiquei chateado: o famoso BRAÇO no consumo é muitas vezes pior que o mesmo AVR-ok! Se o último (cutucado no primeiro controlador que acabou por ser ATmega88p) tivesse um consumo de 0,8 μA, levando em consideração as horas, o primeiro mesmo no modo de economia mais econômico * apresentaria 25 μA ± 1,4 μA no RTC. Isso não é bom. No entanto, stm32f103 não está posicionado como uma série econômica. Eu olho para o site da STmicroelectronics para outras séries de controladores e seleciono a série stm32l1: além de consumir cerca de 1 μA, há também um sensor capacitivo e um controlador LCD. É verdade que a frequência máxima é mais baixa, apenas 36 MHz (ou 24 MHz se o USB for usado), mas vou sobreviver de alguma forma. Foi decidido: estou usando alguns stm32l151rct6 a partir de 32 KB de RAM (há também 256 KB de flash, mas mal consigo imaginar como ele pode ser martelado. A menos que com arquivos de dados ou merda absolutamente loucos).
- ) não confunda os modos de suspensão (suspensão, parada) e desligamento (espera)
Em paralelo, eu faço o programador st-link v2 a partir do stm32f103 de reposição, simplesmente porque estou cansado de mexer no BOOT0 e na energia, e é mais rápido. No entanto, deixarei a programação do UART - você nunca sabe o que. Havia também um pouco de xamanismo, mas nada de extraordinário. A menos que encontrar a linha de comando para o openocd seja um problema. Para as gerações futuras vou deixá-la:
openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg -c "init" -c "reset halt" -c "flash write_image erase "$(firmware).bin" 0x08000000" -c "reset run" -c "exit"
Para stm32l151, é necessário, é claro, corrigir o destino para "target / stm32l1.cfg"


Vou avançar um pouco na cronologia, mas não para voltar. Senhores, não economize na espessura da PCB! Ou pelo menos adicione adereços ou não use componentes smd. Aconteceu que, na placa do programador, forneci apenas dois orifícios de montagem em locais aleatórios. E os lugares estavam bem longe do conector JTAG. E depois de algum tempo, notei que o programador é instável. Isso funciona, então não, então através do UART você precisa apagar a "vítima" e buscá-la. Aconteceu que o resistor vindo da saída do controlador para o conector quebrou. Ele apenas caiu do bloco de contato do corpo. Eu soldei o resistor. Então ele soldou o resto. Então ele percebeu que mesmo aquela pequena deformação da placa que surgia durante o arrancamento do cabo era suficiente para os componentes infelizes. Como resultado, coloquei um backup ao lado do conector. Enquanto segura.
Como o leitor já adivinhou, a programação também está em um editor de texto, enquanto a compilação e o firmware estão no console. Naturalmente, a compra de uma placa de depuração para l151 não me inspirou mais do que qualquer IDE. Esfregando os traços deixados pelo rake deixados pelo primeiro quadro, crio o segundo (contando o programador como terceiro, mas ainda não é um quadro de depuração). Como eu depurava um dispositivo com eficiência de energia, preciso me preocupar com energia. Não vou trocar o estabilizador 78l33, mas rasguei sua saída com um jumper para poder cutucá-lo com um amperímetro (espero que seja o mesmo para um microamperímetro, mas pronto). Deixe os pentes iguais aos da placa anterior - compatibilidade! Bem, alguns LEDs e botões, é claro. O rake com UART1 brilha de maneira convidativa, mas eu ainda coloco o conector e não o coloco na testa. Claro, eu já tenho JTAG, mas o seguro não vai doer. Assim como o anterior (e a placa do programador também), foi possível separar de um lado, mesmo que não haja muitos jumpers.
Mas quando o controlador foi selado, surgiu um problema. De alguma forma, eu acreditava ingenuamente que deveria haver uma chave no corpo do microcircuito indicando a primeira perna. Quem esperaria que o ST bem-feito fizesse DUAS teclas, simetricamente. Então, de que lado a solda agora? Pensando, decidi que essas não eram chaves, mas aprofundamentos tecnológicos. Você nunca sabe, por posicionar o chip na fabricação, por exemplo. Ou pressione a base para encher de plástico. Então você precisa navegar pela inscrição. É lógico que a inscrição seja legível se o microcircuito estiver posicionado “de maneira padrão”, ou seja, quando a primeira perna estiver no canto superior esquerdo. Então ele começou a soldar. Ou um defeito da LUT, ou mãos tortas, mas o microcircuito foi soldado de maneira torta, notei a tempo antes de soldá-lo completamente. Não importa, existe uma maneira antiga de soldar milípedes usando uma lâmina de barbear: não é umedecido pela solda e é fino o suficiente para não dobrar muito. Descobriu-se que as mãos ainda não são retas o suficiente, porque as pernas estão dobradas. Mas não para cima, mas para os lados, bem, pelo menos não muito bem, e eles conseguiram endireitá-los. A segunda tentativa de solda já estava sob o microscópio, mas antes disso eu decidi corrigir as pernas. E um deles parou. Do que eles são feitos, que você não pode dobrar e dobrar uma vez? Os componentes de saída não têm esse problema. Bem, é isso, acho que o chip do casamento terá que soldar outro. Mas de repente isso não é uma perna crítica? Bem, uma conclusão de uso geral ou uma das refeições. Até agora eu selei sem ele, e lá será visto. Dessa vez, consegui soldar de maneira uniforme, apesar de a perna entrar no I2C, com a qual eu queria me divertir, mas pelo menos não em conectores vitais como USB, JTAG, UART ou BOOT. Eu conecto - ele não funciona, os programadores não vêem o quadro. Por algum tempo, o xamã com pernas de solda, mas isso não ajuda. Uma olhada na folha de dados se depara com uma foto do controlador localizado em algum lugar no porão do documento. Veja como você pode criar a inscrição BOKOM ?! Ou seja, se você girar o controlador para que a inscrição seja lida, a primeira perna estará no canto inferior esquerdo. Ao longo do caminho, descobriu-se que um dos "recantos tecnológicos" ainda é a chave. É verdade que não explica como diferenciá-lo de simétrico ... Bem, pelo menos alguma pista. Soldo o controlador com um secador de cabelo para não tirar as conclusões e, desta vez, soldo de lado. A saída interrompida vai exatamente para a saída TX do UART1, ou seja, para o conector de programação e depuração. Isso é completamente ruim, mas antes de mudar o controlador, você deve pelo menos garantir que, com a orientação, imaginei que, ao soldar para viver, não o mate com uma conexão incorreta. Eu conecto o programador - funciona. Viva. Restam poucas coisas - solde os conectores, diodos e outros chicotes. Os comentários sugeriram outra maneira - tocar a terra: eles geralmente estão conectados dentro do gabinete e não estão localizados completamente simétricos. É verdade que, dado o passo das conclusões, pode ser difícil chegar às conclusões certas. Seja como for, esta é a maneira mais confiável.
Não quero trabalhar com o controlador sem o UART1 e é ainda pior do que agora. E se isso acontecer, tudo muda da mesma forma, então eu decido interpretar um cirurgião e transformar o controlador em uma perna protética do cabelo do MGTF. Na mão está uma boa cola eletricamente condutora, com a qual os cabelos grudam decisivamente na plataforma no corpo do chip. A cola que colou nas pernas vizinhas é cruelmente removida com um bisturi. E o que você quer entrar na plataforma de meio milímetro e não nas pernas salientes adjacentes? Eu verifico - funciona. Até cair, e para não cair mais tarde, despeje o cianoacrilato.
Talvez seja assim que eu usaria essa prancha se a perna não tivesse caído novamente. E é coberto com cola. No entanto, é bastante macio e cortado com um bisturi, por isso é limpo com sucesso. Mas, por alguma razão, não quero usar o mesmo adesivo eletricamente condutor pela segunda vez. Vou tentar soldar a perna. A ponta usual do ferro de solda não se arrastou para dentro dele, mas o cone foi incluído no kit (na verdade, o cone era originalmente o único, mas devido ao seu inconveniente óbvio, foi substituído pelo habitual, com um afiado em forma de cunha), que se arrasta completamente para dentro. Curiosamente, a “operação de transplante” foi bem-sucedida e a perna funcionou como deveria (uma fotografia em close da perna no KDPV).


Então, o ferro está pronto, é hora de ir para o código. Seria bom encontrar um exemplo pronto em gcc e na biblioteca CMSIS. O que é melhor para isso do que o site oficial do fabricante? Como se viu, a STmicroelectronics não compartilha do meu otimismo. O fato de a navegação no site ser feita através de um local indecente já é familiar, agora é difícil encontrar um site feito por pessoas e pessoas. Mas eles não permitem que nada baixe do site! Talvez eles permitissem isso após o registro, mas antes disso eu não tinha o desejo de me registrar em nenhum lugar, e depois de uma atitude com relação aos desenvolvedores, ainda mais. Por que diabos você precisa do meu correio ou o que exige lá? Coletar dados pessoais, enviar spam? Atravesse a floresta, e eu a encontrarei em domínio público! A propósito, fiquei um pouco surpreso que o pacote correspondente não estivesse no repositório, mas talvez o ST tenha apresentado algum tipo de hemorróida licenciada. Portanto, envio os raios da diarréia aos profissionais de marketing que criaram essa política e também a um site desconfortável.
Seja como for, a biblioteca foi perfeitamente encontrada na Internet (não darei links, você nunca sabe o que acontecerá com o site). Uma alternativa é fazer o download do ambiente de desenvolvimento ou do CubeMX, onde essas bibliotecas estão incorporadas. É verdade que baixá-los do site oficial é igualmente impossível, por isso estamos vendo sites de terceiros e instalando-os em uma máquina virtual, apenas no caso "se algo acontecer".
Nós descobrimos o ferro e os tipos também. É hora de finalmente lidar com o controlador. A primeira surpresa estava esperando ao tentar usar código de terceiros no Discovery. Eles usaram o controlador stm32l152, que à primeira vista é quase o mesmo que o stm32l151 que eu instalei. Além de pequenas diferenças, o módulo LCD não foi instalado no controlador "meu". Um pouco decepcionante, mas ainda não planejei usá-lo. Embora essa diferença pudesse ter sido mais claramente distinguida do que uma nota de rodapé na folha de dados. A propósito, em uma folha de dados, neste caso, é recomendável conectar o pino VLCD à fonte de alimentação. Na minha foto, o resistor de 0 ohm correspondente não é soldado, mas na realidade eu o instalei. Sem ele, também funciona, mas não sobrecarrega as conexões internas. O comportamento do relógio em tempo real acabou sendo mais interessante. Teimosamente, não queriam trabalhar e, na Internet, escrevem simplesmente "faça, faça, funciona". Mas isso não funciona. Em alguns lugares, no entanto, foram mencionados "problemas conhecidos com o RTC nesta série". Seja como for, o relógio ainda termina, embora apenas no gerador RC incorporado. As tentativas de bloquear o quartzo do relógio levaram à espera interminável do bit de prontidão do LSE. Tentei verificar se as pernas do microcircuito haviam caído dos trilhos no quadro e puxei-as no modo GPIO normal. O quartzo de alta frequência caiu. WTF ?! Em geral, esses dois quartzo não querem trabalhar juntos, mas pelo menos separadamente, eles funcionam pelo menos.
E então imaginei: a supercola, que foi preenchida com metade do controlador (é líquida, você não pode aplicá-la com precisão, e quem teria pensado ...) causa vazamento e o quartzo interfere em suas pontas. Bem, não é difícil raspar a cola do lado de fora, mas afinal ela fica entorpecida mesmo sob o fundo do microcircuito. E se houver vazamentos suficientes para o quartzo, isso afetará o consumo. Eu estou procurando no Google, que as pessoas removem cianoacrilato. Oferece água morna (o que ???) e sulfóxido de dimetilo. Como não acredito em água morna, compro DMSO. Depois de mais de uma hora encontrando uma gota de produto químico na superfície da cola, não percebi a diferença. Mas eles perceberam o quartzo e começaram a trabalhar mais ou menos normalmente (eu me pergunto por quê? O Dimexide substituiu a umidade absorvida pela cola?). No entanto, isso não me convenceu, e os restos de cola ainda são uma desgraça ... por nada que esteja na parte de baixo do quadro e não seja particularmente visível. A propósito, a água quente que lavei com dimexide não afetou a cola (não estou surpresa). Descobri que existe um removedor de cola, no mesmo tubo da própria cola, apenas em roxo. Bem, pelo menos deve funcionar! Como se viu, ele pode e funciona, mas sua consistência se assemelha a creme de leite e simplesmente não se encaixa no microcircuito. Bem, qual é a utilidade de você, borracha ?! Lá fora, eu posso limpar. Última chance: a acetona é raramente mencionada. Sinto um pouco de medo pelas peças de plástico, mas é fácil substituí-las. Despejo acetona em uma jarra de vidro, jogo uma tábua lá e deixo durante a noite. Na manhã seguinte, verificou-se que a acetona realmente funciona, e como! Não havia vestígios de cola. Além disso, o empurrador de um dos botões se dissolveu. Curiosamente, o segundo sobrevivido, provavelmente, foi feito de plástico mais estável. Fiquei um pouco surpreso que o outro plástico permanecesse intocado, até as inscrições sobreviveram. Bem, excelente, mas o botão pode ser substituído.
Agora, conseguimos iniciar o RTC a partir do relógio de quartzo, tocar no modo de suspensão e nos comunicar com outros periféricos. E também, para ficar completamente tímido, ele aplicou assinaturas ao quadro. Mas não com um marcador (de repente banhar-se novamente em solventes?) Mas arranhado com um bisturi. Durante séculos!
Bem, para as gerações futuras, deixarei exemplos de código para os dois controladores, além de bibliotecas, makefiles e muito mais. Resta apenas instalar o gcc-arm-none-eabi, openocd, stm32flash e outros ninharias.
stm32f103
stm32l151
Nos comentários, eles foram aconselhados várias vezes a não realizar a LUT e solicitar a fabricação de placas por profissionais. Para prototipagem, como aqui - não vejo razão. Outra coisa é se você precisar de uma placa multicamada, ou de uma etapa ainda menor, ou de um gabinete BGA, ou de algo que seja difícil de fazer em casa. E, claro, na fabricação da versão final do dispositivo e replicação. Não é bom se o cliente desmontar o estojo soldado de PCB, e descobrirá uma prancha de serra torta sem máscara e com jumpers da MGTF.
Conclusões:
- Você pode criar placas de depuração para si mesmo, se desejar, elas não são piores que as adquiridas. Mas o programador do depurador ainda é melhor comprar se não for muito caro. Obviamente, você pode fazê-lo, mas não alterará o esquema e, nesse caso, não será melhor que a compra. Mais barato, provavelmente também. A menos que o controlador supérfluo permaneça ou com um problema de entrega.
- Não se esqueça do conector de programação de backup UART1, bem, ao mesmo tempo, os jumpers BOOT0, BOOT1. Além da programação real, é bastante conveniente depurar um programa usando o UART.
- Existem duas chaves no gabinete do LQFP64, uma das quais é falsa. Você terá que navegar até a inscrição para olhar com os pés para a esquerda.
- A soldagem de componentes com um pequeno passo é feita apenas sob um microscópio. Caso contrário, é difícil determinar se tudo desapareceu e se há "ranho". Bem, seja em equipamentos "profissionais", como um secador de cabelo especial, pasta de solda, etc. Não sei aqui, estou escrevendo sobre tecnologia amadora.
- Não economize na espessura da placa de circuito impresso. Dobra e isso pode ser suficiente para danificar resistores smd e, provavelmente, capacitores. Isso não é assustador para a saída, e os componentes com conclusões inclinadas (transistores, microcircuitos) provavelmente sobreviverão.
- Fazer conectores para quartzo é uma perda de tempo. Você não irá alterá-los, então apenas solde no quadro.
- Beber uma milípede com uma lâmina de barbear é apenas no caso mais extremo, quando não há secador de cabelo. Caso contrário, o risco de danificá-lo é muito grande.
- Mesmo que a perna tenha caído do microcircuito, ela pode ser restaurada! Mesmo quando o tom é de 0,5 mm. O principal é usar cola de solda, não condutora.
- Nunca encha o chip com cola de cianoacrilato (super cola)! Ele não possui as características elétricas e, de fato, mecânicas apropriadas.
- A acetona é mais adequada para remover supercola de áreas de difícil acesso. Dissolve-se completamente. O principal é garantir que os componentes ao redor não sejam afetados. De lugares não difíceis de alcançar, podem ser removidos mecanicamente.