Страницы

Страницы

пятница, 21 октября 2016 г.

STM32F ADC with DMA on CMSIS

void DMA2_Stream4_IRQHandler(void)
{
        
GPIOD->ODR        ^=((1<<12)|(1<<13)|(1<<14)|(1<<15));
}
uint16_t BUFF[100];int main(void)
{
    
SystemInit();
//*********************GPIO*************************
        
RCC->AHB1ENR    |= RCC_AHB1ENR_GPIOAEN;
        
RCC->AHB1ENR    |= RCC_AHB1ENR_GPIODEN;
        
GPIOA->MODER    |= GPIO_MODER_MODER6;        //ADC1 CH6 PA6


//*********************TIM3*************************
        
RCC->APB1ENR    |= RCC_APB1ENR_TIM3EN;        // тактирование таймера
        
TIM3->PSC         160-1;                    // предделитель
        
TIM3->ARR         1000-1;                    // переполнение
        
TIM3->CR2         |= TIM_CR2_MMS_1;            // output (TRGO)
        
TIM3->DIER         |= TIM_DIER_UDE;
        
TIM3->CR1         |= TIM_CR1_CEN;                //запуск счета


//********************DMA***************************
        
RCC->AHB1ENR    |= RCC_AHB1ENR_DMA2EN;
        
DMA2_Stream4->CR&=~ DMA_SxCR_CHSEL;            // 000: channel 0 selected
        
DMA2_Stream4->PAR= (uint32_t)&ADC1->DR;     //
        
DMA2_Stream4->M0AR=(uint32_t)&BUFF[0];        // Массив
        
DMA2_Stream4->NDTR=100;                        // Длина буфера
        
DMA2_Stream4->CR|= DMA_SxCR_MINC;            // Инкремент адреса
        
DMA2_Stream4->CR|= DMA_SxCR_MSIZE_0;        // 16 бит
        
DMA2_Stream4->CR|= DMA_SxCR_PSIZE_0;        // 16 бит
        
DMA2_Stream4->CR|= DMA_SxCR_CIRC;            // Непрерывный режим
        
DMA2_Stream4->CR&=~ DMA_SxCR_DIR;            // 01: peripheral-to-Memory
        
DMA2_Stream4->CR|= DMA_SxCR_PL;                // 11: Very high приоритет
        
DMA2_Stream4->CR|= DMA_SxCR_TCIE;            // Transfer complete interrupt enable
        
DMA2_Stream4->CR|= DMA_SxCR_EN;                 // Вкл. передачу
        
NVIC_EnableIRQ(DMA2_Stream4_IRQn);
        
NVIC_SetPriority(DMA2_Stream4_IRQn,5);

//********************ADC1**CH6 PA6***************
        
RCC->APB2ENR    |= RCC_APB2ENR_ADC1EN;
        
ADC1->CR1         |=ADC_CR1_SCAN;                // Scan mode
        
ADC1->CR2        |=(ADC_CR2_EXTSEL_3);        //tim 3 (TRGO)
        
ADC1->SQR3        =6;                            //выбор канала PA6
        
ADC1->CR2         |=ADC_CR2_DMA;                //разрешаем рабуту DMA
        
ADC1->CR2         |=ADC_CR2_DDS;                //DMA disable selection (for single ADC mode)
        
ADC1->CR2        &=~ADC_CR2_CONT;            //Continuous conversion
        
ADC1->CR2        |=ADC_CR2_EXTEN_0;            //01: Trigger detection on the rising edge
        
ADC1->CR2        |= ADC_CR2_EOCS;            //разрешаем прерывания
        
ADC1->CR2         |=ADC_CR2_ADON;                //Вкл. переобразования  

Комментариев нет:

Отправить комментарий