Introdução Estudo do STM32 ou Gerenciamento inteligente da luz

Pequena introdução


Certa vez, quando entrei no próximo apartamento alugado, encontrei um inconveniente bastante irritante: o interruptor da luz na sala principal estava atrás do armário de parede, que estava preso na parede, e seu rearranjo era impossível porque Demorou muito tempo e esforço. Queria resolver muito este problema e um pensamento me ocorreu: fazer um controle remoto para controlar a iluminação!

Foi com a idéia de criar meu próprio controle remoto para controlar a luz na sala que minha paixão por eletrônicos, microcontroladores e vários dispositivos de rádio começou.

Lista de artigos:
  1. Introdução Estudo do STM32 ou Gerenciamento inteligente da luz
  2. Introdução STM32: Operações de Bit
  3. Introdução STM32: O que são registros? Como trabalhar com eles?


Depois disso, comecei a estudar esse tópico, familiarizar-me com os conceitos básicos de eletrônica, exemplos de dispositivos e aprender como as pessoas implementam esses dispositivos. Depois de procurar informações sobre como começar a estudar microcontroladores, descobri o que é o Arduino, o que eles comem e como trabalhar com eles. A solução fácil parecia muito atraente, porque, até onde eu entendi naquele momento, o código será criado uma ou duas vezes. Mas, concluindo que não sabia o que estava acontecendo dentro do microcontrolador fora da estrutura dos esboços do Arduino, decidi procurar uma opção mais interessante, que implicava um estudo profundo e imersão na selva da tecnologia de microcontroladores.

A empresa em que trabalho tem um departamento de desenvolvimento e decidi entrar em contato com os engenheiros para me orientar no caminho certo e mostrar por onde começar a resolver o meu problema. Eu estava fortemente desencorajado de estudar Arduino e tinha em minhas mãos um lenço verde desconhecido e incompreensível, no qual havia inscrições, cartas, vários componentes eletrônicos.


Tudo isso para mim naquele momento parecia incompreensivelmente complicado, e eu até cheguei a alguma confusão, mas não ia me recusar a implementar a tarefa. Então, familiarizei-me com a família de microcontroladores STM32 e a placa STM32F0-Discovery, depois de estudar quais gostaria de empilhar meu dispositivo para os fins de que preciso.

Para minha grande surpresa, uma comunidade tão grande, artigos, exemplos, vários materiais sobre STM não estavam na mesma abundância que para o Arduino. Obviamente, se você pesquisar, há muitos artigos "para iniciantes" que descrevem como e por onde começar. Mas naquele momento me pareceu que tudo isso é muito complicado, muitos detalhes interessantes para a mente curiosa de um iniciante, as coisas não foram contadas. Embora muitos artigos tenham sido caracterizados como “aprendendo para os menores”, nem sempre era possível alcançar o resultado desejado com a ajuda deles, mesmo com exemplos de código prontos. Por isso, decidi escrever uma pequena série de artigos sobre programação no STM32 à luz da implementação de uma ideia específica: um painel de controle de iluminação na sala.

Por que não o AVR / Arduino?


Antecipando declarações de que seria muito cedo para um iniciante inexperiente se apressar no estudo de um MK tão complexo como o STM32 - vou lhe dizer por que decidi seguir esse caminho sem entrar e me familiarizar com a família de processadores Atmel e nem mesmo considerar o Arduino como uma opção .

Em primeiro lugar, a relação preço-funcional desempenhou um papel decisivo, a diferença é visível mesmo entre um dos MKs mais baratos e mais simples da ST e o ATMega bastante "gordo":


Depois que vi diferenças significativas entre o preço e as capacidades do AVR e do STM32 - decidi que não usaria o AVR no meu desenvolvimento =)

Em segundo lugar, eu já havia tentado determinar o conjunto de habilidades que teria recebido quando chegasse ao resultado desejado. Caso eu decidisse usar o Arduino - seria suficiente copiar as bibliotecas prontas, fazer um esboço e pronto. Mas uma compreensão de como os barramentos digitais funcionam, como um transmissor de rádio funciona, como tudo está configurado e usado - nessa situação, eu nunca teria chegado. Para mim, escolhi o caminho mais difícil e espinhoso, para que, no caminho para alcançar o resultado, eu obtivesse o máximo de experiência e conhecimento.

Em terceiro lugar, qualquer STM32 pode ser substituído por outro STM32, mas com melhores recursos. Além disso, sem alterar o circuito de comutação.

