Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
3 / 3 / 0
Регистрация: 29.05.2012
Сообщений: 25

USART2 и DMA

20.04.2016, 12:39. Показов 1171. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь запустить считывание из USORT2 в DMA (IAR Embedded)
Делаю:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
if ((RCC->AHBENR & RCC_AHBENR_DMA1EN) != RCC_AHBENR_DMA1EN)  RCC->AHBENR |=RCC_AHBENR_DMA1EN; //Подаем тактовые импульсы на DMA
DMA1_Channel7->CCR   =  0;                           //предочистка регистра конфигурации
  DMA1_Channel7->CMAR = (uint32_t) &RxBuff[0];       //адрес буфера приемника
  DMA1_Channel7->CPAR = (uint32_t) &USORT2->DR;      //адрес регистра данных приемника
  DMA1_Channel7->CNDTR = 16;                         //для приемника
  DMA1_Channel7->CCR  &= ~DMA_CCR7_DIR;                //направление: чтение из перефирии
  DMA1_Channel7->CCR |= DMA_CCR7_PSIZE_0;              //по 16 бит
  DMA1_Channel7->CCR |= DMA_CCR1_EN;                                    //Включаем DMA?????
  
   NVIC_EnableIRQ (DMA1_Channel7_IRQn);//Разрешить прерывания от DMA канал №7
   DMA1_Channel7->CCR |= DMA_CCR7_TEIE;
  DMA1_Channel7->CCR |= DMA_CCR7_TCIE; //канал 7 Разрешить прерывание по завершении обмена
 
void DMA1_Channel7_IRQHandler ()   ////функцию-обработчик прерываний DMA канала 7
{
 
        SetPBit(Out1);
      for(f=1;f<200;f++){}
      ClrPBit(Out1);
}
Но импульса на выходе нет. Не подскажите где ошибка
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.04.2016, 12:39
Ответы с готовыми решениями:

USART2(RX+IDLE+DMA)+USART3(TX DMA)
Принимаю по юсарт2, побайтно, на скрости 115200. Пытаюсь передавать по юсарт3 через DMA, скорость 115200. На выходе юсарт3, получаю вот...

STM32F407 USART2 DMA
Всем добрый день! У меня есть тестовый пример использования USORT2 + DMA для платы STM32DISCOVERY (stm32F407VG). Передача осуществляется...

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

5
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
20.04.2016, 14:13
Цитата Сообщение от phosphorus74 Посмотреть сообщение
Но импульса на выходе нет. Не подскажите где ошибка
ошибка в инициализации DMA путем прямого задания значений регистрам. Используйте SDK для этого - это намного надежнее и проще. Потом можете оптимизировать.

Во-вторых, чтение из UART должно триггерить канал DMA специальным сигналом от USORT к этому каналу DMA. Я у вас в коде этого (вроде бы) не обнаружил. DMA не может определить когда пришел символ и когда он готов к приему от USORT. Поэтому, такой сигнал должен возводиться в USORT и включать DMA на один шаг, чтобы сделать то, что вы хотите.

В-третьих, не забывайте - RxBuff должен быть выровнен на 32бита.

ЗЫ: использование DMA может вызвать трудности, если вы используете пакетный тип передачи данных, который весьма полезен для USORT. Подумайте, что произойдет, если вы потеряете хотя бы один байт из ожидаемого пакета?

ЗЫ: Зачем вы проверяете состояние RCC_AHBENR_DMA1EN если вы его потом все равно устанавливаете?
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
20.04.2016, 22:17
Цитата Сообщение от phosphorus74 Посмотреть сообщение
Пытаюсь запустить считывание из USORT2 в DMA
камень то какой?
Цитата Сообщение от Voland_ Посмотреть сообщение
В-третьих, не забывайте - RxBuff должен быть выровнен на 32бита.
не факт, у кортексов нет такого железного правила, хотя да желательно
Цитата Сообщение от phosphorus74 Посмотреть сообщение
C
1
DMA1_Channel7->CCR |= DMA_CCR7_PSIZE_0; //по 16 бит
странный такой УСАРТ цельных шешнадцать бит принять может
и де настройка этого УСАРТа???
Цитата Сообщение от phosphorus74 Посмотреть сообщение
C
1
DMA1_Channel7->CCR  = 0;  //предочистка регистра конфигурации
Цитата Сообщение от phosphorus74 Посмотреть сообщение
C
1
DMA1_Channel7->CCR &= ~DMA_CCR7_DIR; //направление: чтение из перефирии
бесполезное действие, в CCR итак все биты 0
0
3 / 3 / 0
Регистрация: 29.05.2012
Сообщений: 25
21.04.2016, 10:51  [ТС]
В идеале по UART мне нужно передавать 512 бит.
Но пока без DMA передаю только 16 например 4Е 20, принимается, или 4Е 20 или 20 4Е.
Думаете есть смысл применять DMA?
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
21.04.2016, 12:11
Цитата Сообщение от ValeryS Посмотреть сообщение
не факт, у кортексов нет такого железного правила, хотя да желательно
нашел у STM32F4:
When the data width (programmed in the PSIZE or MSIZE bits in the DMA_SxCR register)
is a half-word or a word, respectively, the peripheral or memory address written into the
DMA_SxPAR or DMA_SxM0AR/M1AR registers has to be aligned on a word or half-word
address boundary, respectively
...Подозреваю, что это не есть правило, но встречал такое же поведение в Stellaris от TI (LM3S9B95)

Цитата Сообщение от phosphorus74 Посмотреть сообщение
Но пока без DMA передаю только 16
USORT не предназначен для отправки 16бит одним фреймом. USORT максимум может передать 11бит - 1старт, 1 стоп, 1 парити и 8 бит данных. Конфигурации 8-e-1, 8-o-1. Или 8-n-2. Все остальные конфиги передают 8 бит данных и менее. 16 бит можно передать только как два байта, что меняет описание

Добавлено через 3 минуты
... и в догонку, насчет регистра управления инкременированием адресов, цитата из того же мануала:
If PINCOS bit is set, the address of the next transfer is the address of the previous one
incremented by 4 (automatically aligned on a 32-bit address) whatever the PSIZE value.
The AHB memory port, however, is not impacted by this operation.
2
3 / 3 / 0
Регистрация: 29.05.2012
Сообщений: 25
21.04.2016, 13:16  [ТС]
Вы правы передаю 2 по 8
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2016, 13:16
Помогаю со студенческими работами здесь

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

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

Понимание связки PCIe + DMA и Host + Linux + DMA
Всем привет. Друзья расскажите, пожалуйста, как должна работает ниже описанная схема. Есть платка с артиксом7, на ней я смог...

Нет прерывания от DMA в режиме ADC DMA
Вроде всё логично. Настраиваем прерывание от DMA и конфигурим работу ADC что бы через DMA сваливало данные в массив adc; потом вызов...

USART2 на STM32F4xx
Навичак в работе с STM32. Второй день бьюсь с простенькой задачей - выслать что-нибудь на ПК через USORT. С библиотеками не работал, поэтму...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru