Лагунов (04.02.2016 10:58 - 13:40, просмотров: 6679)
DMA1 в STM32F030 по двум каналам одновременно? Будут глюки? У меня сейчас 1 канал сканирует непрерывно АЦП по 6 входам. Потому режим в DMA - DMA_Mode_Circular (по 1 каналу). Проблем нет, всё прекрасно укладывается в память. Теперь хочу одновременно
по 4 каналу DMA1 слать посылки в USART1 (9600, до 16 байт, раз в 100 мсек). Сам порт работает, если вручную кнопкой командовать, то осциллографом посылки вижу. Настраиваю DMA - фиг. Поняnно, что я верояnно неправильно настриваю, будем искать.
Принципиальный вопрос - скорости мне должно хватить? То, что DMA_Mode_Circular по 1 каналу, мне не должно мешать?
АЦП настрен так:
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Upward;
ADC_Init(ADC1, &ADC_InitStructure);
/* Convert the ADC1 with 55.5 Cycles as sampling time */
ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_55_5Cycles);
И DMA для АЦП:
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RegularConvData_Tab;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
DMA_InitStructure.DMA_BufferSize = 6;
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_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);
А вот так DMA для USART:
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)USART1->TDR;
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)outdataBuffer;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
DMA_InitStructure.DMA_BufferSize = 16;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
DMA_Init(DMA1_Channel4, &DMA_InitStructure);
STM32F030 работает на частоте 48МГц.