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

stm32f4+adc+dma+tim

2 posts in this topic

Guest Руслан   
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
ruhi    39
4 часа назад, Гость Руслан сказал:

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

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

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoticons maximum 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  

  • Сообщения

    • У иудейского бога нет имени, он - стопроцентная абстракция. Странно, осмелившись рассуждать о религиях, не знать таких фундаментальеых вещей.
    • Но речь шла о тварях по страшней, в основном ядовитые виды, всякого рода хищники и все остальные. Собака тоже может конечности откусить, хотя относится к одомашненному виду.
    • Это пример ШИМ когда параметр изменяется на единицы, десятки и сотни вольт, в моем же случае формируется звуковой сигнал амплитудой до 50мВ из сигнала ПЧ амплитудой 1,5в, даже если применять детектирование будет больше. Но надо так как есть и потому модуляция ШИМ гораздо менее чем на рисунке и импульсы еле отличаются друг от друга.  Главное это линейность преобразования и важен неизменный ток импульсов, что обеспечивается ограничителем перед преобразованием и внутренним ограничителем на диодах детектора которые управляются напряжением ПЧ и постоянным обратным смещением. Какое бы не было высокое напряжение ПЧ но ему надо преодолеть запирающее напряжение цепочки автосмещения и когда оно преодолело то увеличивает заряд С10 и в следующих тактах уже снова еле может преодолеть запирающее напряжение. Так образуется и стабилизируется импульсный ток схемы. Этот ток всегда протекает в одном и том же направлении и потому СХЕМА ОДНОТАКТНАЯ, как в Багдаде. Второй полупериод ПЧ не рабочий и запирает диоды. И что с того? Боты накручивают какой-то там минус а с плюс-минусом в схеме разобраться не могут.
    • Здравствуйте, Есть ещё один  вопросы можно ли использовать данную плату защиты 18650, для маленького аккамулятора с фото? 
    • схемку у соседей в своей теме обнаружил? , отвечу здесь при  R1=R2=R3=R4 :  lout=Uin/R5