ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
16 апреля
650716
Лагунов (04.02.2016 10:58 - 13:40, просмотров: 6389)
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МГц.