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

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

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

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

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

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


 
Опции темы

ADC+DMA stm32f4

Непрочитано 12.04.2013, 12:00  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
Восклицание ADC+DMA stm32f4

Всем доброго дня! Подскажите, что я мог сделать неправильно?
Хочу настроить АЦП так что бы он передавал измеряемые данные в буфер, с использованием ДМА(ПДП)!
АЦП все измеряет, но данные так и не попадают в буфер(((

PHP код:
     uint32_t ADC_BUFF[100];
    SystemInit();
    //*********************TIM3*************************
        RCC-›APB1ENR    |= RCC_APB1ENR_TIM4EN;            // тактирование таймера
        TIM4-›PSC         = 160-1;                            // предделитель
        TIM4-›ARR         = 1000-1;                            // переполнение
//        TIM4-›DIER         |= TIM_DIER_UIE;                // прерывание по переполнению
        TIM4-›CR2         |= TIM_CR2_MMS_1;                // output (TRGO)
        TIM4-›CR1         |= TIM_CR1_CEN;                    // запуск счета
        NVIC_EnableIRQ(TIM4_IRQn);
        NVIC_SetPriority(TIM4_IRQn,9);


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

        GPIOA-›MODER    |= GPIO_MODER_MODER6;            //ADC1 CH6 PA6
        GPIOA-›MODER    |= GPIO_MODER_MODER1;            //ADC1 CH2 PA1
        ADC1-›CR1        |= ADC_CR1_DISCNUM_0;            //Discontinuous mode channel count   001: 2 channels
        ADC1-›CR1        |= ADC_CR1_JDISCEN;                //1: Discontinuous mode on injected channels enabled
        ADC1-›CR1        |= ADC_CR1_SCAN;
        ADC1-›CR2        |= (ADC_CR2_JEXTSEL_3|ADC_CR2_JEXTSEL_0);//tim 4 (TRGO)
//        ADC1-›SMPR2        |=ADC_SMPR2_SMP2;                //111: 480 cycles, ADC sample time
//        ADC1-›SMPR2        |=ADC_SMPR2_SMP6;
        ADC1-›CR1        |=ADC_CR1_JAUTO;                //автоматическое преобразование для каналов в инжектированной группе после каналов  регулярной группы.
        ADC1-›JSQR        |=ADC_JSQR_JL_0;                //выбор кол-ва каналов для преобразования (2 каналa инжектированной группы)
        ADC1-›CR2         |=ADC_CR2_DMA;                    //разрешаем рабуту DMA
        ADC1-›CR2         |=ADC_CR2_DDS;
        ADC1-›CR1        |= ADC_CR1_JEOCIE;
        ADC1-›CR2        |= ADC_CR2_CONT;

        ADC-›CCR        |= ADC_CCR_DMA_0;                //01: DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)
        ADC-›CCR        |= ADC_CCR_DDS;

        ADC1-›JSQR        |=(ADC_JSQR_JSQ3_1|ADC_JSQR_JSQ3_2);// CH6 PA6
        ADC1-›JSQR        |= ADC_JSQR_JSQ4_0;                // CH1 PA1

        ADC1-›CR2         |=ADC_CR2_JEXTEN_0;                //01: Запуск обнаружения по фронту
        ADC1-›CR2         |=ADC_CR2_JSWSTART;
        ADC1-›CR2         |=ADC_CR2_ADON; 
Реклама:
STM32F4 вне форума  
Непрочитано 12.04.2013, 13:12  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Чем пинается DMA ?
У DMA1 на все потоки на канал 0 запросы только от SPI .
С DMA2 перепутал ?
Миниатюры:
Нажмите на изображение для увеличения
Название: dma.png
Просмотров: 282
Размер:	39.3 Кб
ID:	45770  
__________________
Осторожно , злой кот

Последний раз редактировалось dosikus; 12.04.2013 в 13:16.
dosikus вне форума  
Сказали "Спасибо" dosikus
STM32F4 (12.04.2013)
Непрочитано 12.04.2013, 14:28  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

Сообщение от dosikus Посмотреть сообщение
Чем пинается DMA ?
У DMA1 на все потоки на канал 0 запросы только от SPI .
С DMA2 перепутал ?
Ох, как жешь я так не досмотрел)Спасибо большое !
Но все равно, что то данные не идут(
Не подскажите в АЦП, для работы с дма, кроме бита ADC_CR2_DMA ничего выставлять не надо ?

Код:
uint32_t BUFF[100];
		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-›JDR1; 	//
	    DMA2_Stream0-›M0AR=(uint32_t)&BUFF[0];		// Массив
	    DMA2_Stream0-›NDTR=10;						// Длина буфера
	    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
		GPIOA-›MODER	|= GPIO_MODER_MODER1;			//ADC1 CH2 PA1
		ADC1-›CR1		|= ADC_CR1_DISCNUM_0;			//Discontinuous mode channel count   001: 2 channels
		ADC1-›CR1		|= ADC_CR1_JDISCEN;				//1: Discontinuous mode on injected channels enabled
		ADC1-›CR1		|= ADC_CR1_SCAN;
		ADC1-›CR2		|= (ADC_CR2_JEXTSEL_3|ADC_CR2_JEXTSEL_0);//tim 4 (TRGO)
		ADC1-›CR1		|=ADC_CR1_JAUTO;				//автоматическое преобразование для каналов в инжектированной группе после каналов  регулярной группы.
		ADC1-›JSQR		|=ADC_JSQR_JL_0;				//выбор кол-ва каналов для преобразования (2 каналa инжектированной группы)
		ADC1-›CR2 		|=ADC_CR2_DMA;					//разрешаем рабуту DMA
//		ADC1-›CR2 		|=ADC_CR2_DDS;
		ADC1-›CR1		|=ADC_CR1_JEOCIE;
		ADC1-›CR2		|=ADC_CR2_CONT;
//		ADC-›CCR		|= ADC_CCR_DMA_0;				//01: DMA mode 1 enabled (2 / 3 half-words one by one - 1 then 2 then 3)
//		ADC-›CCR		|= ADC_CCR_DDS;
		ADC1-›JSQR		|=(ADC_JSQR_JSQ3_1|ADC_JSQR_JSQ3_2);// CH6 PA6
		ADC1-›JSQR		|= ADC_JSQR_JSQ4_0;				// CH1 PA1
		ADC1-›CR2 		|=ADC_CR2_JEXTEN_0;				//01: Запуск обнаружения по фронту
		ADC1-›CR2 		|=ADC_CR2_JSWSTART;
		ADC1-›CR2 		|=ADC_CR2_ADON;
STM32F4 вне форума  
Непрочитано 12.04.2013, 15:02  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

STM32F4, Это ты код с STM32F1xx перетаскиваешь ?
Похоже не полная настройка . Надо рыть ...
__________________
Осторожно , злой кот
dosikus вне форума  
Сказали "Спасибо" dosikus
STM32F4 (18.04.2013)
Непрочитано 18.04.2013, 10:24  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

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

Сообщение от STM32F4 Посмотреть сообщение
ХМ, а у АЦП вообще есть DMA? для инжектированных каналов...
Вы вообще понимаете что спросили?
SasaVitebsk вне форума  
Непрочитано 18.04.2013, 11:21  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

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

Сообщение от STM32F4 Посмотреть сообщение
глупость?
Там ДМА нет!!!!!!!!!!!!!!!!!!!!!!
Где нет? В АЦП? Конечно нет. АЦП вообще не должна знать о существовании DMA. Ему это для функционирования абсолютно не надо.

Вы уточняйте вопрос. А то вроде слова правильные и вроде даже предложения составляются, падежи верные, а смысла нет.

Может бы вы хотели спросить "узнает ли DMA о том что инжектированный канал завершил преобразование"?

Последний раз редактировалось SasaVitebsk; 18.04.2013 в 14:11.
SasaVitebsk вне форума  
Непрочитано 18.04.2013, 11:42  
STM32F4
Частый гость
 
Регистрация: 04.12.2012
Сообщений: 38
Сказал спасибо: 25
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
STM32F4 на пути к лучшему
Восклицание Re: ADC+DMA stm32f4

Сообщение от SasaVitebsk Посмотреть сообщение
Где нет? В АЦП? Конечно нет. АЦП вообще не должна знать о существовании DAC. Ему это для функционирования абсолютно не надо.

Вы уточняйте вопрос. А то вроде слова правильные и вроде даже предложения составляются, падежи верные, а смысла нет.

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

Ладно. )) Не буду издеваться. Хорошо, что вы думаете и изучаете. Отвечу Вам максимально детально.
1. Имеются регулярные каналы АЦП. Которые Вы можете перебирать любым способом в любом порядке. При этом результаты валятся в один регистр. В связи с этим Вам надо контролировать какому каналу соответствует значение этого регистра. Это сделать по прерыванию достаточно хлопотно. Либо синхронизироваться, либо самому переключать каналы. В связи с этим применение DMA очень удобно. DMA будет считывать значения в память и размещать их там последовательно. Вам остаётся только читать нужную ячейку памяти, которая соответствует необходимому Вам каналу.
2. Имеются 4 инжектированных канала. Каждому каналу соответствует свой регистр. Таким образом вы абсолютно точно знаете, какому регистру соответствует какой канал. Таким образом применение DMA, в данном случае, не даёт никаких преимуществ, при этом уменьшает производительность камня в целом. Вам без разницы откуда брать значение из памяти либо из регистра. Вы просто тратите силы на пустую операцию пересылки из регистра в память.
3. Тем не менее Вы можете это сделать. DMA самостоятельный узел. К АЦП не имеющий никакого отношения. По сути DMA просто пересылает данные из одного места в другое. Специфицырованы все виды пересылок: память-›память, память-›регистр, регистр-›память и регистр-›регистр. Вам надо только указать источник и приёмник. Без всяких автоинкрементов и указать событие, которое будет инициировать транзакцию. В качестве события, например можно выбрать таймер либо завершение цикла преобразования АЦП. Особой разницы в данном случае нет.
PS: можно даже с пинов процессора данные получать.

Последний раз редактировалось SasaVitebsk; 18.04.2013 в 11:58.
SasaVitebsk вне форума  
Эти 2 пользователя(ей) сказали Спасибо SasaVitebsk за это сообщение:
Rim59 (03.06.2014), titov-mv (18.01.2019)
 
Опции темы

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

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, время: 19:34.


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