const uint16_t sinus_500hz[] =
{ 2048, 2112, 2177, 2241, 2305, 2368, 2432, 2495, 2557, 2619, 2681, 2742, 2802,
2861, 2920, 2978, 3035, 3091, 3145, 3199, 3252, 3303, 3353, 3402, 3450,
3496, 3541, 3584, 3626, 3666, 3705, 3742, 3777, 3811, 3843, 3873, 3901,
3928, 3952, 3975, 3996, 4015, 4032, 4047, 4060, 4071, 4080, 4087, 4092,
4095, 4095, 4095, 4092, 4087, 4080, 4071, 4060, 4047, 4032, 4015, 3996,
3975, 3952, 3928, 3901, 3873, 3843, 3811, 3777, 3742, 3705, 3666, 3626,
3584, 3541, 3496, 3450, 3402, 3353, 3303, 3252, 3199, 3145, 3091, 3035,
2978, 2920, 2861, 2802, 2742, 2681, 2619, 2557, 2495, 2432, 2368, 2305,
2241, 2177, 2112, 2048, 1984, 1919, 1855, 1791, 1728, 1664, 1601, 1539,
1477, 1415, 1354, 1294, 1235, 1176, 1118, 1061, 1005, 951, 897, 844,
793, 743, 694, 646, 600, 555, 512, 470, 430, 391, 354, 319, 285, 253,
223, 195, 168, 144, 121, 100, 81, 64, 49, 36, 25, 16, 9, 4, 1, 0, 1, 4,
9, 16, 25, 36, 49, 64, 81, 100, 121, 144, 168, 195, 223, 253, 285, 319,
354, 391, 430, 470, 512, 555, 600, 646, 694, 743, 793, 844, 897, 951,
1005, 1061, 1118, 1176, 1235, 1294, 1354, 1415, 1477, 1539, 1601, 1664,
1728, 1791, 1855, 1919, 1984 };
//***********DAC****************
GPIOA-›MODER |= GPIO_MODER_MODER4_1; // alternate function
RCC-›APB1ENR |= RCC_APB1ENR_DACEN; // вкл. тактирование ЦАП
DAC-›CR |= DAC_CR_TEN1;
DAC-›CR |= DAC_CR_MAMP1; // амплитуда на максимум
DAC-›CR = ~DAC_CR_TSEL1; // 000: Timer 6 TRGO event
DAC-›CR |= DAC_CR_EN1; // вкл. ЦАП 1
//***********TIM6***************
RCC-›APB1ENR |= RCC_APB1ENR_TIM6EN; // тактирование таймера
TIM6-›PSC = 16000-1; // предделитель
TIM6-›ARR = 4000; // переполнение
TIM6-›CR2 |= TIM_CR2_MMS_1; // output (TRGO)
TIM6-›CR1 |= TIM_CR1_CEN; // запуск счета
//***********DMA1***************
RCC-›AHB1ENR |= RCC_AHB1ENR_DMA1EN;
DMA1_Stream5-›CR|= DMA_SxCR_CHSEL; // 111: channel 7 selected
DMA1_Stream5-›PAR= (uint32_t)&DAC-›DHR12R1; // указатель на переферийное устройство
DMA1_Stream5-›M0AR=(uint32_t)&sinus_500hz[0]; //адрес буфера
DMA1_Stream5-›NDTR=200; // кол-во передаваемых данных
DMA1_Stream5-›CR|= DMA_SxCR_MINC; // инкремент указателя буфера
DMA1_Stream5-›CR|= DMA_SxCR_MSIZE_0; // размер элемента в памяти 16 бит
DMA1_Stream5-›CR|= DMA_SxCR_PSIZE_0; // размер элемента в переферии 16 бит
DMA1_Stream5-›CR|= DMA_SxCR_CIRC; // цикличная передача данных
DMA1_Stream5-›CR|= DMA_SxCR_DIR_0; // 01: Memory-to-peripheral
DMA1_Stream5-›CR|= DMA_SxCR_PL; // 11: Very high
DMA1_Stream5-›CR|= DMA_SxCR_EN; // включение ПДП |