Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
otix__
1

STM32 F4 ADC+DMA+TIM

30.08.2016, 13:44. Показов 3390. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Проблема достаточно стандартная: необходимо настроить АЦП и ДМА так, чтобы по таймеру АЦП дергалось и дальше ДМА писал преобразованную информацию в память.
Не возникает прерывания ДМА...
Прошу помочь.
Код
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
}
P.s. Надо ли включать прерывание таймера TIM3 по переполнению?
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2016, 13:44
Ответы с готовыми решениями:

ADC + DMA +TIM
Добрый вечер. Есть таймер которым я генерю ШИМ таймер TIM_TimeBaseStructure.TIM_Pressotir = 0;...

STM32F7 ADC+DMA+TIM
Добрый день. Помогите разобраться с проблемой. Задача: по событию от таймера запускать...

STM32F407 ADC DMA 2 входа без TIM и NVIC
Прошу помощи подправьте Код, АЦП работает но в DMA не скидывает Задача измерять...

помогите с алгоритмом для DMA и TIM на STM32
здравствуйте. у меня такая задача: генерировать 2 периода скважности PWM-генератора используя DMA и...

STM32 аппаратная работа интерфейса SPI через DMA с запуском от TIM
Добрый день! Задача в проекте реализовать аппаратно интерфейсы по работе с внешними АЦП и ЦАП-ом...

0
30.08.2016, 13:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.08.2016, 13:44
Помогаю со студенческими работами здесь

stm32 tim period,tim prescaler
Добрый день помогите разобраться с результат работы таймера. Код скопирован из интернета....

STM32F4Discovery - ADC DMA и FSMC DMA
Привет всем. Вынужден опять обратиться за Вашей помощью :) Ситуация такая. 1. Дисплей...

stm32f407+ADC+DMA. Проблема с DMA
Доброго дня! Новичок в stm, первый проект, начальные наброски, не понимаю,почему не работает эта...

ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет?
Добрый день. Столкнулся с необходимостью писать большой объём данных АЦП с высокой скоростью....

ADC +DMA
может кому то понадобится буфер приема данных необходимо выравнивать по 32х битному типу

STM32f413zh DMA ADC
Добрый день. Пробую осилить DMA+ADC на плате Nucleo-stm32f413zh. Проект сгенерирован Cube32MX, ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru