Jump to content
Sign in to follow this  
Guest Руслан

stm32f4+adc+dma+tim

Recommended Posts

Guest Руслан

Может кто-нибудь помочь разобраться или поделиться кодом (если кто уже писал) для работы 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);

 

Share this post


Link to post
Share on other sites
4 часа назад, Гость Руслан сказал:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Сообщения

    • Меняю кучку Шоттки на диоды SEMIKRON SKA3/17.  Предлагайте. Мои диоды все прверенны. + Смотрите резисторы. 
    • я к тому, что какими-то там семплами. С таким же успехом их можно записать с абсолютно любого тюнера или даже интернет радиовещания. Провода звучат? Это как? Это вместо громкоговорителей?  к чему тогда весь этот цирк и безуспешная попытка подвести свою теорию под вырезки из газет? Как работает представленный в этой теме демодулятор уже объяснили. Ничего инновационного там нет. Ответы на контрольные вопросы провалены. Да что уж там контрольные - даже на наводящие ответа не получено. Так что, студент, забирайте свою зачетку и приходите через год. На пересдачу.
    • Старое пусковое реле в мусорном бачке, новое установлено, сварщик доволен  
    • Не кажется, а точно. Но важно, чтобы после предохранителей или защитных автоматов. Чтобы эти автоматы сработали если у соседа с крыши съедет лист железа и замкнет собой подходящие к нему фазу и ноль  и у его двух соседей сидящих на других фазах напряжение станет 380 В. И еще важно, чтобы токи автоматов не превышали токи указанные на УЗИП. К примеру на этом указано, что токи Вашей защиты на должны превышать двадцать тысяч ампер, иначе она может не сработать.
    • А1 вывод 1 и 7, А2  вывод 1 и 7 картинки одинаковы. 
    • "А тому ли я дала?" Т.е., а туда ли надо ставить? Что делается на выходе предыдущих каскадов?
    • В русском языке слово имбецил через И пишут только имбецилы. Которые думают, что знают законы. 
×
×
  • Create New...