Перейти к содержанию

Работа ADC на два канала STM32F411 через DMA


MechanicV

Рекомендуемые сообщения

Вроде сконфил DMA под АЦП но при попытки запуска потока DMA устанавливает флаг ошибки передачи потока

Прерывание тоже от DMA не проходит.

sbit LCD_RS at GPIOB_ODR.B4;
sbit LCD_EN at GPIOB_ODR.B5;
sbit LCD_D4 at GPIOB_ODR.B6;
sbit LCD_D5 at GPIOB_ODR.B7;
sbit LCD_D6 at GPIOB_ODR.B8;
sbit LCD_D7 at GPIOB_ODR.B9;

int adc_res_0[11], adc_res_1[11];
char txt[11];
short i=0, t=0, k=0;
void main()
{
RCC_APB2ENR.B8=1;              // ADC1EN: синхронизация АЦП1 включена
RCC_AHB1ENR.B0=1;              // GPIOAEN: часы порта IO включаются
RCC_AHB1ENR.B22=1;            // DMA2EN: часы DMA2 включены
GPIOA_MODER.B4=1;             // : Режим вывода общего назначения порт PA2
GPIOA_MODER.B5=0;  
GPIOA_OTYPER.B2=0;  //
GPIOA_OSPEEDR.B4=1;   
GPIOA_OSPEEDR.B5=1;

GPIOA_MODER.B0=1;           // Аналоговый режим порт PA0
GPIOA_MODER.B1=1;
GPIOA_OSPEEDR.B0=1;
GPIOA_OSPEEDR.B1=1;

GPIOA_MODER.B2=1;          // Аналоговый режим порт PA1
GPIOA_MODER.B3=1;
GPIOA_OSPEEDR.B2=1;
GPIOA_OSPEEDR.B3=1;

EN_bit =0;                            // Если поток включен, отключите его, сбросив бит EN в регистр DMA_SxCR

DMA2_LIFCR=1;                  // Все потоковые выделенные биты, очищены
DMA2_HIFCR=1;

DMA2_S0PAR=(int)&ADC1_DR;               // адрес регистра периферийного порта в регистре DMA_SxPAR
DMA2_S0M0AR=(int)&adc_res_0;           // адрес памяти в регистре DMA_SxMA0R
DMA2_S0NDTR =10;

CHSEL0_bit =0;                                          // канал DMA2 канал0 (запрос) с помощью CHSEL [2: 0] в регистре DMA_SxCR
CHSEL1_bit =0;
CHSEL2_bit =0;

PL0_bit =1;                         // приоритет потока наивысший
PL1_bit =1;

MSIZE0_bit =1;                   // Размер данных памяти 16 бита
MSIZE1_bit =0;

PSIZE0_DMA2_S0CR_bit =1;         // Размер периферийных данных 16 бит
PSIZE1_DMA2_S0CR_bit =0;

MINC_bit =1;                                  // Указатель адреса памяти увеличивается после каждой передачи данных 
                                                                //(приращение выполняется в соответствии с MSIZE)

DIR0_bit =0;                                    //Направление передачи данных Эти биты устанавливаются и сбрасываются программно.
DIR1_bit =0;                                        // : Периферийное в память

//PFCTRL_bit =1;                              //



EnableInterrupts();
NVIC_IntEnable(IVT_INT_DMA2_Stream0);  // разрешение прерывания при завершении передачи
TCIE_DMA2_S0CR_bit =1;                                // разрешение прерывания при завершении передачи


DMA_bit =1;                              // режим прямого доступа к памяти АЦП

SMPx_x0_ADC1_SMPR2_bit  =1;         
SMPx_x1_ADC1_SMPR2_bit  =0;
SMPx_x2_ADC1_SMPR2_bit  =0;

ADCPRE0_bit =1;    //
ADCPRE1_bit =0;

ADON_bit =1;             //вкл модуля АЦП
SWSTART_bit =1;      //старт преобразования АЦП

EN_bit =1;                   //запуск потока DMA

Lcd_Init();
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Cmd(_LCD_CLEAR);
while(1)
{
if(TCIF0_bit )      // Флаг прерывания завершения передачи потока
{
t=11;
}
else if(HTIF0_bit )    // Флаг прерывания половинной передачи потока
{
t=22;
}
else if(TEIF0_bit )      // Флаг прерывания ошибки передачи потока
{
t=33;
}
else if(DMEIF0_bit )   // Флаг прерывания из-за ошибки прямого режима потока
{
t=44;
}
WordToStr(t, txt);
Lcd_Out(1, 1, txt);
}
}


void DMA_INT_2() iv IVT_INT_DMA2_Stream0 ics ICS_AUTO     // прерывания при завершении передачи
{
CTEIF0_bit =1;
ADC1_SQR3.B0=i;
EN_bit =1;
SWSTART_bit =1;
i++;
}

 

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Проверил на своём stm32f407vgt, заработало. Нашёл 3 ошибки в предыдущем файле ADC_DMA.txt. Так что вот с исправленными ошибками:
 

ADC_DMA.txt

Ссылка на комментарий
Поделиться на другие сайты

А вот код на 407vgt в вашем стиле, который запускает 20 2-х канальных преобразований ADC с использованием DMA и разрешает прерывание по завершении процесса преобразования. Обработчик прерывания и настройка вектора прерывания отсутствует. По документации на 407 и 411 даже адреса регистров по-моему одинаковые.
Надеюсь чем-то помог.

ADC_DMA.c

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Если под рукой есть листок жести или мелкие радиаторы чтобы добавить небольшое охлаждение транзисторам, можете собрать ещë вот так. Ток покоя немного больше но искажения уменьшит ещë в 10 раз. В реальности с 4558 будет предположительно около 0.001-0.003% искажений, с более качественным ОУ уже менее 0.0005%. Для вашего 4558 ничего лучше чем эта схема не нужно.  (потом и сам эту схему себе соберу, тоже на 4558, нужен был компактный ушник) 
    • двухполярный БП очень легко делается из двух обычных однополярных БП..   большой разницы - нет, smd просто имеют гораздо меньший размер и предназначены для машинной пайки..   пленочные конденсаторы - одни из самых стабильных (так же имеют очень маленький ток утечки), но дорогие и имеют достаточно большие габариты.. керамические менее стабильны (особенно при повышенной температуре), но зато дешевы и очень меленькие.. для вашего случая можно применять и керамику и пленку (короче то, что есть под рукой)..
    • Поправка: для конструктора, известного как "китайский кит" (первая ссылка) нужна именно переменка на входе. Там отрицательное плечо питания ОУ хитро формируется. Или надо добавить ещё один маломощный источник.
    • Никто в здравом уме программу под ионистором хранить не будет. По шнурку, ничего там сложного нет, работает обычный СОМ  RS232, только уровни TTL и без проблем самопальный работает.
    • У кого то ещё остались сомнения по поводу автора и всей этой темы?
    • Наушники и тем более колонки он без буфера не потянет. Нужен транзисторный буфер (повторитель) на выходе чтобы увеличить его мощность и еë хватало для наушников. Сейчас, 5 минут, накидаю в симуляторе схему и скину.  Вот схема. R4 это ваши наушники, D1-D2 диоды 1N4148, транзисторы BD139/BD140 (наш аналог КТ814/КТ816 и КТ815/КТ817). 
×
×
  • Создать...