- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
- desant-88
- Автор темы
- Посетитель
12 года 3 мес. назад #3195
от desant-88
desant-88 создал тему: Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
Здравствуйте уважаемые инженеры-разработчики!
Интересует следующее:
1. Проблема : Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
2. Цель: Цифра из 14-ти аналоговых сигналов.
3. Мой конфиг на 407 :
* TIM8, сконфигурирован как экстернал триггер и является событием для запуска преобразования АЦП1и АЦП2. * ADC1 и ADC2 сконфигурированы в сдвоенном синхронном режиме с сканированием аналоговых каналов и 12 битным разрешением, таким образом на каждый АЦП приходится по 7 каналов, к тому же один из каналов АЦП1 - температурный датчик. Сконфигурированы на передачу данных по DMA2 в режиме №2(передача по 32 бита в один запрос DMA). * DMA2 сконфигурирован на передачу по 32 бита в DMA_Mode_Circular, без использования очереди.
4. В 103 подобная схема конфигурации функционировала на отлично - на 407 видимо какие-то параметры я неверно устанавливаю или не устанавливаю, все остальное перевел на 407-ой кроме этой схемы, к тому же в референсе написана какая-то фигня с размещением преобразованных данных АЦП1 в сдвоенном режиме, там написано , что они хранятся в регистре ADC_CCR - как так ? Если это регистр настроек ?
5. Если Вас не затруднит могли бы Вы ответить мне именно рабочим примером такой конфигурации потому как переход с 103 на 407 срочный , это конечно в идеале, ну а вообще помогут любые дельные советы.
Всем заранее огромное спасибо. С уважением, Desant-88.
Интересует следующее:
1. Проблема : Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
2. Цель: Цифра из 14-ти аналоговых сигналов.
3. Мой конфиг на 407 :
* TIM8, сконфигурирован как экстернал триггер и является событием для запуска преобразования АЦП1и АЦП2.
TIM_Cmd(TIM8, DISABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.TIM_Period = (168000000 / (125*300));
TIM_TimeBaseStructure.TIM_Prescaler = 0x00;
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
TIM_SetCounter(TIM8, 0);
TIM_SelectOutputTrigger(TIM8, TIM_TRGOSource_Update);
TIM_Cmd(TIM8, ENABLE);
RCC_APB2PeriphClockCmd(
RCC_APB2Periph_ADC1 | RCC_APB2Periph_ADC2 , ENABLE);
ADC_DeInit();
ADC_InitTypeDef ADC_InitStructure;
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T8_TRGO;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_Rising;
ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;
ADC_InitStructure. ADC_NbrOfConversion = 7;
ADC_CommonInitTypeDef ADC_CommonInitStructure ={
.ADC_Mode =ADC_DualMode_RegSimult ,
.ADC_Prescaler = ADC_Prescaler_Div4,
.ADC_DMAAccessMode = ADC_DMAAccessMode_2,
.ADC_TwoSamplingDelay = 0 // это ноль
};
ADC_CommonInit(&ADC_CommonInitStructure);
ADC_Init(ADC1, &ADC_InitStructure);
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE; ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;
ADC_InitStructure. ADC_NbrOfConversion = 7;
ADC_Init(ADC2, &ADC_InitStructure);
ADC_RegularChannelConfig(ADC1, output_pin_F1_adc_ch, 1, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_F2_adc_ch, 1, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, output_pin_F3_adc_ch, 2, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_F4_adc_ch, 2, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, output_pin_TA_adc_ch, 3, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_FB_adc_ch, 3, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, output_pin_FV_adc_ch, 4, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_FG_adc_ch, 4, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, output_pin_REV_adc_ch, 5, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_PARK_adc_ch, 5, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, output_pin_BRK_adc_ch, 6, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_PTO_adc_ch, 6, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_Vrefint, 7, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC1, ADC_Channel_TempSensor, 7, ADC_SampleTime_15Cycles);
ADC_RegularChannelConfig(ADC2, output_pin_DPM_adc_ch, 7, ADC_SampleTime_15Cycles);
ADC_MultiModeDMARequestAfterLastTransferCmd(ENABLE);
ADC_TempSensorVrefintCmd(ENABLE);
ADC_Cmd(ADC1, ENABLE);
ADC_Cmd(ADC2, ENABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA2, ENABLE);
DMA_DeInit(DMA2_Stream4);
DMA_InitStructure.DMA_Channel = DMA_Channel_0;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&(ADC->CDR);
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)ADCConvertedValue;
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;
DMA_InitStructure.DMA_BufferSize = 7;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
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(DMA2_Stream4, &DMA_InitStructure);
DMA_ITConfig(DMA2_Stream4,DMA_IT_TC, ENABLE);
DMA_Cmd(DMA2_Stream4, ENABLE);
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel =DMA2_Stream4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
4. В 103 подобная схема конфигурации функционировала на отлично - на 407 видимо какие-то параметры я неверно устанавливаю или не устанавливаю, все остальное перевел на 407-ой кроме этой схемы, к тому же в референсе написана какая-то фигня с размещением преобразованных данных АЦП1 в сдвоенном режиме, там написано , что они хранятся в регистре ADC_CCR - как так ? Если это регистр настроек ?
5. Если Вас не затруднит могли бы Вы ответить мне именно рабочим примером такой конфигурации потому как переход с 103 на 407 срочный , это конечно в идеале, ну а вообще помогут любые дельные советы.
Всем заранее огромное спасибо. С уважением, Desant-88.
- Денис Ягов
- Посетитель
12 года 3 мес. назад #3197
от Денис Ягов
Тут ошибка в описании. ST уже её признали. В следующей ревизии документа исправят. По остальному - чуть позже.
Денис Ягов ответил в теме Re: Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
4. В 103 подобная схема конфигурации функционировала на отлично - на 407 видимо какие-то параметры я неверно устанавливаю или не устанавливаю, все остальное перевел на 407-ой кроме этой схемы, к тому же в референсе написана какая-то фигня с размещением преобразованных данных АЦП1 в сдвоенном режиме, там написано , что они хранятся в регистре ADC_CCR - как так ? Если это регистр настроек ?
Тут ошибка в описании. ST уже её признали. В следующей ревизии документа исправят. По остальному - чуть позже.
- desant-88
- Автор темы
- Посетитель
12 года 3 мес. назад #3198
от desant-88
desant-88 ответил в теме Re: Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
Понял! Буду ждать, кстати на счет примера ST-ого для данной ситуации, смотрел его, но к сожалению он не то, что нужно. Вообще хотелось бы именно по своей конфигурации понять ошибки и впредь больше не доставать никого с этим. :-[
- Денис Ягов
- Посетитель
12 года 3 мес. назад #3200
от Денис Ягов
Денис Ягов ответил в теме Re: Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
Ошибка могла бы быть тут:
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;
ADC_InitStructure. ADC_NbrOfConversion = 7;
ADC_Init(ADC2, &ADC_InitStructure);
Насколько я понимаю, должно быть вот так:
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConv_T8_TRGO
Поэтому АЦП2 при переполнении Таймера 8 - не запускается. (Я не проверял на плате, это "быстрый поиск вероятной ошибки" ... вам стоит перепроверить)
В любом случае до конца дня постораюсь выложить нечто рабочее сюда.
ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right;
ADC_InitStructure. ADC_NbrOfConversion = 7;
ADC_Init(ADC2, &ADC_InitStructure);
Насколько я понимаю, должно быть вот так:
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConv_T8_TRGO
Поэтому АЦП2 при переполнении Таймера 8 - не запускается. (Я не проверял на плате, это "быстрый поиск вероятной ошибки" ... вам стоит перепроверить)
В любом случае до конца дня постораюсь выложить нечто рабочее сюда.
- desant-88
- Автор темы
- Посетитель
12 года 3 мес. назад #3201
от desant-88
desant-88 ответил в теме Re: Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
Если бы было все так радужно, я бы был счастлив но к сожалению такие точечные настройки я уже проверял и сейчас еще раз проверил ваше предположение - не работает. :-\
Да и в референсе написано, что для синхронного запуска этих двух АЦПэшников требуется сконфигурировать ведущий, тоесть АЦП1, а ведомым запуск обеспечен после этого, хотя незнаю на сколько референсу можно верить.
И к тому же , АЦП2 на сколько я понял запускается - устонавливается бит STRT в его статусе, только почему-то данные в регистре данных АЦП2 и соответственно в общем регистре данных ADC_CDR в верхнем слове - отсутствуют, идет преобразование только с АЦП1, тоесть визуально в дебагере я именно это вижу.
Для уточнения картины: после конфига такого сдвоенного режима идет конфиг АЦП3 в независимом режиме, возможно это как-то повлияет на суть процесса, хотя в 103 все работало ))
Лично мои предположения по возможным ошибкам, которые сейчас пытаюсь раскрутить:
- конфиг таймера 8 именно как тригера, фронт таймера на выходе.
- "протокол" передачи данных по ДМА2 для сдвоенного режима АЦП, чтение какого именно регистра данных здесь тдолжно быть.
- настройки АЦП1 и АЦП2 соответственно с настройками таймера 8 и ДМА2.
Как видите моя проблема именно целиком в конфигурации всей данной схемы.
Да и в референсе написано, что для синхронного запуска этих двух АЦПэшников требуется сконфигурировать ведущий, тоесть АЦП1, а ведомым запуск обеспечен после этого, хотя незнаю на сколько референсу можно верить.
И к тому же , АЦП2 на сколько я понял запускается - устонавливается бит STRT в его статусе, только почему-то данные в регистре данных АЦП2 и соответственно в общем регистре данных ADC_CDR в верхнем слове - отсутствуют, идет преобразование только с АЦП1, тоесть визуально в дебагере я именно это вижу.
Для уточнения картины: после конфига такого сдвоенного режима идет конфиг АЦП3 в независимом режиме, возможно это как-то повлияет на суть процесса, хотя в 103 все работало ))
Лично мои предположения по возможным ошибкам, которые сейчас пытаюсь раскрутить:
- конфиг таймера 8 именно как тригера, фронт таймера на выходе.
- "протокол" передачи данных по ДМА2 для сдвоенного режима АЦП, чтение какого именно регистра данных здесь тдолжно быть.
- настройки АЦП1 и АЦП2 соответственно с настройками таймера 8 и ДМА2.
Как видите моя проблема именно целиком в конфигурации всей данной схемы.
- Денис Ягов
- Посетитель
12 года 3 мес. назад #3204
от Денис Ягов
Денис Ягов ответил в теме Re: Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
полностью рабочий проект приложил.
Суть проекта:
по переполнению TIM8 запускается параллельная оцифровка АЦП1 по каналу датчика температуры и АЦП2 - по каналу 12 (порт C2). После преобразования делается запрос в DMA2 на копирование результата в переменную ADCDualConvertedValue (верхняя часть которой - один результат работы АЦП, нижняя - другой).
Скриншот и код проекта - приложил (рядом с папкой проекта должна лежать папка "Libraries" взятой из стандартной библиотеки периферии для STM32F4).
Суть проекта:
по переполнению TIM8 запускается параллельная оцифровка АЦП1 по каналу датчика температуры и АЦП2 - по каналу 12 (порт C2). После преобразования делается запрос в DMA2 на копирование результата в переменную ADCDualConvertedValue (верхняя часть которой - один результат работы АЦП, нижняя - другой).
Скриншот и код проекта - приложил (рядом с папкой проекта должна лежать папка "Libraries" взятой из стандартной библиотеки периферии для STM32F4).
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Конфиг схемы TIM8(EXTTRIG)->(ADC1+ADC2)->DMA2 при переходе с 103 на 407 серию.
Время создания страницы: 0.044 секунд