mantech 48 29 сентября, 2013 Опубликовано 29 сентября, 2013 · Жалоба Приветствую осваивающих данный сабж. Может кто сталкивался, нужно запустить ЦАП в режиме ДМА, но только один его канал! (нужен канал №2) Пробовал код из стшного примера: void DAC_Ch2_SineWaveConfig(void) { DMA_InitTypeDef DMA_InitStructure; /* DAC channel2 Configuration */ DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO; DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None; DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable; DAC_Init(DAC_Channel_2, &DAC_InitStructure); /* DMA1_Stream5 channel7 configuration **************************************/ DMA_DeInit(DMA1_Stream5); DMA_InitStructure.DMA_Channel = DMA_Channel_7; DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R2_ADDRESS; DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)&Sine12bit; DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; DMA_InitStructure.DMA_BufferSize = 32; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable; DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull; DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single; DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single; DMA_Init(DMA1_Stream5, &DMA_InitStructure); /* Enable DMA1_Stream5 */ DMA_Cmd(DMA1_Stream5, ENABLE); /* Enable DAC Channel2 */ DAC_Cmd(DAC_Channel_2, ENABLE); /* Enable DMA for DAC Channel2 */ DAC_DMACmd(DAC_Channel_2, ENABLE); } Работает только если проинициализирован подобным образом и первый канал, без него ни в какую, и наоборот первый без второго не работает. В чем фишка?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 48 30 сентября, 2013 Опубликовано 30 сентября, 2013 · Жалоба Я так понял, что в этом примере все сделано в духе кудрявых стшных индусов, а именно, таймер6 тактирует ЦАП, который в свою очередь дает пинок ДМА, чтоб тот заложил новое значение в его регистр, и т.п. А можно сделать в данном случае по уму, как - таймер пинает ДМА, тот берет значение и просто закладывает его в регистр ЦАПа, который работает в режиме без триггера? Так же проще получается, другое дело, может ли так работать контроллер. Если да, то может кто поделится командами инициализации таймера №6 в режиме тактировки им ДМА? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться