Trabalhando com interrupções no diagrama de circuitos 1 do STM32F103C8T6

Trabalhando com interrupções no STM32F103C8T6 Blue Pill Board Blue Pill Board

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


Neste tutorial, discutirei um dos conceitos importantes de um microcontrolador, o Interrupts. Além disso, mostrarei como usar interrupções no STM32F103C8T6 Blue Pill Board. Usando esse conhecimento sobre interrupções do STM32, é possível implementar um código melhor para o uso eficiente do MCU.

Introdução

O sistema de interrupção é provavelmente um dos recursos importantes em qualquer MCU. STM32F103C8T6 não é exceção. A interrupção em um microcontrolador é um mecanismo de hardware que informa o processador para interromper a execução da instrução atual e executar um conjunto especial de instruções, geralmente de maior prioridade.

No Tutorial de interrupções do Arduino, Discuti bastante sobre interrupções, pesquisas e outros tópicos relacionados. Sugiro que você leia esse tutorial antes de prosseguir, pois a explicação geral das interrupções é mais ou menos a mesma para todos os microcontroladores.

A principal diferença será a implementação real do hardware das interrupções dentro do microcontrolador. Vou falar sobre interrupções no STM32F103C8T6 na próxima seção.

Chegando a esse projeto, implementarei um circuito simples para demonstrar interrupções no STM32F103C8T6 Blue Pill Board, conectando um botão ao MCU e acionando uma interrupção externa ao MCU.

Tipos de interrupção e ISR

Basicamente, as interrupções são classificadas em dois tipos. Eles são:

  • Interrupções de hardware
  • Interrupções de software

Interrupções de hardware

Qualquer interrupção proveniente de uma fonte externa ao núcleo do processador é conhecida como interrupção de hardware. O exemplo mais simples é a interrupção de um botão externo.

Interrupções de software

Caso haja um problema com o programa em execução no MCU, será gerada uma interrupção de software.

Rotina de serviço de interrupção ou manipulador de interrupção

Sempre que ocorre uma interrupção, a ISR (Rotina de Serviço de Interrupção) correspondente e na terminologia do ARM, um Manipulador de Interrupção é chamado. No caso de uma interrupção, a execução da instrução atual é temporariamente interrompida e as instruções no Interrupt Handler são executadas. Após a conclusão, a execução retorna às instruções interrompidas.

Há duas coisas importantes a serem observadas sobre as rotinas de serviço de interrupção. A primeira coisa é que as instruções no ISR devem ser o mínimo possível. A segunda coisa é que você não pode usar funções de bloqueio como delay () no ISR.

Interrupções no STM32F103C8T6

No STM32 Blue Pill ou no STM32F103C8T6 MCU, para ser específico, há uma unidade de hardware especial chamada NVIC (abreviação de Nested Vectored Interrupt Controller), responsável por gerenciar todas as interrupções externas e interrupções periféricas.

Se você se lembra das Interrupções externas do Arduino, ele possui apenas duas interrupções externas, ou seja, INT0 e INT1 nos pinos 2 e 3. da E / S digital. Mas, no caso do STM32F103C8T6, você pode ter até 16 interrupções externas em qualquer pinos GPIO. Tudo o que você precisa fazer é selecionar o pino certo no programa, conforme o projeto do seu circuito.

Como habilitar interrupções no STM32F103C8T6?

Como estamos desenvolvendo os aplicativos STM32 Blue Pill usando o Arduino IDE, podemos usar a mesma sintaxe para configurar interrupções externas no STM32F103C8T6. Isso é feito por uma função especial chamada “attachInterrupt ()” e sua sintaxe é fornecida abaixo:

Como você pode ver na sintaxe acima, a função attachInterrupt () usa três argumentos. Eles são:

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br
  • digitalPinToInterrupt (pino)
  • ISR
  • Modo

No primeiro argumento digitalPinToInterrupt (pin), você deve mencionar o Pin da MCU a partir do qual uma interrupção externa é esperada. Por exemplo, se um botão estiver conectado ao PA0, o argumento será “digitalPinToInterrupt (PA0)”.

O segundo argumento é o nome da função Interrupt Handler ou Interrupt Service Routine (ISR). A função deve ter um tipo de retorno nulo e não deve aceitar argumentos.

Finalmente, o terceiro argumento na função attachInterrupt () é especificar o modo de acionar a interrupção, ou seja, em que ponto da transição do sinal, as interrupções devem ser acionadas. Geralmente, no ambiente do Arduino, esse argumento pode ter qualquer uma das cinco constantes predefinidas, mas no caso do STM32, você tem opções para escolher uma dentre os três valores a seguir.

  • ALTERAR: Acione a interrupção quando houver uma alteração no valor do pino.
  • AUMENTANDO: Acione a interrupção quando o valor do pino aumentar de BAIXO para ALTO.
  • FALLING: Acione a interrupção quando o valor do pino cair de ALTO para BAIXO.

Diagrama de circuito

Agora que vimos um pouco sobre interrupções no MCU STM32F103C8T6, prossigamos com a demonstração do projeto. A imagem a seguir representa um diagrama de circuito simples para interface de um botão com o STM32 MCU e acionar uma interrupção.

Trabalhando com interrupções no diagrama de circuitos 1 do STM32F103C8T6

Componentes Necessários

  • Placa azul da pílula STM32F103C8T6
  • Botão de apertar
  • Conversor USB para UART (se estiver programando via UART)
  • Conexão de fios
  • Cabo USB

Pílula azul de programação STM32 para interrupção de botão

Primeiro, o botão está conectado ao pino PA0. Além disso, o pino PA0 é puxado ALTO com a ajuda de um resistor de 4,7KΩ. A outra extremidade do botão está conectada ao GND.

O código a seguir é usado para ativar a interrupção no pino PA0 e o botão_ISR ajudará a alternar o LED.

int ledPin = PC13;
int buttonPin = PA0;

Leia Também  Intellisaurus - Kit de Robô de Dinossauro - Open Electronics

int ledToggle;
int previousState = HIGH;
unsigned int previousPress = 0;
volátil int buttonFlag;
int buttonDebounce = 20;

configuração nula ()

pinMode (ledPin, OUTPUT);
pinMode (buttonPin, INPUT);
attachInterrupt (digitalPinToInterrupt (buttonPin), button_ISR, CHANGE);

loop vazio ()

if ((millis () – previousPress)> buttonDebounce && buttonFlag)

previousPress = milis ();
if (digitalRead (buttonPin) == BAIXO && previousState == ALTO)

ledToggle =! ledToggle;
digitalWrite (ledPin, ledToggle);
previousState = LOW;

caso contrário, se (digitalRead (buttonPin) == HIGH && previousState == LOW)

previousState = ALTO;

buttonFlag = 0;

botão vazio_ISR ()

buttonFlag = 1;

Conclusão

Um projeto simples para demonstrar o funcionamento de interrupções externas na pílula azul STM32F103C8T6 é implementado aqui. Quando o botão é pressionado, uma interrupção é acionada e o STM32 MCU executa o ISR simples e retorna para alternar o estado do LED.

Blogs Relacionados:

https://holidayservice-tn.com/um-guia-para-submergir-ou-como-proteger-suas-informacoes-na-internet/

https://draincleaningdenverco.com/trabalho-como-tradutor-a-partir-de-casa-pela-internet/

https://clipstudio.com.br/como-ter-um-casamento-de-sucesso/

https://proverasfestas.com.br/seus-grandes-direitos-de-reembolso-de-congelamento-para-entregas-quedas-de-agua-trens-cortes-de-energia-buracos-e-mais/

https://coniferinc.com/estrategias-de-marketing-na-internet-como-aplicar-a-regra-80-20/

https://weeventos.com.br/reconstruir-o-indice-do-mac-os-x-spotlight/

https://testmygeekstuff.com/1o-aniversario-e-impacto-da-troca-ssl-estudo-de-caso-do-blog-parte-10-2/

https://responsibleradio.com/25-melhores-ideias-de-novos-negocios-na-india-com-investimento-baixo-e-medio/

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br