I have just received my Daisy Seed. I’m very new to STM32, but I used to use NXP MCUXPresso.
I have started a project template for Daisy, using STM32CubeIDE (https://github.com/ThomArmax/DaisyTemplate)
What I did is:
import project from existing ioc file
remove all HAL sources
add libdaisy and DaisySp as submodules
add a build script to build the libs (copied from DaisyExample repository)
create a dummy project, configured to link daisy’s libs and use libdaisy’s linker script
The goal is to have a ready project for STM32CubeIDE, you only have to download, then start to code, without any configuration. Feel free if you have any question, remarks or recommendation
This is working and I’m able to debug using JLink Edu Mini :
There are some differences between clocks used in libDaisy and in this CubeMX project. It shouldn’t matter if used as intended (as libDaisy would be configuring clocks on its own), but anyone using just project file export and not libDaisy should double check them. That said, I haven’t noticed anything that would look like it should create problems.
currently Daisy is clocked at 400Mhz - but that’s just leftover from older MCU revision and they plan to update libDaisy to use full 480Mhz clock. I have been using this higher clock for a week or so and haven’t noticed any issues. As it should be as it’s standard clock for currently used MCU chip revision.
I think that some peripherals are clocked higher in libDaisy (QSPI, FMC). This should be double checked by looking at current libDaisy source, but could be minor performance upgrade for anyone using this Cube project and not libDaisy
If you’re using this project just to generate a patch template, it shouldn’t matter what you’re setting in Cube project. So no, ADC functionality shouldn’t be affected by this.
#include "daisysp.h"
#include "daisy_seed.h"
using namespace daisysp;
using namespace daisy;
#define OSC_COUNT 4
static DaisySeed seed;
static Oscillator osc[OSC_COUNT];
static Parameter freqParam;
const float baseFreq = 440.0;
//AdcChannelConfig adc[1]; //array size for number of ADC channels you need
static void AudioCallback(float *in, float *out, size_t size)
{
float sig;
float freqModifier = seed.adc.GetFloat(0);
for(size_t i = 0; i < size; i += 2)
{
sig = 0;
for (size_t j = 0; j < OSC_COUNT; j++)
{
sig += osc[j].Process();
}
out[i] = sig;// left out
out[i + 1] = sig; // right out
}
}
int main(void)
{
// initialize seed hardware and oscillator daisysp module
float sample_rate;
seed.Configure();
seed.Init();
sample_rate = seed.AudioSampleRate();
for (int i = 0; i < OSC_COUNT; i++)
{
osc[i].Init(sample_rate);
// Set parameters for oscillator
osc[i].SetWaveform(Oscillator::WAVE_SAW);
osc[i].SetFreq(baseFreq + i*5);
osc[i].SetAmp(0.5);
}
//This is our ADC configuration
AdcChannelConfig adc;
//Configure pin 15 as an ADC input. This is where we'll read the knob.
adc.InitSingle(seed.GetPin(15));
//Initialize the adc with the config we just made
seed.adc.Init(&adc, 1);
//Start reading values
seed.adc.Start();
// start callback
seed.StartAudio(AudioCallback);
while(1) { }
}