Например TDA7294

Форум РадиоКот • Просмотр темы - STM32F030F4P6 настройки ADC через DMA не запускается...
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт июн 17, 2025 10:11:55

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Пт фев 21, 2025 10:18:03 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Код:
Добрый день!
Имеется контролер F030F4P6.
Нужно настроить 2 канала АЦП через DMA.
Так же имеется документ (RM0360) к нему, собственно по нему и велись настройки.
Проблема в том что не запускается. Ничего не измеряет. Выводит переменную на дисплей всегда "0"
В отладчике показывает что все настройки проходят а самого преобразования нет! И даже нет прерывания
по отправке по DMA ( конец передачи ). Я в хендлере установил переменную (DMA_Counter++;) чтобы как-то
смотреть что происходит, но ничего не происходи переменная не инкрементируется похоже что запросов нет.
Приложу код настроек ADC и DMA.
Кто знает укажите пожалуйста где я ошибся?
Последний кусок кода он расположен в main. Перед функцией int main(void).
Код:
void ADC_DMA_Init(void){
//---------- ADC_DMA_PA3_PA4 ----------
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER3_Msk, 0b11 << GPIO_MODER_MODER3_Pos);  //  PA3 аналог.режим
MODIFY_REG(GPIOA->MODER, GPIO_MODER_MODER4_Msk, 0b11 << GPIO_MODER_MODER4_Pos); //   PA4 аналог.режим
MODIFY_REG(ADC1->CFGR2, ADC_CFGR2_CKMODE_Msk, 0b01 << ADC_CFGR2_CKMODE_Pos);   //    Поделить 48 мГц/2 = 12 мГц

SET_BIT(RCC->AHBENR, RCC_AHBENR_DMAEN);          //   Подать тактирование на  DMA
DMA1_Channel1->CPAR = (uint32_t)&(ADC1->DR);    //    Откуда брать...
DMA1_Channel1->CMAR = (uint32_t)Adc;           //     Куда ложить...
DMA1_Channel1->CNDTR = 2;                     //      Кол-во байт для передачи...
MODIFY_REG(DMA1_Channel1->CCR, DMA_CCR_PL_Msk, 0b01 << DMA_CCR_PL_Pos); // Приоритет канала "средний"
CLEAR_BIT(DMA1_Channel1->CCR, DMA_CCR_DIR);                            //  Из перифирии
SET_BIT(DMA1_Channel1->CCR, DMA_CCR_CIRC);                            //   Непрерывный режим DMA включён
MODIFY_REG(DMA1_Channel1->CCR, DMA_CCR_MSIZE_Msk, 0b01 << DMA_CCR_MSIZE_Pos);  //    Размер памяти     16
MODIFY_REG(DMA1_Channel1->CCR, DMA_CCR_PSIZE_Msk, 0b01 << DMA_CCR_PSIZE_Pos); //     Размер периферии  16
SET_BIT(DMA1_Channel1->CCR, DMA_CCR_TCIE);                                   //      Прерывание от DMA включено
SET_BIT(DMA1_Channel1->CCR, DMA_CCR_MINC);                                  //       Инкремент памяти включён
SET_BIT(DMA1_Channel1->CCR, DMA_CCR_EN);                                   //        Канал 1 DMA включён
SET_BIT(ADC1->CFGR1, ADC_CFGR1_DMAEN);                                    //         Подключить DMA
SET_BIT(ADC1->CFGR1, ADC_CFGR1_DMACFG);                                  //          Циклическое преобразование DMA
NVIC_EnableIRQ(DMA1_Channel1_IRQn);                                     //           Прерывание от DMA включено

SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);         // Подать тактирование на  ADC1
while(READ_BIT(ADC1->ISR, ADC_ISR_ADRDY));        //  Ждать пока не включится ADC1
CLEAR_BIT(ADC1->CR, ADC_CR_ADEN);                //   Пока выключить ADC для нстройки
SET_BIT(ADC1->CR, ADC_CR_ADCAL);                //    Откалиброать ADC
while(READ_BIT(ADC1->ISR, ADC_CR_ADCAL));      //     Ожидать окончания калибровки
//(0b000 1.5) (0b001 7.5)  (0b010 13.5) (0b011 28.5) (0b100 41.5) (0b101 55.5) (0b110 71.5) (0b111 239.5) тактов
//             Применяется к всем каналам ADC
MODIFY_REG(ADC1->SMPR, ADC_SMPR_SMP_Msk, 0b111 << ADC_SMPR_SMP_Pos); //         Сэмплинг
SET_BIT(ADC1->CFGR1, ADC_CFGR1_OVRMOD);          //        Данные перезаписываются новыми
SET_BIT(ADC1->CFGR1, ADC_CFGR1_CONT);           //         Режим непрерывного преобразования ADC
CLEAR_BIT(ADC1->CFGR1, ADC_CFGR1_SCANDIR);     //          от CHSEL3 к CHSEL4
SET_BIT(ADC1->CHSELR, ADC_CHSELR_CHSEL3);     //           Канал 3 PA3
SET_BIT(ADC1->CHSELR, ADC_CHSELR_CHSEL4);    //            Канал 4 PA34
             
// ---------- DMA_CH1 ----------
SET_BIT(ADC1->CR, ADC_CR_ADEN);              // Включить ADC
SET_BIT(ADC1->CR, ADC_CR_ADSTART);         //   Запустить преобразование ADC
}

void DMA1_Channel1_IRQHandler(void){    // Обработчик для DMA
if(READ_BIT(DMA1->ISR, DMA_ISR_TCIF1)){
SET_BIT(DMA1->IFCR, DMA_IFCR_CTCIF1); // Сбросить флаг прерывания предачи канала 1
}
DMA_Counter++;
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Пт фев 21, 2025 10:46:06 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 419
Рейтинг сообщения: 0
Код:
SET_BIT(RCC->APB2ENR, RCC_APB2ENR_ADC1EN);         // Подать тактирование на  ADC1
while(READ_BIT(ADC1->ISR, ADC_ISR_ADRDY));        //  Ждать пока не включится ADC1

Во-первых, ждать нужно когда ADRDY станет 1, во-вторых, это происходит после установки ADEN, чего тут не наблюдается.

aleksey chilov писал(а):
Код:
SET_BIT(ADC1->CR, ADC_CR_ADEN);              // Включить ADC
SET_BIT(ADC1->CR, ADC_CR_ADSTART);         //   Запустить преобразование ADC

Тут наоборот есть установка ADEN, но нет ожидания ADRDY, а последующая установка ADSTART предполагает, что ADEN равен 1, иначе ничего не произойдет. Читайте описание регистров, там все написано...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Пт фев 21, 2025 15:31:36 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Сейчас перепроверю. Спасибо!


Последний раз редактировалось aleksey chilov Пт фев 21, 2025 20:38:03, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Пт фев 21, 2025 16:37:51 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 419
Рейтинг сообщения: 0
Все правильно, MINC и PINC оба нулевые, никакие адреса не инкрементятся.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Пт фев 21, 2025 16:55:44 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Ладно, спасибо.
Буду разбераться что не так...


Последний раз редактировалось aleksey chilov Пт фев 21, 2025 20:36:53, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Пт фев 21, 2025 17:04:42 
Мучитель микросхем

Зарегистрирован: Вт окт 01, 2024 15:22:33
Сообщений: 419
Рейтинг сообщения: 0
Я ведь написал, ждать нужно когда ADRDY станет 1, а не пока он равен 1...


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: STM32F030F4P6 настройки ADC через DMA не запускается...
СообщениеДобавлено: Сб фев 22, 2025 12:36:31 
Нашел транзистор. Понюхал.

Зарегистрирован: Вс мар 27, 2022 09:38:17
Сообщений: 160
Рейтинг сообщения: 0
Разобрался с настройками. Всем спасибо!


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

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


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y