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; //Вкл. переобразования
{
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; //Вкл. переобразования