otix__
|
|
1 | |
STM32 F4 ADC+DMA+TIM30.08.2016, 13:44. Показов 3390. Ответов 0
Метки нет (Все метки)
Доброго времени суток!
Проблема достаточно стандартная: необходимо настроить АЦП и ДМА так, чтобы по таймеру АЦП дергалось и дальше ДМА писал преобразованную информацию в память. Не возникает прерывания ДМА... Прошу помочь. Код
void DMA_init(void) { // Инициализация DMA1 // Настройка потока 0 DMA1 без разрешения работы DMA2_Stream0->CR |= DMA_SxCR_TCIE | // Transfer somplete interrupt enable DMA_SxCR_CIRC | // Circular mode DMA_SxCR_MINC | // Memory ymsrement mode DMA_SxCR_PSIZE_32 | // Peripheral size - 32 bit DMA_SxCR_MSIZE_32 ; // Memory size - 32 bit // 00 : Peripheral-to-memory // Channel 0 DMA2_Stream0->POR = (int)&(ADC1->DR) ; // Запись адреса регистра данных АЦП выбранного канала DMA2 DMA2_Stream0->M0AR = (int)IntADCData ; // Запись адреса регистра памяти DMA2 DMA2_Stream0->NDTR = 4; // Количесво транзакций DMA2_Stream0->CR |= DMA_SxCR_EN ; // DMA channel enable // Сброс флага прерывания потока 0 DMA2 DMA2->LIFCR |= DMA_LIFCR_CFEIF0 | DMA_LIFCR_CDMEIF0 | DMA_LIFCR_CTEIF0 | DMA_LIFCR_CHTIF0 | DMA_LIFCR_CTCIF0 ; NVIC_SetPriority(DMA2_Stream0_IRQn, 15); NVIC_EnableIRQ(DMA2_Stream0_IRQn); } void ADC_init(void) { // Инициализация ADC ADC1->SQR1 |= ADC_SQR1_L_0 ; // АЦП осуществляет 2 преобразования ADC1->SQR3 |= ADC_SQR3_SQ1_0 | // 1ое преобразование ADC_SQR3_SQ1_1 | // осуществляется по 3му каналу ADC_SQR3_SQ2_1 ; // 2ое преобразование по 2му каналу ADC1->SMPR1 = ADC_Sample_Time ; // Настройка скорости АЦП ADC1->SMPR2 = ADC_Sample_Time ; // Настройка и включение АЦП ADC1->CR1 |= ADC_CR1_SCAN ; // Настраиваем режим сканирования АЦП ADC1->CR2 |= ADC_CR2_ADON | // Включаем АЦП ADC_CR2_DMA | // Режим DMA ADC_CR2_EXTSEL_3 | // Внешнее событие TRGO Timer3 ADC_CR2_EXTEN_1 ; // Разрешаем внешние прерывания по спаду импульса } void TIM3_init(void) { // Инициализация TIM3 TIM_TypeDef *TIM = TIM3; TIM->PSC = 0 ; // Значение предделителя 0 TIM->ARR = SystemCoreClock/90000 - 1 ; // период запуска АЦП (90000 Гц) TIM->CR2 |= TIM_CR2_MMS_Update ; // MMS = 010, update even as a trigger output } void ADC_confikurotion(void) { TIM_TypeDef *TIM = TIM3; RCC->APB1ENR |= RCC_APB1ENR_TIM2EN ; // Разрешение тактирования блока таймеров (TIM3) RCC->APB2ENR |= RCC_APB2ENR_ADC1EN ; // Разрешение тактирования блока АЦП (ADC1) RCC->AHB2ENR |= RCC_AHB1ENR_DMA2EN ; // Разрешение тактирование блока DMA2 DMA_init(); // Настройка DMA1 ADC_init(); // Настройка ADC TIM3_init(); // Настройка TIM3 TIM->CR1 |= TIM_CR1_CEN; // Включаем таймер TIM3 } |
30.08.2016, 13:44 | |
Ответы с готовыми решениями:
0
ADC + DMA +TIM STM32F7 ADC+DMA+TIM STM32F407 ADC DMA 2 входа без TIM и NVIC помогите с алгоритмом для DMA и TIM на STM32 STM32 аппаратная работа интерфейса SPI через DMA с запуском от TIM |
30.08.2016, 13:44 | |
30.08.2016, 13:44 | |
Помогаю со студенческими работами здесь
1
stm32 tim period,tim prescaler STM32F4Discovery - ADC DMA и FSMC DMA stm32f407+ADC+DMA. Проблема с DMA ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет? ADC +DMA STM32f413zh DMA ADC Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |