Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

ADC+DMA stm32f4

Непрочитано 22.04.2013, 01:48  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Сообщение от SasaVitebsk Посмотреть сообщение
3.
Прошу пардона...
А предыдущее значение АЦП хде забрать?
Аль ОНО само FIFO делать умеет?
Реклама:
omercury вне форума  
Непрочитано 22.04.2013, 02:00  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Если вы имеете ввиду что надо выполнить "ряд измерений" из одного канала и только потом запускать обработку результатов, то тогда я извиняюсь. Я не понялвопроса.
Поскольку всё равно, надо обработать все результаты, то я не вижу смысла в DMA. Я бы делал распределённую обработку в этом случае.
Но, как говорится, хозяин барин. Тогда надо делать либо так как я говорил, то есть использовать инжектированные каналы и запускать DMA по таймеру, которым запускаете АЦП. При этом надо создавать 3 потока DMA. По потоку на один регистр инжектированного канала. Либо можно использовать регулярные каналы. Ну например вам надо каналы 5-7-9. Программируете, а в буфере объявляете как двумерный массив. И получаете по одному измерению номера каналов, по другому - ваши выборки.
Короче более ясно изложите вашу задачу, а то всё как-то невнятно.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
STM32F4 (22.04.2013)
Непрочитано 22.04.2013, 02:20  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Задача-то не моя... но думаю именно это и надо.
omercury вне форума  
Сказали "Спасибо" omercury
STM32F4 (22.04.2013)
Непрочитано 22.04.2013, 12:09  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
Радость Re: ADC+DMA stm32f4

Сообщение от SasaVitebsk Посмотреть сообщение
Если вы имеете ввиду что надо выполнить "ряд измерений" из одного канала и только потом запускать обработку результатов, то тогда я извиняюсь. Я не понялвопроса.
Поскольку всё равно, надо обработать все результаты, то я не вижу смысла в DMA. Я бы делал распределённую обработку в этом случае.
Но, как говорится, хозяин барин. Тогда надо делать либо так как я говорил, то есть использовать инжектированные каналы и запускать DMA по таймеру, которым запускаете АЦП. При этом надо создавать 3 потока DMA. По потоку на один регистр инжектированного канала. Либо можно использовать регулярные каналы. Ну например вам надо каналы 5-7-9. Программируете, а в буфере объявляете как двумерный массив. И получаете по одному измерению номера каналов, по другому - ваши выборки.
Короче более ясно изложите вашу задачу, а то всё как-то невнятно.
Да, не спорю, вопрос я замудрил! Еще раз повторюсь,мне нужно запускать измерения АЦП по таймеру т.к я измеряю синусоидальный сигнал, заранее известной частоты, по-этому мне необходимо производить измерения кратно периоду сигнала!!!Для этого я хочу использовать DMA, что бы данные сами записывались в массив, а режим АЦП не важен.............Главное что бы данные ацепировались по таймеру и посредством DMA попадали в массив!!!!!!
А проблема моя в том что : если настроить АЦП на передачу данных из регулярного канала, с помощью ДМА, в массив, то АЦП работает только в непрерывном режиме, а от таймера не работает!!!!!!!!!!!!!!!!!!!!!!
В чем может быть причина?
PHP код:
//*********************TIM3*************************
        RCC-›APB1ENR    |= RCC_APB1ENR_TIM2EN;            // тактирование таймера
        TIM2-›PSC         = 160-1;                            // предделитель
        TIM2-›ARR         = 1000-1;                            // переполнение
        TIM2-›CR2         |= TIM_CR2_MMS_1;                // output (TRGO)
        TIM2-›CR1         |= TIM_CR1_CEN;                    // запуск счета


        RCC-›AHB1ENR    |= RCC_AHB1ENR_GPIOAEN;
//********************ADC1**CH6 PA6***************
        RCC-›APB2ENR    |= RCC_APB2ENR_ADC1EN;
