- WCH CH32V006 RISC-V microcontroller adds more I/Os, memory, and
storage compared to CH32V003 2nd(1 знак., 12.05.2024 18:13, ARM, ссылка, полностью)
- Чего-то запутался в режимах АЦП STM32F4. Есть 6 входных сигналов,
подведенных к разным ножкам микроконтроллера. Использую 2 АЦП,
запускаемые одновременно от таймера с определенной частотой. Есть
требование, чтобы 2 канала из этих 6ти сэмплировались одновременно,
остальные неважно. Потому 2 АЦП, а не один. Хотелось бы оцифровать
3 пары сигналов 5 раз, усреднить результаты по каждому из 6 каналов
и после этого всего 1 раз вызвать прерывание, что данные готовы.
Допустим Yurasvs(796 знак., 10.05.2024 14:44, ARM)
- LL vs Registers - стоит ли заморачиваться LL? Посмотрел на LL
примеры для stm32, он дает достаточно длинный и сложный на первый
взгляд код. Стоит ли заморачиваться LL или сразу все писать на
регистрах? PS: Использую FreeRTOS - Mty1(04.05.2024 13:50, ARM, полностью)
- Дело в другом. Я ведь тебе написал про многопоточность,
реентерабельность и поддержку RTOS, но хочется плюнуть, потому что
реакции не было. LL-код не болеет "детскими болезнями" (ошибками
дизайна) HAL и только за одно это стоит двигаться в направлении LL. - RxTx(07.05.2024 16:33)
- Я несколько дней пытался написать работу с i2c на LL. Не осилил,
бросил. Там во первых нестандартная работа с ACK/NACK при работе с
eeprom, потом нестандартная работа с Stop опять же при работе с
eeprom при выставлении адреса чтения. В связи с этим регистры у
stm32 для i2c сильно замороченные и не очевидные. Короче бросил, и
за полчаса сделал все на HAL. Там все проработано из коробки, в том
числе все нестандартные моменты. И не только в том дело что сложно,
я понял что я не Mty1(91 знак., 09.05.2024 16:16)
- Допустим. Если вам удалось сделать на HAL, это каким-то опровергает
сказанное про HAL или то что он предназначен в целом для
демонстрационных программ или как разросшееся средство поддержки
CubeMX (бывший MicroXplorer)? Драйвера HAL действительно более
проработанные чем LL, в них меньше багов и они быстрее
исправляются. И еще HAL/LL в разной степени готовности у разных
серий. Более того, для USB/ETH LL драйверов вообще нет. А у многих
серий и LL драйвера есть далеко не на RxTx(4 знак., 09.05.2024 17:49)
- и это правильно. :-) - Лaгyнoв(09.05.2024 16:59)
- И кроме того, почитав свежую доку на HAL я увидел, что они обещают
полную совместимость с RTOS, в другом месте я прочел что таймауты в
HAL строятся не на циклах на на systick. Ну и стало ясно, что с i2c
на LL мне упираться не стоит. Думаю более крутой программер осилил
бы, но закопаюсь в этом. Mty1(8 знак., 09.05.2024 16:31, картинка)
- Я много думал над твоим сообщением, это серьезная тема. И не
отвечал не потому что забил. Не раз читал его. И кажется есть что
возразить. Напишу завтра, дай собраться с мыслями. - Mty1(09.05.2024 02:13)
- Если ловите наносекунды - то регистры, а если вы не знаете какой МК
в устройстве будет через пол года, по принципу какой смогли купить
- то куб. - =AlexD=(07.05.2024 16:13)
- Если углубленно знаете матчасть, то да - регистры. Мне нужно быстро
собирать проекты на разных платформах - отсюда времени на
углубленное изучение нет. Поэтому LL и если сложная периферия HAL,
в случае с STM. Ели постарее микросхемы - SPL. С китайскими,
понятно, их SPL подобные библиотеки. Я только STM8 на регистрах
ваял из экономии места. - vesago(04.05.2024 14:26)
- Пример длинного и сложного можно? И желательно в виде асма после
-flto - POV(04.05.2024 14:06)
- WCH заставляет учит китайский язык, переключаешь на нативный язык -
сразу свежие доки и свежие архивы, качнул свежий QingKeV4 Microprocessor Manual v1.3. сдается что аглицкий перестает быть международным, петушиный и
небыл им никогда. klen(306 знак., 08.05.2024 11:56, ARM, ссылка, полностью)
- Вопрос по DMA в stm32f4 - если DMA выдает в порт GPIO данные по
таймеру в кольцевом режиме для DDS. А в это время CPU меняет данные
в буфере в RAM - не должно быть ошибки DMA? - Mty1(05.05.2024 23:24, ARM, полностью)
- Не знаю - в этот ли раздел. Мой STM32 сейчас работает с USB
компьютерной клавиатурой. Всё прекрасно, Куб сделал USB Host для
HID-устройств. Но клиенту на самом деле нужна беспроводная
клавиатура. Т.е. в это гнездо USB я должен какой-то свисток
впихнуть. И чтоб всё работало так же. Это реально? Кто-то делал
такое? Может надо специальный свисток, что STM32 поддержит? - Лaгyнoв(04.05.2024 15:54, ARM, полностью)
- Коллллеги!!! вопрос по LWIP (RAW) .. PCB Timeout скажите можно
реализовать тайм аут соединения на самой структуре PCB_TCP Balda(100 знак., 01.05.2024 11:40, ARM, полностью)
- Друзья - а что это за операция - ( 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)