Òàêîå ïðîñòîå ðåøåíèå íåïðèãîäíî äëÿ âêëþ÷åíèÿ â êîä, íî êàê îñíîâà äëÿ ýêñïåðèìåíòà ìîæåò îêàçàòüñÿ ïîëåçíîé.
Ïðîöåññîð äëÿ ôîðìèðîâàíèÿ ñèãíàëà íå èñïîëüçóåòñÿ, òàéìåð ñàì ñåáÿ ìîäóëèðóåò, ÷åðåç êàíàë äìà.
Ñêðûòûé òåêñò
Êîä:for( uint16_t x = 0 ; x <= 255 ; x++ ) tone_table[x] = (255-4)/2*(sin(6.28* x*9/255)+sin(6.28*x*10/255))/3+255/2 ; .. DMA1_Channel3->CPAR = (uint32_t)(&(TIM3->CCR1)) ; // periphery address DMA1_Channel3->CMAR = (uint32_t)tone_table ; // memory address DMA1_Channel3->CNDTR = 255 ; // number of data transfer DMA1_Channel3->CCR |= DMA_CCR_MINC ; // memory increment DMA1_Channel3->CCR |= DMA_CCR_CIRC ; // circular mode .. TIM3->ARR = 255 - 1 ; // 8-bits table at Fpwm = Ftim TIM3->DIER |= TIM_DIER_UDE ; // request dma channel on update