- Что то меня переклинило... Как с помощью одного таймера (на паре
его выходов) получить квадратурные меандры - то есть сдвинутые на
четверть периода)? Пусть это будут таймеры STM32. - my504(13.05.2024 11:23, ARM, полностью)
- таки запустил за выходные на ch32v307 сеть с web сервером используя
ихний libwchnet.a.. порнография. есть подозрения - раскидаю сокеты
в разные потоки и фисе, здохнет. есть кто уже пропол на пузе в этом
вопросе? план у меня такой - выдрать/написать нижнюю часть eth и
замкнуть на стек freertos - китайцы очень не правы с закрытой
либой. это отрыгнется. - klen(13.05.2024 01:51, ARM, полностью)
- Коллеги, у меня вопрос по обработке ошибок в приборе на stm32f4.
Есть DMA i2c UART ADC плюс обработка ошибок от внешних стробов. Как
грамотно построить обработчик ошибок, чтобы отслеживать проблемы
скажем с записью в eeprom, инициализацию DMA и UART итп. Плюс при
штатной работе программы обрабатывать ошибки от внешних сигналов -
нештатная работа управляемого оборудования. Возможно писать
проблемы в небольшой лог в eeprom - пока думаю над этим. Не могу
понять как это Mty1(164 знак., 09.05.2024 16:32 - 16:35, ARM, полностью)
- Есть две функции, ErrorSet() и ErrorClear(). По обнаружению ошибки,
вызывается функция установки сигнала ошибки, которая взводит бит
этой ошибки в общем регистре (слове, массиве) зафиксированных
ошибок и снимает бит в регистре сброшенных ошибок. Nikolay_Po(768 знак., 09.05.2024 19:16)
- Ковыряю дизасм от небольшой автомобильной прошивки. Там запись
критичных значений в eeprom происходит с резервированием в три
копии. При записи - проверяется корректность записи, при чтении -
поиск и восстановление одиночного сбоя. Программа ведет постоянную
проверку на наличие сбоев. Постоянно идет вычитывание "троек" из
EEPROM, постоянно идет пересчет КС прошивки, постоянно идет
тестирование RAM (гасим прерывания, проверяем корректность
резервной области памяти путем pavel2000(703 знак., 09.05.2024 17:27)
- Вы определитесь, вам нужен журнал ошибок на время отладки ПО или
это штатный инструмент в вашем firmware будет? Второе лично мне не
совсем понятно - зачем выпускать ПО с ошибками? - reZident(09.05.2024 16:33)
- 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, полностью)