- Друзья - а что это за операция - ( void ) xWriteBufferLen; в С коде? Ниже код функции - Mty1(301 знак., 02.05.2024 16:18, ARM, полностью)
- А кто нибудь делал обработчик UART прерывания на регистрах, без
HAL? Задолбался я с HAL - вроде поначалу просто, а как нужно
буференный вывод сделать, так нужно из буфера по 1 байту в
HAL_UART_Transmit_IT() пихать. - Mty1(28.04.2024 17:02, ARM, полностью)
- Прочти этого Aвтора в интересующем разделе bnb62(1 знак., 01.05.2024 04:59, ссылка)
- Внимание, опрос! IBAH(42 знак., 30.04.2024 21:24, ссылка, картинка)
- У меня таймеры/ UART/ GPIO все в LL HAL. Удобнее на мой взгляд. - A.L.(28.04.2024 21:22)
- У чом промблемма? Референс мануал:регистер дескрипшен: mse homjak(1062 знак., 28.04.2024 19:58)
- ??? Как это? Почему у меня везде любое количество байт из буфера
уходит командой HAL_UART_Transmit_IT()? От 2 байт до 1280. Иногда
можно и DMA, когда масса других прерываний. - Лaгyнoв(28.04.2024 18:08)
- Там же ж где-то может быть HAL_UART_GetState(&huart_n); Vit(693 знак., 28.04.2024 17:59)
- DMA - RxTx(28.04.2024 17:40)
- Для передачи точно DMA удобнее. Для приёма - зависит от протокола и
нагрузки. Я чисто на прерываниях прием делал, два прерывания - одно
UART, прием/передача/ошибки, другое - таймер - временные параметры
протокола. Обеспечиваю предварительное занятие линии RS-485, так,
чтобы передача первого старта шла уже после некоторого времени в
активном состоянии драйвера - чтобы сбросить межкадровые помехи,
если были на "пустой" линии. Nikolay_Po(188 знак., 28.04.2024 17:53)
- Спасибо, Коль, за объяснение, всегда приятно тебя читать. Да, DMA
это достаточно несложно, автора видать отпугивает непонятность
реализации. А реализовать его проще всего "поженив" с программным
циркулярным буфером. Тогда "пишущий" в буфер указатель (или лучше
index) будет программный. "Заворачивается" он банальным AND, т.е.
&= . А читающий указатель (или index) выполняется на DMA с тем
нюансом что надо будет обслужить "заворот". - RxTx(28.04.2024 18:05)
- Вот, например: SciFi(3191 знак., 28.04.2024 18:38)
- Хорошо написано. На передачу, я, когда не было риска изменений
данных на стороне источника, контроллеру ПДП, вообще передавал
ссылку на данные. Не оформляя отдельного буфера передачи, но
формируя очередь запросов с указателями на данные и размер. Для
передачи кадра данных известного размера, ПДП подходит идеально. - Nikolay_Po(28.04.2024 22:04)
- Так-то всё красиво, да. Но зачем плодить указатели на структуры, я
не понял. Все уарты и все каналы dma (которые есть в конкретном
процессоре) определены там же, где USART_TypeDef и
DMA_Channel_TypeDef. Если он не определён, не сработает
инициализация, а если определён - зачем делать свой? Я всю
сознательную жизнь просто дефайнил, типа #define PRINT_UART USART1
и т.д. - Idler(28.04.2024 21:17)
- Я видел раньше и когда писал, думал "Нет тут SciFi". Да, очень
чистенький код. Идеально я бы сказал. - RxTx(28.04.2024 18:48)
- Да, DMA вариант мне все больше нравится. Тем более вывод у меня
будет через printf строками. Как раз задача для DMA. Можно даже с
Doube Buffer Mode попробовать поиграть. Немножко странно конечно у
меня будет - прием по IRQ а отправка в DMA :) - Mty1(28.04.2024 18:37)
- Как по мне, УАРТ не то место, где ДМА необходим. Понимаю, если надо
принимать плотный поток от АЦП, или отправлять что-то много и
быстро. Но УАРТ, по нынешним временам, не тот случай. ДМА может
сократить кол-во срабатываний прерываний, тем сократив среднюю
нагрузку по производительности, но производительности обычно и так
навалом. Другое дело длительность прерывания. mr-x(323 знак., 29.04.2024 12:26)
- Почему "странно", это вполне нормально, если входной поток нужно на
ходу разгребать. Ну, например, выделить из него команду, адрес и
дальнейший поток писать куда надо. А передача - "fire & forget",
пусть принимающий думает... - Idler(28.04.2024 21:25)
- В старых STM32 UART примитивный и в отличии даже от древних dsPIC30
начала 2000х не имеет FIFO буфера. Что приводит к тому что
прерывания будут дубасить на каждый байт. Тогда даже медленный по
нынышним временам 115200 это 115200/10 ( к 8 битам байта еще 1
стартовый и 1 стоповый бит) = 11 520 = 11,5 килогерц. И это только
один канал. - RxTx(28.04.2024 18:47)
- Ты же в курсе, что можно переключить драйвер на LL? А это "на
регистрах" и есть. - RxTx(28.04.2024 17:39)
- Делал обработчик в прерывании. На регистрах. Что-то конкретное
интересует? - Nikolay_Po(28.04.2024 17:35)
- Поставил egit в StmCubeIDE. И персональный Git на своем сервере в
инете. Подскажите, можно сразу подтянуть проект из удаленного
репозитория не создавая начального проекта? Или надо сделать пустой
проект с любым названием, и сделать локальный git репозиторий? - Mty1(30.04.2024 02:20, ARM, полностью)
- У меня тоже вопрос по С. Есть task1.h файл и есть task1.c файл с
функциями. Как в хидере объявить extern функции, содержащиеся в
task1.c так, чтобы этот хидер можно было подключать и в сам модуль
task1.c и во внешние с файлы? - Mty1(23.04.2024 00:20, ARM, полностью)
- Есть два
стула файла task1.h и task1.c. В каком сам писать станешь, в каком
extern'ы объявишь? - RxTx(25.04.2024 08:32)
- Почитайте со стр.93 Бoмж(1 знак., 23.04.2024 10:51, ссылка)
- Так в любой STMовской либе из вашего любимого куба можно
подсмотреть: il-2(263 знак., 23.04.2024 07:32)
- Объявление функции не требует модификатора extern и будет одинаково
как для файла где она определена, так и для всех остальных файлов.
Таким образом, заголовочный файл получается одинаков для всех.
Разница будет когда начнёте глобальные переменные наружу светить.
Тогда в tadk.c дефайните TASK_C и в заголовочном файле в
зависимости определена ли она делаете extern или нет. - VladislavS.(23.04.2024 07:24)
- Путаница в терминологии. Описанные в с-файле функции, которые
должны быть доступными всем, это не extern (внешние) а "публичные".
Объявляются в h-файле и доступны через #include этого h-файла. Если
функция используется только внутри модуля - это приватная функция,
объявляется в с-файле, чтобы не забивать мозг другим модулям.
"extern"-функция объявляется в с-файле, чтобы использовать чужую
функцию не подключая соответствующий h-файл, или вообще, приватную.
А не в хидере Idler(1 знак., 23.04.2024 07:06)
- Накидайте идей - есть printf для UART Mty1(1708 знак., 28.04.2024 19:16, ARM, полностью)
- Кто интенсивнее дергал за вымя CH32V помогите разгадать ребус
пожалуйста :) Гyдвин(1347 знак., 27.04.2024 16:24, ARM, картинка, полностью)
- А чо, в СТМовских тимерах тожэ настройки вступают в силу тока после
ручной генераццыи эвента SWEVGR_UG? Пришлось читать документаццыю,
что вообще унизительно для коллектива. - mse homjak(26.04.2024 23:12, ARM, полностью)
- STM32. Хочу "аппаратно" читать параллельную шину данных GPIO с
использованием DMA. Это возможно? pavel2000(899 знак., 22.04.2024 16:25, ARM, ссылка, полностью)
- Да без проблем можно сделать, как по ссылке, где я вопрос задавал.
Надо настроить таймер на нужную частоту в Кубе, в свойствах таймера
включить DMA - там появится Periferal to Memory далее в коде пишите
передачу DMA в буфер. Но в вашей задаче я бы все делал по
таймерному прерыванию, или прерыванию от GPIO на ноге входного
сигнала. - Mty1(23.04.2024 00:12)
- Какая требуется разрядность? Если 8-12 бит, то есть смысл
посмотреть в сторону DCMI. - LightElf(22.04.2024 18:43)
- Я так понимаю проблемы с пониманием что такое DMA, оно же ПДП. Это,
тупо, пересылка из одной ячейки памяти в другую (не отвлекая на
такую тупую работу процессор), адрес источника и/или приемника
определяется через индексный регистр. Индексный регистр может
оставаться неизменным, инкрементироваться по модулю (кольцевой
режим) или до какой-то величины. Для того чтобы пересылка произошла
нужен внешний пинок (событие). Этим событием может быль
переполнение таймера, IBAH(108 знак., 22.04.2024 18:23)
- А что вам даст ДМА? Впадайте в прерывание от ноги, вычитывайте и
анализируйте на здоровье. - mse homjak(22.04.2024 17:38)
- Поддержу, все должно получиться. Синхроимпульс заводится на ногу CC
какого-нибудь таймера. А по событию CC или UPD запускать DMA. - il-2(22.04.2024 17:25)
- Всё должно работать. Когда пишут ограниченный набор периферии,
имеют в виду ту периферию, которая может вырабатывать запрос DMA,
КМК. Вы можете использовать для этого таймер, а DMA по запросу
будет работать с регистрами GPIO. - SciFi(22.04.2024 16:33)
- Норот, кто с чорним поясом по Ц, есть вопрос:имеем функцыю со
статической переменной. Всё хорошо и понятно, видимость переменной
тока из функцыи. А если вызываем функцыю в другом месте? Будет
создан новый экземпляр переменной, не имеющей к первому отношэния? - mse homjak(20.04.2024 16:13, ARM, полностью)
- Нужно с 2х компов - домашнего и рабочего работать над проектом в
CubeIDE. Пробовал положить workspace на общий NextCloud фолдер -
хреново работает, на другом компе теряет проект в workspace. Мой
путь это Git на 2х компах или как? - Mty1(21.04.2024 15:21, ARM, полностью)
- Нужен ли на stm32 кольцевой буфер на прием передачу - ваше мнение?
В AVR и PIC я делал и на прием и на передачу. А в STM вроде в HAL
есть передача с IRQ из коробки - HAL_UART_Transmit_IT(); Вроде на
прием все равно надо сделать, чтобы ничего не потерять. А на
передачу видно можно и забить и юзать HAL? Посоветуйте по опыту, я
в раздумьях. Нужен простенький Command line по rs232 во FreeRTOS - Mty1(21.04.2024 20:49, ARM, полностью)
- Хочу Keil попробовать для stm32f4. До этого использовал CubeIDE.
Подскажите - что качать? Keil MDK v6 community edition с сайта
keil.com ? или Keil MDK v5.38a с рутрекера? - Mty1(19.04.2024 17:07, ARM, полностью)
- Подскажите, как правильно организовать ПО, МК STM32L4. Питание
батарейное. Уже весь мозг сломал. Nikolaev_Aleksey(863 знак., 21.04.2024 20:23, ARM, полностью)
- [Nuvoton M251/M252] - недорогой MCU, в котором все есть. M252 - с бескварцевым USB.
Cortex®-M23, 48 MHz, VDD = 1.75V ~ 5.5V. Без криптографии, но с XOM (Execute-Only Memory). Evgeny_CD(437 знак., 25.03.2021 00:11 - 00:19, ARM, ссылка, ссылка, полностью)
- Друзья, а кто нибудь пользует продукцию Geehy? Впечатления хотел
узнать. Оживляю железяку на apm32f030. Хлипкий какой-то проц. Я
конечно в процессе не церемонюсь. Руками лажу по плате запитанной,
попаиваю. Но вот gd, разве что молотком не бил и хоть бы хны. А тут
уже в трёх экземплярах положил. Главное проц холодный, а питание
3.3 проседает. - vesago(19.04.2024 16:35, ARM)