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

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

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

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

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

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


 
Опции темы
Непрочитано 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
Сообщений: 12,170
Сказал спасибо: 1,136
Сказали Спасибо 2,295 раз(а) в 1,393 сообщении(ях)
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
Сообщений: 12,170
Сказал спасибо: 1,136
Сказали Спасибо 2,295 раз(а) в 1,393 сообщении(ях)
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.RU
 
Регистрация: 04.08.2006
Сообщений: 918
Сказал спасибо: 28
Сказали Спасибо 148 раз(а) в 113 сообщении(ях)
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.RU
 
Регистрация: 04.08.2006
Сообщений: 918
Сказал спасибо: 28
Сказали Спасибо 148 раз(а) в 113 сообщении(ях)
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.RU
 
Регистрация: 04.08.2006
Сообщений: 918
Сказал спасибо: 28
Сказали Спасибо 148 раз(а) в 113 сообщении(ях)
SasaVitebsk на пути к лучшему
По умолчанию Re: ADC+DMA stm32f4

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

Последний раз редактировалось SasaVitebsk; 18.04.2013 в 11:58.
SasaVitebsk вне форума  
Сказали "Спасибо" SasaVitebsk
Rim59 (03.06.2014)
 

Закладки
Опции темы

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

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


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