Easyelectronics.ru

Электроника для всех
Текущее время: 15 окт 2019, 19:02

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: stm32f4+adc+dma+tim
СообщениеДобавлено: 11 апр 2019, 13:51 
Заглядывает иногда

Зарегистрирован: 29 янв 2016, 17:34
Сообщения: 59
Может кто-нибудь помочь разобраться или поделиться кодом (если кто уже писал) для работы 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);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: stm32f4+adc+dma+tim
СообщениеДобавлено: 12 апр 2019, 04:50 
Заглядывает иногда

Зарегистрирован: 16 дек 2018, 05:02
Сообщения: 97
На HAL всё вполне просто - https://istarik.ru/blog/stm32/113.html


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: VladislavS, Yoda


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB