#include "main.h"

// Definição dos pinos dos potenciômetros
const int potPinFrequency = A0; // Pino para o potenciômetro da frequência
const int potPinDutyCycle = A1; // Pino para o potenciômetro do duty cycle

// Definição dos pinos de saída
const int pwmPin = PB7;  // Substitua conforme o seu layout e o timer escolhido
const int ledPin = PC13; // Pino do LED

// Criação do objeto HardwareTimer. No STM32F103, existem vários timers (TIM1, TIM2, etc.).
// A escolha do timer depende da pinagem e das funções que você pretende utilizar.
HardwareTimer *pwmTimer = new HardwareTimer(TIM1);

void setup() {
  pinMode(potPinFrequency, INPUT);
  pinMode(potPinDutyCycle, INPUT);
  pinMode(ledPin, OUTPUT);
  pinMode(pwmPin, OUTPUT);

  // Configuração inicial do timer para PWM
  pwmTimer->pause(); // Pausa o timer para configuração
  pwmTimer->setMode(1, TIMER_OUTPUT_COMPARE_PWM1, pwmPin); // Canal 1 em modo PWM
  pwmTimer->setOverflow(100, HERTZ_FORMAT); // Define a frequência inicial do PWM
  pwmTimer->refresh(); // Atualiza as configurações do timer
  pwmTimer->resume(); // Inicia o timer com as configurações definidas
}

void loop() {
  // Lendo os valores dos potenciômetros
  int freqValue = analogRead(potPinFrequency);
  int dutyValue = analogRead(potPinDutyCycle);

  // Mapeia o valor da frequência de 100 a 250 Hz
  long frequency = map(freqValue, 0, 1023, 100, 250);
  
  // Mapeia o valor do duty cycle de 0 a 100%
  int dutyCycle = map(dutyValue, 0, 1023, 0, 65535); // PWM resolução de 16 bits

  // Configura o PWM
  pwmTimer->setOverflow(frequency, HERTZ_FORMAT); // Configura a frequência
  pwmTimer->setCaptureCompare(1, dutyCycle, PERCENT_COMPARE_FORMAT); // Configura o duty cycle

  // Controla o LED baseado na frequência
  static unsigned long lastBlink = 0;
  unsigned long blinkRate = 1000 / (frequency / 100); // Frequência do blink proporcional ao PWM

  if (millis() - lastBlink > blinkRate) {
    digitalWrite(ledPin, !digitalRead(ledPin));
    lastBlink = millis();
  }
}
Loading
stm32-bluepill
Loading chip...chip-scope