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

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

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

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

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

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


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

Сообщение от SasaVitebsk Посмотреть сообщение
3.
Прошу пардона...
А предыдущее значение АЦП хде забрать?
Аль ОНО само FIFO делать умеет?
Реклама:
omercury вне форума  
Непрочитано 22.04.2013, 02:00  
SasaVitebsk
Гражданин KAZUS.RU
 
Регистрация: 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.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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.RU
 
Регистрация: 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.RU
 
Регистрация: 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, время: 08:48.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot