Перейти к содержанию

stm32f4+adc+dma+tim


Гость Руслан

Рекомендуемые сообщения

Может кто-нибудь помочь разобраться или поделиться кодом (если кто уже писал) для работы adc+dma+tim? Я использую камень stm32f405vgt6. И не как не могу разобраться как запустить adc+dma+tim. Программа попадает какое-то время в прерывания от dma, а потом перестаёт туда попадать, то всё работает нормально но с ацп идут неправильные данные (я подаю с генератора синус частотой 400Гц)

				//Enable ADC2 clock
				RCC->APB2ENR    |= RCC_APB2ENR_ADC1EN;
				__NOP();
				GPIOA->MODER    |= GPIO_MODER_MODER1;        //ADC1 CH1 PA1				
				
				ADC2->CR2 = 0;	//off ADC
				
        ADC1->CR1       |=ADC_CR1_SCAN;               // Scan mode!
				ADC1->CR2       |=ADC_CR2_EXTEN_0;            //01: Trigger detection on the rising edge!
        ADC1->CR2       |=(ADC_CR2_EXTSEL_3);        	//tim 3 (TRGO)!
				ADC1->CR2       |= ADC_CR2_EOCS;            	//razreshem prerivanie!
				ADC1->CR2       |=ADC_CR2_DDS;                //DMA disable selection (for single ADC mode)!
				ADC1->CR2       |=ADC_CR2_DMA;                //razreshem rabotu DMA!	
        ADC1->SQR3       =1;                          //PA1
        ADC1->CR2       |=ADC_CR2_ADON;               //vkluchet preobrazovanie
				
				//Enable DMA2 clock
				RCC->AHB1ENR    |= RCC_AHB1ENR_DMA2EN;
				__NOP();
				
				//Disable DMA before enable
				DMA2_Stream2->CR = 0;
				while (DMA2_Stream2->CR & DMA_SxCR_EN) continue;
				
				//DMA low interrupt flag clear register
				DMA2->LIFCR = 0x0F7D0F7D;
				//DMA high interrupt flag clear register
				DMA2->HIFCR = 0x0F7D0F7D;
				
				//DMA2_Stream4->CR|= DMA_SxCR_CHSEL;           // 001: channel 1 selected
        DMA2_Stream4->CR|= DMA_SxCR_PL;                // 11: Very high prioritet
        DMA2_Stream4->CR|= DMA_SxCR_MSIZE_0;       		 // 16 bit
        DMA2_Stream4->CR|= DMA_SxCR_PSIZE_0;        	 // 16 bit
				DMA2_Stream4->CR|= DMA_SxCR_MINC;           	 // inkrement adresa
				DMA2_Stream4->CR|= DMA_SxCR_CIRC;            	 // neprerivni rejim
				DMA2_Stream4->CR|= DMA_SxCR_TCIE;            	 // Transfer complete interrupt enable
				DMA2_Stream4->CR&=~ DMA_SxCR_DIR;            	 // 01: peripheral-to-Memory
				DMA2_Stream4->NDTR=1;                       	 // dlinna
        DMA2_Stream4->PAR= (uint32_t)&ADC1->DR;     
        DMA2_Stream4->M0AR=(uint32_t)&BUFF;       		 // massiv
				DMA2_Stream4->FCR = 3;												 //Full FIFO
				DMA2_Stream4->CR|= DMA_SxCR_EN;                // vkluchit peredachu
				NVIC_SetPriority(DMA2_Stream4_IRQn,5);
        NVIC_EnableIRQ(DMA2_Stream4_IRQn);
        

        RCC->APB1ENR    |= RCC_APB1ENR_TIM3EN;       
        TIM3->PSC        = 84-1;                     // PSC
        TIM3->ARR        = 50-1;                  	 // ARR
				TIM3->CR1       |= TIM_CR1_URS;							 //Only counter overflow/underflow generates an update interrupt or DMA request if enabled
        TIM3->CR2       |= TIM_CR2_MMS_1;            // output (TRGO)
				//TIM3->DIER      |= TIM_DIER_UIE;           //prerivanie po perepolneniu
        //TIM3->DIER      |= TIM_DIER_UDE;
        TIM3->CR1       |= TIM_CR1_CEN;              //zapusk scheta
				//NVIC_EnableIRQ(TIM3_IRQn); 
				//NVIC_SetPriority(TIM3_IRQn,16);

 

Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, Гость Руслан сказал:

как запустить adc+dma+tim.

Сначала надо запустить adc+tim то есть без DMA, если даже это не получится то зачем так себя перегружать!

Можно сделать все! Но чем больше можно, тем больше нельзя!

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...