Как сделать частотный генератор на GPIO Arduino?
Т.к. DAC в этом камне нет, то можно реализовать это на PWM с дальнейшим сглаживанием.
PWM может работать автоматически после инициализации, без участия программы. Но чтобы получить сигнал определённой формы, придётся ему периодически менять значения. Т.е. потребуется пара таймеров, один для PWM, второй для шагов. Синус, и другие не линейные штуки, можно делать по заранее заготовленной таблице, обходя её циклически, экономя вычислительные ресурсы.
А вообще, function signal generator или waveform generator погуглить, реализаций много, в частности на AVR.
P.S. Если подойдёт просто меандр, то вообще достаточно одного таймера в режиме PWM.
Можно использовать таймер-счётчик в режиме CTC с переключением вывода OCnA по совпадению с регистром OCRnA. Для таймера-счётчика 1 Arduino Leonardo это вывод Digital 9.#include <ve_avr.h>  // Используется библиотека VE_AVR

#define PIN_OC1A  9 // Пин Digital 9 - OC1A

void setup() {
  DEV_TIMER1.setWaveGenMode(TimerW::CTC_OCRA);
  DEV_TIMER1.setClockSelect(TimerW::Prescaler_1); // PR = 1
  DEV_TIMER1.setOutputCompareA(39);               // 16e6/(2*PR*(1+39)) = 200 kHz
  DEV_TIMER1.setCompOutModeA(TimerW::Toggle);
  pinMode(PIN_OC1A, OUTPUT);
}

void loop()
{
}
Библиотеку VE_AVR можно скачать здесь.