Quarto, as pessoas com desenvolvimento profissional têm mais probabilidade de usar MKs de 32 bits e, na maioria das vezes, são modelos da NXP, Texas Instruments e ST Microelectronics. Sim, e eu poderia, a qualquer momento, procurar meus engenheiros do departamento de desenvolvimento e descobrir como resolver um problema específico e obter conselhos sobre questões que me interessam.

Por que começar a explorar os microcontroladores STM32 com uma placa Discovery?


Como você já entendeu, iniciaremos nosso conhecimento e estudo do microcontrolador STM32, queridos leitores, com o uso da placa Discovery. Por que o Discovery e não seu próprio conselho?

  1. Em qualquer placa Discovery, existe um programador / depurador ST-LINK integrado que se conecta ao computador via USB e pode ser usado para programar o microcontrolador na placa e em dispositivos externos removendo / instalando os jumpers correspondentes. Ou seja, uma vantagem para tudo - também economizamos dinheiro obtendo uma solução dois em um: um microcontrolador e um programador.
  2. As placas de detecção possuem uma fiação completa de todos os pinos diretamente do microcontrolador aos pinos da placa. Por conveniência, coloquei o Discovery nas mesmas duas placas de prototipagem.
  3. 3. Na placa, há sempre um certo número de todos os tipos de dispositivos periféricos, por exemplo, como acelerômetros, microfones, telas, sensores e muitos outros. As placas Discovery diferentes têm opções diferentes de kits corporais. Se alguém estiver interessado, você pode ler mais no site do fabricante.

O que precisamos para o desenvolvimento além do quadro Discovery?


Em nosso trabalho com o conselho da Discovery, precisaremos de várias coisas insubstituíveis que não podemos fazer sem:

  1. Placa de circuito para ver onde, onde e o que está conectado. Você pode pegar o circuito na página do fabricante da placa-mãe na seção Pacote esquemático. Você pode fazer o download dos esquemas rolando uma página um pouco mais abaixo no bloco indicado na figura:
  2. Folha de dados para o nosso microcontrolador para que, a qualquer momento conveniente, você possa ver a pinagem, especificações, parâmetros e outras informações necessárias para o trabalho. No meu caso, é STM32F051R8T6 . O link da folha de dados está no título da página:
  3. Também precisamos do manual de referência em nosso microcontrolador. Este é um documento no qual os métodos e abordagens para trabalhar com o núcleo MK, com seu bloco de relógio, com periféricos etc. são descritos em detalhes. Ele também contém uma descrição de todos os registros MK, todas as opções e configurações do MK e periféricos. Este é provavelmente o arquivo mais importante sem o qual seria muito difícil descobrir como e o que funciona dentro do MK. Você pode fazer o download do arquivo no link na página do microcontrolador:
  4. E, finalmente, precisamos estabelecer um ambiente de desenvolvimento no qual possamos criar programas para o nosso MK e compilar e exibir nossos programas com calma. Ao mesmo tempo, tentei quase todos os IDEs mais populares e decidi pelo Keil uVision 5. Na minha opinião, esse ambiente de desenvolvimento me pareceu o mais conveniente e fácil de aprender. O depurador embutido, as bibliotecas de baixo nível prontas e facilmente conectadas, um grande número de exemplos e uma interface de trabalho convenientemente organizada e espaço IDE foram os fatores decisivos que influenciaram minha escolha. Você pode fazer o download desse IDE no site oficial , mas é necessário um registro simples:. Existe realmente uma pequena restrição no tamanho do firmware baixado em 32kB desde Este IDE é pago. Mas isso será mais que suficiente para nós. Vamos precisar do MDK-Arm:

Vamos começar com a configuração inicial e a preparação do IDE para o trabalho!


Depois de baixar o arquivo de instalação do nosso IDE, você pode prosseguir com a instalação. Siga as instruções do instalador para concluir o processo de instalação. Após a cópia de todos os arquivos necessários para a operação, será exibida uma janela para o instalador do software para o desenvolvimento do Pack Installer . Este instalador contém bibliotecas de nível inferior, Middleware, exemplos de programas que são atualizados e atualizados regularmente.


Para começar a trabalhar com nossa placa, precisamos instalar um número de pacotes necessários para o trabalho e precisamos encontrar um microcontrolador com o qual trabalharemos. Você também pode usar a pesquisa na parte superior da janela. Depois de encontrarmos nosso MK, clique nele na segunda metade da janela e precisamos instalar a seguinte lista de bibliotecas:

  1. Keil :: STM32F0xx_DFP - um pacote de software completo para uma família específica de microcontroladores, incluindo manuais, folhas de dados, arquivos SVD, bibliotecas do fabricante.
  2. ARM :: CMSIS é um pacote do Cortex Microcontroller Software Interface Standard, que inclui um conjunto completo de bibliotecas do ARM para dar suporte ao núcleo do Cortex.
  3. Keil :: ARM_Compiler é o mais recente compilador para ARM.

