Вот я писал программу для STM32VLDisеcovery. Она генерила Sin на двух выходах со сдвигом в 120 град.
Код
#include <stm32f37x.h>
#include <stm32f37x_conf.h>
#include <stm32f37x_dac.h>
#include <stm32f37x_dma.h>
#include <stm32f37x_rcc.h>
#include <stm32f37x_tim.h>
#include "stm32f37x_gpio.h"
/* Массив, элементы которого нужно быстро запихивать в DAC чтоб получить синус */
const uint16_t stab1[126] = {
2048, 2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,
2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,
3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,
4013, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,
3858, 3817, 3772, 3722, 3669, 3611, 3550, 3485, 3416, 3344,
3269, 3191, 3110, 3027, 2941, 2853, 2763, 2671, 2578, 2483,
2387, 2291, 2194, 2096, 1999, 1901, 1804, 1708, 1612, 1517,
1424, 1332, 1242, 1154, 1068, 985, 904, 826, 751, 679,
610, 545, 484, 426, 373, 323, 278, 237, 201, 169,
141, 118, 100, 87, 79, 76, 82, 93, 109,
129, 154, 184, 218, 257, 300, 347, 399, 455, 514,
577, 644, 714, 788, 865, 944, 1026, 1111, 1198, 1287,
1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047 };
const uint16_t stab2[126] = {
3722, 3669, 3611, 3550, 3485, 3416, 3344, 3269, 3191, 3110,
3027, 2941, 2853, 2763, 2671, 2578, 2483,2387, 2291, 2194,
2096, 1999, 1901, 1804, 1708, 1612, 1517,1424, 1332, 1242,
1154, 1068, 985, 904, 826, 751, 679, 610, 545, 484, 426,
373, 323, 278, 237, 201, 169, 141, 118, 100, 87, 79, 76,
82, 93, 109, 129, 154, 184, 218, 257, 300, 347, 399, 455, 514,
577, 644, 714, 788, 865, 944, 1026, 1111, 1198, 1287,
1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047, 2048,
2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,
2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,
3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,
4013, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,
3858, 3817, 3772 };
const uint16_t stab3[126] = {
323, 278, 237, 201, 169, 141, 118, 100, 87, 79, 76,
82, 93, 109, 129, 154, 184, 218, 257, 300, 347, 399, 455, 514,
577, 644, 714, 788, 865, 944, 1026, 1111, 1198, 1287,
1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047, 2048,
2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,
2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,
3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,
4013, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,
3858, 3817, 3772, 3722, 3669, 3611, 3550, 3485, 3416, 3344, 3269, 3191, 3110,
3027, 2941, 2853, 2763, 2671, 2578, 2483,2387, 2291, 2194,
2096, 1999, 1901, 1804, 1708, 1612, 1517,1424, 1332, 1242,
1154, 1068, 985, 904, 826, 751, 679, 610, 545, 484, 426,
373};
unsigned char i=0;
void init_GPIO()
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOA, &GPIO_InitStructure);
/* Включаем порт А */
RCC_APB2PeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);// pravka!
/* Включаем ЦАП */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC2, ENABLE);
/* Включаем таймер 6 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
}
int main(void) {
init_GPIO();
/* turn on MCO */
RCC_MCOConfig(RCC_MCOSource_PLLCLK_Div2);
/* Настраиваем ногу ЦАПа */
//GPIO_InitTypeDef GPIO_InitStructure;
/* Настраиваем таймер для частоты 400 Гц */
TIM6->PSC = 1;
TIM6->ARR = 475;
TIM6->DIER |= TIM_DIER_UIE; //разрешаем прерывание от таймера
TIM6->CR1 |= TIM_CR1_CEN; // Начать отсчёт!
NVIC_EnableIRQ(TIM6_DAC1_IRQn); //Разрешение TIM6_DAC_IRQn прерывания
/* Включить DAC1 */
DAC1->CR |= DAC_CR_EN1;
DAC1->CR |= DAC_CR_EN2;
DAC2->CR |= DAC_CR_EN1;
/* Бесконечный цикл */
while (1)
{
}
}
/*Обработчик прерывания от таймера 6 */
void TIM6_DAC_IRQHandler(void) {
TIM6->SR &= ~TIM_SR_UIF; //Сбрасываем флаг UIF
DAC1->DHR12R1=stab1[i++]; //Запихиваем в ЦАП очередной элемент массива
DAC1->DHR12R2=stab2[i++];
DAC2->DHR12R1=stab3[i++];
if (i==126) i=0; //Если вывели в ЦАП все 126 значений то начинаем заново
}
Уже подрихтовал под 373й.