Цитата(Sprite @ Mar 18 2018, 14:56)

DMA1_Stream5->CR|= DMA_SxCR_CHSEL_0|DMA_SxCR_CHSEL_1|DMA_SxCR_CHSEL_2; //DMA chanel 7 (согласно таблице "DMA1 request mapping" RM)
DMA1_Stream5->CR|= DMA_SxCR_MSIZE_0; //Memory data size = Half-word (16 bit)
...
А зачем все эти чтения-модификации-записи??? Зачем читаете перед каждой операцией? Какой смысл? Причём ещё в много шагов.
Если откроете мануал на МК, то увидите что никакие чтения для регистров CR (ни DMA ни DAC) не нужны. И записать в них всё необходимое можно одной
командой записи.
Потому и косяки что непонятно что туда пишете.
К тому же не сбрасываете флаги состояний перед стартом операции.
Вобщем: следует хотя-бы открыть мануал на МК и почитать описание регистров.
Всех.Код
#define timDac (&concat(TIMER, nTIM_dac))
#define timMp3 (&concat(TIMER, nTIM_hr))
#define dmaU ((nDMASTR_DAC >> 3) ? &DMA2: &DMA1)
#define dmaS (&dmaU->STREAM[nDMASTR_DAC & 7])
...
timDac->DIER = timDac->CNT = timDac->PSC = timDac->CR[0] = 0;
timDac->ARR = DAC_DIV - 1;
timDac->EGR = B0;
timDac->CR[1] = 2 << 4;
__DMB();
DAC.CR = 0;
DAC.SR = B13 | B29;
DAC.CR = (B12 | B13) << concat(DAC_DMASTR, nDMASTR_DAC) * 16 |
(B0 | B2 | concat(DAC_TIMER, nTIM_dac, _TRGO) << 3) * (B0 | B16);
__DMB();
dmaU->IFCR[nDMASTR_DAC >> 2 & 1] = (B0 | B2 | B3 | B4 | B5) <<
(nDMASTR_DAC & 3) * 6 << (nDMASTR_DAC & B1) * 2;
dmaS->PAR = (u32)&DAC.DHR12LD;
dmaS->MAR[1] = dmaS->MAR[0] = (u32)&smplBuf.dummy[0];
dmaS->NDTR = DMA_CHUNK;
dmaS->FCR = 3 << DMA_FCR_FTH | 1 << DMA_FCR_DMDIS;
dmaS->CR = 1 << DMA_CR_EN | 1 << DMA_CR_TEIE | 1 << DMA_CR_TCIE |
1 << DMA_CR_DIR | 1 << DMA_CR_DBM | DMAPRI_DAC << DMA_CR_PL |
1 << DMA_CR_MINC | 2 << DMA_CR_PSIZE | 2 << DMA_CR_MSIZE |
concat(DMAREQ_S, nDMASTR_DAC, _DAC, concat(DAC_DMASTR, nDMASTR_DAC)) <<
DMA_CR_CHSEL;
PinSelN(tPinmuxAoutOn);
ENTR_CRT_SECTION();
timMp3->CCR[0] = timMp3->CNT + mcs2clk(DAC_tWAKEUP, HrTimerCLK(H)); //по даташиту ждать после включения ЦАП >= tWAKEUP мкс
timMp3->DIER = B1;
EXIT_CRT_SECTION();