//********************DMA***************************
        RCC-›AHB1ENR    |= RCC_AHB1ENR_DMA2EN;
        DMA2_Stream0-›CR&=~ DMA_SxCR_CHSEL;            // 000: channel 0 selected
        DMA2_Stream0-›PAR= (uint32_t)&ADC1-›DR;     //
        DMA2_Stream0-›M0AR=(uint32_t)&BUFF[0];        // Массив
        DMA2_Stream0-›NDTR=100;                        // Длина буфера
        DMA2_Stream0-›CR|= DMA_SxCR_MINC;            // Инкремент адреса
        DMA2_Stream0-›CR|= DMA_SxCR_MSIZE_0;        // 16 бит
        DMA2_Stream0-›CR|= DMA_SxCR_PSIZE_0;        // 16 бит
        DMA2_Stream0-›CR|= DMA_SxCR_CIRC;            // Непрерывный режим
        DMA2_Stream0-›CR&=~ DMA_SxCR_DIR;            // 01: peripheral-to-Memory
        DMA2_Stream0-›CR|= DMA_SxCR_PL;                // 11: Very high приоритет
        DMA2_Stream0-›CR|= DMA_SxCR_EN;                 // Вкл. передачу

        GPIOA-›MODER    |= GPIO_MODER_MODER6;            //ADC1 CH6 PA6
        ADC1-›CR2        |= (ADC_CR2_EXTSEL_1|ADC_CR2_EXTSEL_2);//  0110 tim 2 (TRGO)
        ADC1-›CR2         |=ADC_CR2_DMA;                    //разрешаем рабуту DMA
//        ADC1-›CR2        |=ADC_CR2_CONT;
        ADC1-›SQR3        =6;
        ADC1-›CR2         |=ADC_CR2_SWSTART;
        ADC1-›CR2         |=ADC_CR2_ADON; 
