O início mais fácil no STM através de "um local"

Provavelmente, o tempo das guerras religiosas da AVR contra o STM já passou, mas não, não, sim, há surtos de confrontos entre os dois campos. Quase qualquer publicação sobre artesanato AVR definitivamente terá um comentário como "Sim, quanto você pode transar com sua avó, é hora de mudar para o STM", então há uma variação no assunto de preço, número de pernas e temporizadores. Se o STMshcher for mais avançado, certamente haverá uma indicação de que não há DMA no AVR e não haverá, portanto o AVR deve morrer. Por que um simples DMA de termômetro intermitente, uma montanha de temporizadores de 16 bits, 100 pernas e um ADC de 12 bits, normalmente ninguém explica. Por que precisamos de um harvester em um dispositivo que o Tiny13 possa retirar facilmente, que ao mesmo tempo não é carregado nem em um terço de seus recursos, ninguém vai entender. Você só precisa mudar para o STM32, e é isso. Por aqui.

E devo dizer que as pessoas anseiam por novidades. Mas sério, posso tentar? E se você gostar? Aqui está apenas o Manual de Referência do popular STM32F103C8T6, no qual o tablet Blue de 1126 páginas mais maciço se baseia, de alguma forma, ele realmente não tem um "início rápido". Mesmo um utilitário separado, tão odiado pelos anciãos “kalokub”, e que deve ser estudado, o que é o quê. Sim, e tendo mergulhado no Cube, é improvável que comece em 5 minutos, o calçado gerado por ele não é a matéria de leitura mais acessível para a noite, é apenas para entrar na testa, sobre a qual nem todo mundo pode falar por lá.

Inúmeros artigos, semelhantes a este, sobre o início rápido e fácil no STM merecem uma discussão separada. Para todos esses artigos, a princípio fiquei muito confuso com uma circunstância. Em nenhum lugar há uma explicação detalhada do que realmente estamos escrevendo aqui. Um monte de capturas de tela de como criar um projeto e, em seguida, imediatamente uma parede de código, faça assim! E o que há, por que, por que é, de onde obter todas essas palavras aparentemente compreensíveis, ninguém se aprofunda, porque as forças se esgotaram ao escrever um manual sobre a instalação de Cale e Cuba e ao lançar o projeto. Somente após algum tempo, individual para cada um, é que o entendimento do que está acontecendo e por que vem. Por sua vez, proponho uma maneira de começar não do começo, como todo mundo, mas do fim. Agora faremos o oposto, não configuramos o controlador, escrevemos o código e o estreamos, mas continuamos imediatamente para a depuração,e registre nossas ações na forma de código.

Portanto, instalamos o Keil como um ambiente gratuito (até 32 KB de código). Não descreveremos essa ação, ela está na Internet e o passo a passo do instalador deve ser dominado pela pessoa que vai ao STM. Iniciamos o projeto: Projeto-Novo projeto uVision, criamos uma pasta e um arquivo de projeto. A janela de seleção do controlador é aberta, insira 103C8 na pesquisa e concorde com o único modelo selecionado.

Em seguida, chegamos à janela de seleção da biblioteca:



Aqui colocamos três daws: CMSIS-CORE, Inicialização do dispositivo e GPIO do dispositivo. Este conjunto é suficiente para saltar uma perna, acendendo o LED. Então você ainda precisa configurar, você não pode chegar a lugar algum disso. Alt + F7 inicia a janela de configurações localizada Opções do projeto para destino, na guia “Saída”, você precisa marcar a caixa de seleção “Criar arquivo HEX” para criar um arquivo de firmware que enviaremos para o controlador. Em seguida, na guia "Debug", selecionamos o ST-Link, que, de fato, carregará o firmware e será iniciado:



pelo botão "Setting" ao lado da janela de seleção do programador, chegamos à janela "Cortex-M Target Driver Setup", na janela " Download em Flash "coloque uma daw" Redefinir e executar ".

Na árvore do projeto, clique com o botão direito do mouse na pasta "Source Group 1", no assistente que se abre, crie o arquivo main.c, no qual iremos escrever o código em breve. No main.c aberto, clique com o botão direito do mouse na primeira e mais importante inclusão:



Adicione o código que consiste em main e infinito enquanto:

#include "stm32f10x.h"                  // Device header
int main(){
	while(1){
	}
}

Curiosamente, isso é tudo por enquanto, este é um programa pronto e compreensível que compila e carrega corretamente no controlador. Pressionamos F7 e vemos que o firmware foi montado com sucesso, não há erros ou avisos.



A partir deste momento, o controlador está totalmente acessível para nós, podemos inseri-lo sob a linha de depuração e girar em todas as direções, e ele responderá.

As teclas Ctrl + F5 nos levam à depuração, e o botão “System Viewer Windows” permite iniciar as janelas para controlar os registros de registro e controlar as pernas do GPIO.



