|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
||||||||||||||||||||||||||
USART2(RX+IDLE+DMA)+USART3(TX DMA)07.06.2016, 16:38. Показов 10287. Ответов 27
Метки нет (Все метки)
Принимаю по юсарт2, побайтно, на скрости 115200.
Пытаюсь передавать по юсарт3 через DMA, скорость 115200. На выходе юсарт3, получаю вот такое:
А теперь код, дефайны:
Код:void EchoTask_usart2 ( void *pvParameters ) { uint8_t USORT2_Buf_local [ 2048 ]; uint16_t USORT2_Idx_local = 0; for( ;; ) { xSemaphoreTake ( xSemaphore_usart2IDLE, portMAX_DELAY ); //обнуляем локальный буфер memset ( USORT2_Buf_local, 0, 2048 ); //копируем в USORT2_Buf_local из массива прерывания USORT2_Idx_local = USORT2IDLE2_Idx; memcpy ( USORT2_Buf_local, USORT2_Buf2_IDLE, USORT2_Idx_local ); memset ( USORT2_Buf2_IDLE, 0, USORT2IDLE2_SIZE ); USORT2IDLE2_Idx = 0; DMA1toUSORT3TX_Put ( USORT2_Buf_local, strlen (USORT2_Buf_local) ); } } Надеюсь на конструктивную критику и помощь.
0
|
||||||||||||||||||||||||||
| 07.06.2016, 16:38 | |
|
Ответы с готовыми решениями:
27
STM32F407 USART2 DMA USART DMA IDLE STM32F103 USART+DMA не выходит из прерывания Idle |
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
||
| 09.06.2016, 13:26 | ||
Обрывки строк и новые строки не в том месте? Ну так дожидайтесь пока предыдущая передача по DMA+USORT3 завершиться и только тогда начинайте следующую.
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
||||||
| 09.06.2016, 13:36 | ||||||
|
Так же сильно много телодвижений в прерывании усарт2. Там должно быть примерно так:
Если флаг приема байта, то запихнуть его в буфер. Что-то вроде:
У вас же сейчас жестко рубите - при шел айдл - и пофик что там на отправке происходит.
0
|
||||||
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
|
| 09.06.2016, 13:48 | |
|
А как это корректно реализовать? Если не использовать while ?
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
||
| 09.06.2016, 16:08 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
||
| 09.06.2016, 16:18 | ||
Вообще-то TCIF , TCIFx: Channel x transfer somplete flag
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|||
| 09.06.2016, 16:32 | |||
Вообще-то TCIF , TCIFx: Channel x transfer somplete flag Я не имел ввиду конкретный бит
0
|
|||
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
|||||||||||
| 09.06.2016, 16:42 | |||||||||||
|
Немножко переделал, вот так прерывание дма:
0
|
|||||||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|||||||||||
| 09.06.2016, 17:10 | |||||||||||
|
У вас перезатирание происходит не там где вывод в ДМА, а там где формирование массива для него.
Я же вам дал направление для движения - нельзя перезаписывать буффер который выводите пока все не ушло. Другими словами - нельзя делать
UPD: Раз уж используете FriiRTOS то работайте с памятью через их методы pvPortMalloc и т.д.
0
|
|||||||||||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
||
| 09.06.2016, 17:13 | ||
|
[QUOTE="otixsom"]Я не имел ввиду конкретный бит
[QUOTE="Цитата:[/QUOTE]
0
|
||
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
|
| 09.06.2016, 17:22 | |
|
у меня используется три буфера, два в прерывании по IDLE и один в задаче, из которой и происходит выдача в юсарт по дма.
В прерывании RXNE складывается в буфер USORT2_Buf1_IDLE. В прерывании IDLE всё накопленное копируется в USORT2_Buf2_IDLE, и после этого обнуляется USORT2_Buf1_IDLE. В задаче, которая осуществляет выдачу в юсарт, содержимое USORT2_Buf2_IDLE копируется в локальный буфер, с обнулением USORT2_Buf2_IDLE, и уже из локального выдаётся для передачи в дма.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
|
| 09.06.2016, 17:30 | |
|
Да хоть 100 буферов. Чем больше буферов, тем больше накладных расходов после события idle и ДО конца отправки в уарт с дма.
темболее там freertos и непонятно что с приоритетами задач. Прерывания могут прервать любые ваши операции, даже внутри memcpy. Так что...
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,113
|
|
| 09.06.2016, 17:56 | |
|
Vottdymor, так не делают. Если копирование из основного буфера в IDLE чем-то оправдано (но и здесь надо еще посмотреть), то копирование "дальше" = пустая трата драгоценного времени... которого может и не быть. Для этого делают _несколько_ буферов и их _переключают_. Записали №1, передали его контроллеру DMA для отправки. При этом сами пишем в №2. DMA закончил передачу - подсовываем ему буфер №2 и начинаем писать в №1. Иногда буферов не 2, а 3, если имеет смысл в тройном буферизировании.
0
|
|
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 3,946
|
|
| 09.06.2016, 21:46 | |
|
Кстати какой камень? В некоторых есть прерывание по определенному символу...
0
|
|
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
||
| 10.06.2016, 12:48 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
||
| 13.06.2016, 13:11 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,183
|
||||||||||||||||
| 13.06.2016, 13:27 | ||||||||||||||||
P.s. Книги "Д. Э. Кнут: Искусство Программирования" обязательны к прочтению!!!
0
|
||||||||||||||||
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
||||||||||||||||||||||||||
| 15.06.2016, 16:33 | ||||||||||||||||||||||||||
|
Такс, переделал на переключаемых массивах,
задача выдачи по ДМА:
0
|
||||||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
|
|
| 15.06.2016, 17:23 | |
|
Я когда общался с GPS приемниками (на разных MTK чипсетах), обнаружил у них общую черту: данные в UART выдаются порциями в определенное количество байт, между которыми влезает мелкий, но заметный на высоких скоростях (57600bps и выше) промежуток, которого достаточно для срабатывания IDLE. Может быть и здесь имеется нечто подобное? Можо попробовать настроить GPS на меньшую скорость...
0
|
|
|
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 261
|
||||||
| 15.06.2016, 18:14 | ||||||
|
В ф-ции выдачи кое что изменил, ошибок меньше, но всё равно есть:
0
|
||||||
| 15.06.2016, 18:14 | |
|
Помогаю со студенческими работами здесь
20
STM32F4Discovery - ADC DMA и FSMC DMA stm32f407+ADC+DMA. Проблема с DMA ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет? USART2 и DMA Понимание связки PCIe + DMA и Host + Linux + DMA Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программный контроль заполнения реквизита табличной части документа
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. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
|