Após a instalação dos pacotes necessários, você pode prosseguir para configurar o IDE e nosso depurador / programador. Para fazer isso, precisamos abrir a janela principal do Keil e criar um novo projeto.

Para fazer isso, vá para o menu Projeto -> Novo projeto uVision e selecione a pasta onde salvaremos nosso projeto.

Depois que o Keil nos perguntar qual MK será usado no projeto. Selecione o MK desejado e clique em OK .


E uma janela aparecerá novamente, já familiar para nós, na qual podemos conectar os módulos de interesse ao projeto. Para o nosso projeto, precisamos de dois módulos:

  1. O núcleo da biblioteca CMSIS , em que configurações, registram endereços e muito mais do que é necessário para o trabalho do nosso MK, são declarados.
  2. Arquivo de inicialização , responsável pela inicialização do MK na inicialização, pela declaração de vetores e manipuladores de interrupção e muito mais.

Se todas as dependências do plug-in forem atendidas, o gerente nos sinalizará isso em verde:


Depois de pressionar o botão OK, podemos começar a criar nosso projeto.

Para configurar os parâmetros do projeto e configurar o nosso programador, clique com o botão direito do mouse no Destino 1 para abrir o menu correspondente.


No menu principal do projeto, defina o parâmetro Xtal como 8,0 MHz . Este parâmetro é responsável pela frequência de operação do oscilador de quartzo do nosso MK:


Em seguida, vamos configurar o nosso programador / depurador. Na mesma janela, clique na guia Debug e selecione o parâmetro ST-Link Debugger no campo Use e vá para as configurações:


Nas configurações, devemos ver o modelo do nosso ST-Link instalado na placa, o número de série, a versão do HW e o IDCODE MK, que exibiremos:



Por conveniência, você pode configurar o parâmetro responsável pelo fato de o MK ser redefinido automaticamente depois de piscar. Para fazer isso, verifique o campo Redefinir e executar .


Depois disso, você precisa configurar outra opção que permita escrever comentários em russo no código de nossos projetos. Clique no botão Configuração e, no menu que se abre, selecione Russo Windows-1251 no campo Codificação .


Só isso. Nosso IDE e programador estão prontos para começar!

O Keil possui um navegador de projeto conveniente, no qual podemos ver a estrutura do projeto, os materiais de referência necessários para o trabalho, incluindo aqueles que já foram baixados em nosso computador antes (esquema de descoberta, folha de dados, manual de referência), lista funções usadas no projeto e modelos para inserção rápida de diferentes construções de linguagem de uma linguagem de programação.


Renomeie a pasta na estrutura do projeto do Grupo de Origem 1 para App / Usuário , indicando que teremos os arquivos de programa do usuário nesta pasta:


Adicione o arquivo principal do programa através do navegador do projeto executando o comando Adicionar novo item ao grupo "App / Usuário" .


Você deve selecionar Arquivo C (.c) na lista e atribuir o nome main.c :


O arquivo criado será adicionado automaticamente à estrutura do projeto e será aberto na janela principal do programa.

Bem, agora podemos começar a criar nosso programa.

Primeiro de tudo, você precisa conectar o documento do cabeçalho da nossa família de microcontroladores ao nosso arquivo executável. Adicione as seguintes linhas ao arquivo main.c , este programa fará nossos LEDs piscarem alternadamente:

/*      */
#include "stm32f0xx.h"

/*    */
int main(void)
{
	/*     GPIO */
	RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
	
	/*     PC8  PC9  Output*/
	GPIOC ->MODER = 0x50000;
	
	/*  Output type   Push-Pull */
	GPIOC->OTYPER = 0;
	
	/*      Low */
	GPIOC->OSPEEDR = 0;
	
	while(1)
	{
		/*   PC8,  PC9 */
		GPIOC->ODR = 0x100;
		for (int i=0; i<500000; i++){}	//  
					
		/*   PC9,  PC8 */
		GPIOC->ODR = 0x200;
		for (int i=0; i<500000; i++){}	//  
	}		
}

, , . :


Build ( F7) , , :


Load ( F8) :


, .


! STM32 ! , , , Discovery. )

:
  1. STM32 -
  2. STM32:
  3. STM32: ? ?

Source: https://habr.com/ru/post/pt406839/


All Articles