#include "main.h" #include #define POINTS 100 // Количество точек в периоде #define PI 3.1415926 uint16_t DualSineWave[POINTS]; void Calc_Wave(void) { int i = 0; for (;i < POINTS; i++) { // V = sin(t) + 0.5 * sin(2t) // float val = sinf(t) + 0.5f * sinf(2.0f * t); float val = 1365.0 * sinf(2.0*PI / 16.0 * (float)i) + 1365.0; // Масштабируем: диапазон формулы от -1.3 до +1.3 (примерно) // Сдвигаем на +1.5 и умножаем, чтобы влезть в 0..4095 // float scaled = (val + 1.5f) * (4095.0f / 3.0f); // Жесткое ограничение (Clamping), чтобы убрать "выбросы" // if (scaled > 4095.0f) scaled = 4095.0f; // if (scaled < 0.0f) scaled = 0.0f; DualSineWave[i] = (uint16_t)val; } } int main(void) { Calc_Wave(); GPIO_Ini(); DMA_Ini(DualSineWave, POINTS); DAC_Ini(); TIM_Ini(); while(1) { } }