Além disso, sugiro que você ainda use o Manual de Referência, especialmente porque você nem precisa baixá-lo, ele estará disponível clicando na guia "Livros" do menu "Visualizar":



Agora, proponho usar o seguinte raciocínio. Pela pinagem no Blue Tablet, pode-se ver que o LED trava na parte da porta 13. Vários recursos e discussões da Internet sempre mencionam que, antes de você fazer algo no STM, é necessário ativar algo, caso contrário, acerte o relógio. Sem mais delongas, escrevemos na caixa de pesquisa do leitor de pdf o que precisamos: habilitar a porta C: “PORT C CLOCK ENABLE”. Entramos na figura a seguir:



A partir disso, podemos concluir que o relógio da porta C está ativado no registro IOPCEN. Com esse conhecimento, vamos para a guia RCC no modo de depuração e inserimos esse nome na barra de pesquisa:



Marque a caixa de seleção necessária com uma marca de seleção e, a partir deste momento, consideramos a porta C ativada.

Agora, lembrando-se do AVR de longa duração, procuraremos a configuração do pino real. Para que funcione, é necessário explicar exatamente o que queremos dele. E queremos pular com o pé número 13 da porta C, para isso precisamos definir o modo de operação. Na barra de pesquisa do Manual do Referense, dirigimos em "Configuração de bit de porta", que expressa nosso desejo de ler onde as configurações de perna estão ocultas. A pesquisa nos leva a uma tabela da qual se segue que, para atribuir uma perna como uma saída, é necessário configurar os registros MODE e CNF:



Na tabela No. 20, é claro que, para atribuir uma perna como uma saída Push-Pull, é necessário redefinir os registros CNF0 e CNF1 e o estado do par MODE0 e MODE1 estão descritos na tabela No. 21, selecionarei a opção superior, até 10MHz, MODE0 = 1, MODE1 = 0. É o que farei na janela GPIOC para os registros CNF13 e MODE13



Agora configuramos o relógio e o modo de operação da porta. É hora de descobrir exatamente como pular uma perna. Em inglês, defina o bit da porta como "Port bit set" e procuraremos esta frase no manual: A



pesquisa nos leva a uma página com uma tabela, que mostra claramente que o registro BSRR, composto por pares BS e BR, é responsável por definir o status da perna da porta , Bit set e Bit reset, respectivamente. Encontramos esses registros na janela GPIOC no modo de depuração e desfrutamos do controle da perna número 13 diretamente, cutucando gralhas com o mouse nas caixas de seleção correspondentes:



Um LED no quadro azul está pendurado entre a perna e o VCC, controlando-o de volta ao nome do registro. O Bit Set (registro BS13) o apaga e o Bit Reset (registro BR13) o acende. Estes são registros de operações atômicas, são redefinidos após definir a caixa de seleção. É possível controlar o pé através do registrador ODR (seção 9.2.4 Registrador de dados de saída da porta (GPIOx_ODR) no manual de referência), mostra claramente o que leva à instalação e redefinição da gralha.



Um LED verde e verde esmaecido indica que tudo está funcionando corretamente. Resta apenas escrever tudo isso na forma de código no arquivo main.c. É aqui que as próprias passas aparecem, o que distingue esse método de compreender o controlador STM através da depuração dos outros com os quais toda a Internet está cheia. Sugiro apenas reescrever o que vemos na janela de depuração no código. Exemplo:



Defina o modo de operação da porta e ative o relógio;



Eles ligaram a perna do porto, esperaram, desligaram e assim por diante:

#include "stm32f10x.h"                  // Device header

int main(){
	RCC->APB2ENR=0x00000010;			//  
	GPIOC->CRH=0x44144444;			//   Push-Pull  10MHz
	int i;								//     / 
	while(1){
		GPIOC->ODR=0x00002000;		//  LED,      
		i=2000000;					//    
		while (i) i--;					// 
		GPIOC->ODR=0x00000000;		//  LED
		i=2000000;					//  
		while (i) i--;					
	}
}


Obviamente, esse método está longe de ser o melhor e não está correto, mas, na minha opinião, o mais compreensível e simples. Além disso, ele começa a trabalhar com uma folha de dados (manual de referência) e não se assusta, como ler mana e escrever códigos de página de várias páginas para o Blink. Sim, não há camadas de abstrações, muita coisa foi perdida, mas acho que você pode perdoar isso pelo começo elementar. A leitura de mana e o trabalho correto com os registros é que agora temos um LED piscando e basicamente entendemos como e o que fizemos e, mais importante, de onde vieram todas essas abreviações. Se me mostrassem essa maneira de estudar o STM antes, talvez eu não tivesse coletado mais de 9.000 programadores diferentes para o AVR nos quais não havia depuração, mas teria adotado o Cortex imediatamente. De fato, no AVR não há depuração inteligível e acessível, mas, de qualquer maneira, é muito cedo para esquecer o Tiny13. Ela tira suas tarefas.

All Articles