Если установить бит "ADC_CR2_CONT" то данные попадают в буфер, но меня такой режим не устраивает! мне необходимо чтобы ацп измерял по таймеру!Все биты для тактирования, от таймера, я установил
PHP код:
ADC1-›CR2|=DC_CR2_EXTSEL_1|ADC_CR2_EXTSEL_2);// 0110 tim 2 (TRGO)
но толку нет (((((

Что касается ваших сообщений, о принципе работы ДМА, написаны не зря -очень познавательно ) Спасибо.
STM32F4 вне форума  
Непрочитано 22.04.2013, 14:34  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

А вот это забыли?
Bits 29:28 EXTEN: External trigger enable for regular channels
These bits are set and cleared by software to select the external trigger polarity and enable
the trigger of a regular group.
00: Trigger detection disabled
01: Trigger detection on the rising edge
10: Trigger detection on the falling edge
11: Trigger detection on both the rising and falling edges
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
STM32F4 (22.04.2013)
Непрочитано 23.04.2013, 10:50  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Сообщение от SasaVitebsk Посмотреть сообщение
А вот это забыли?
Bits 29:28 EXTEN
the trigger of a regular group.
01: Trigger detection on the rising edge
эт да, пропустил бит!Но и с ним что-то не то(((((Данные то приходят, но 0xFFF.
Если добавить прерывание по окончанию преобразования ацп, то видно что ацп ацепирует согласно таймеру!!!
Если посмотреть на буфер то первое значение приходит то что и должно, это по-видимому из-за установки бита ADC_CR2_SWSTART после ADC_CR2_ADON.
Почему это может происходить?
PHP код:
void TIM2_IRQHandler(void)
    {
    TIM2-›SR&= ~TIM_SR_UIF;                 //Сбрасываем флаг UIF

    }

float i;
void ADC_IRQHandler(void)
 {
    ADC1-›SR&= ~ADC_SR_AWD;
    GPIOD-›ODR        ^=((1‹‹12)|(1‹‹13)|(1‹‹14)|(1‹‹15));
 }
uint16_t BUFF[100];
int main(void)
{

    SystemInit();
    //*********************TIM2*************************
        RCC-›APB1ENR    |= RCC_APB1ENR_TIM2EN;            // тактирование таймера
        TIM2-›PSC         = 16000-1;                            // предделитель
        TIM2-›ARR         = 1000-1;                            // переполнение
        TIM2-›CR2         |= TIM_CR2_MMS_1;                // output (TRGO)
        TIM2-›DIER         |= TIM_DIER_UIE;                //Прерывания по переполнению
        TIM2-›DIER         |= TIM_DIER_UDE;
        TIM2-›CR1         |= TIM_CR1_CEN;                    //запуск счета
        NVIC_EnableIRQ(TIM2_IRQn);
        NVIC_SetPriority(TIM2_IRQn,16);

        RCC-›AHB1ENR    |= RCC_AHB1ENR_GPIOAEN;
        GPIOA-›MODER    |= GPIO_MODER_MODER6;            //ADC1 CH6 PA6
//********************ADC1**CH6 PA6***************
        RCC-›APB2ENR    |= RCC_APB2ENR_ADC1EN;
//********************DMA***************************
        RCC-›AHB1ENR    |= RCC_AHB1ENR_DMA2EN;
        DMA2_Stream4-›CR&=~ DMA_SxCR_CHSEL;            // 000: channel 0 selected
        DMA2_Stream4-›PAR= (uint32_t)&ADC1-›DR;     //
        DMA2_Stream4-›M0AR=(uint32_t)&BUFF[0];        // Массив
        DMA2_Stream4-›NDTR=100;                        // Длина буфера
        DMA2_Stream4-›CR|= DMA_SxCR_MINC;            // Инкремент адреса
        DMA2_Stream4-›CR|= DMA_SxCR_MSIZE_0;        // 16 бит
        DMA2_Stream4-›CR|= DMA_SxCR_PSIZE_0;        // 16 бит
//        DMA2_Stream4-›CR|= DMA_SxCR_CIRC;            // Непрерывный режим
        ADC1-›CR1        |= ADC_CR1_EOCIE;                //разрешаем прерывания
        DMA2_Stream4-›CR&=~ DMA_SxCR_DIR;            // 01: peripheral-to-Memory
        DMA2_Stream4-›CR|= DMA_SxCR_PL;                // 11: Very high приоритет
        DMA2_Stream4-›CR|= DMA_SxCR_EN;                 // Вкл. передачу
        
        ADC1-›CR2        |= (ADC_CR2_EXTSEL_1|ADC_CR2_EXTSEL_2);//tim 2 (TRGO)
        ADC1-›CR2         |=ADC_CR2_DMA;                    //разрешаем рабуту DMA
//        ADC1-›CR2        |=ADC_CR2_CONT;
        ADC1-›CR2        |=ADC_CR2_EXTEN_0;
        ADC1-›SQR3        =6;
        ADC1-›CR2         |=ADC_CR2_ADON;
        ADC1-›CR2         |=ADC_CR2_SWSTART;
        NVIC_EnableIRQ(ADC_IRQn);
        NVIC_SetPriority(ADC_IRQn,5); 
STM32F4 вне форума  
Непрочитано 23.04.2013, 11:16  
SasaVitebsk
Гражданин KAZUS.RUN
 
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4


Не обижайтесь, но много бесполезной суеты. Вы один раз определитесь что именно вы хотите сделать и внятно прочитайте мануал. Я, например, беру устройство, и каждый регистр ... каждый бит определяю. А то вы как тот тракторист с магнитолой - не работает - я и так полярность подавал и так.
Понимаете - это не тот случай, чтобы методом тыка делать и сразу 10 параметров менять. Я за вами неуспеваю.
Я первый же регистр посмотрел - и у меня несходится с вами. Но я уже не знаю что к чему относится. Может вы условия задачи поменяли.

Давайте сначала. Подробно словами пишете что именно вы хотите сделать на данном этапе. Старое зачёркиваем. И после этого спокойно сами это пишите. И выкладываете. Я смотрю. А то раньше вы три канала мерили, теперь я вообще не понимаю что к чему
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
STM32F4 (26.04.2013)
Непрочитано 26.04.2013, 18:00  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Сообщение от SasaVitebsk Посмотреть сообщение

Не обижайтесь, но много бесполезной суеты. Вы один раз определитесь что именно вы хотите сделать и внятно прочитайте мануал. Я, например, беру устройство, и каждый регистр ... каждый бит определяю. А то вы как тот тракторист с магнитолой - не работает - я и так полярность подавал и так.
Понимаете - это не тот случай, чтобы методом тыка делать и сразу 10 параметров менять. Я за вами неуспеваю.
Я первый же регистр посмотрел - и у меня несходится с вами. Но я уже не знаю что к чему относится. Может вы условия задачи поменяли.

Давайте сначала. Подробно словами пишете что именно вы хотите сделать на данном этапе. Старое зачёркиваем. И после этого спокойно сами это пишите. И выкладываете. Я смотрю. А то раньше вы три канала мерили, теперь я вообще не понимаю что к чему
Да, от основной задачи я давно отошел и для начала я хочу сделать простейший проект в котором будет задействован только АЦП и ДМА!!!
Главные условия которого: первое это работать от таймера, ну и что бы ДМА формировал буфер измеряемых данных!Я уже все регистры наизусть выучил, видимо я что-то не так понял(
У вас нет примеров подобной настройки?Я весь интернет облазил, то ДМА с АЦП но в непрерывном режиме то АЦП по таймеру но бед ДМА эти варианты настройки и у меня отлично работают.
STM32F4 вне форума  
Непрочитано 29.04.2013, 11:54  
Oleg Galizin
Частый гость
 
Регистрация: 25.03.2010
Адрес: Voronezh
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 7 раз(а) в 7 сообщении(ях)
Oleg Galizin на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Сообщение от STM32F4 Посмотреть сообщение
У вас нет примеров подобной настройки?
для stm32f100 http://www.radiokot.ru/forum/download/file.php?id=99199

Пометка
Set up ADC, TIM1, DMA for conversion

Последний раз редактировалось Oleg Galizin; 29.04.2013 в 12:53.
Oleg Galizin вне форума  
Сказали "Спасибо" Oleg Galizin
STM32F4 (29.04.2013)
Непрочитано 29.04.2013, 13:58  
zheleznjakov
Прописка
 
Аватар для zheleznjakov
 
Регистрация: 31.03.2010
Сообщений: 200
Сказал спасибо: 3
Сказали Спасибо 48 раз(а) в 41 сообщении(ях)
zheleznjakov на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Добрый день,

У меня в наличии есть плата STM32F4-Discovery, могу сделать пример под неё.

Я правильно понял вам нужно: преобразования АЦП стартуют от таймера, по окончанию преобразования контроллер ПДП забирает данные.

Это один из часто используемых режимов, думаю проблем не будет.
__________________
ziblog.ru

Последний раз редактировалось zheleznjakov; 29.04.2013 в 14:00. Причина: примечание
zheleznjakov вне форума  
Сказали "Спасибо" zheleznjakov
STM32F4 (29.04.2013)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
STM32F103 ADC+DMA Nik_UFO Микроконтроллеры, АЦП, память и т.д 11 24.08.2016 11:57
Запуск ucLinux на STM32F4 k000858 Микроконтроллеры, АЦП, память и т.д 10 09.12.2013 14:51
Не стартует stm32f4 STM32F4 Песочница (вопросы новичков) 2 04.12.2012 22:46
ШИМ в STM32F4 sosedi Микроконтроллеры, АЦП, память и т.д 5 15.08.2012 12:20
STM32 ADC + DMA в циклическом режиме Nik_UFO Микроконтроллеры, АЦП, память и т.д 4 24.02.2012 18:49


Часовой пояс GMT +4, время: 11:38.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.