Спасибо за Ваш труд. Желаю Вам здаровя и много денег за то, что Ви совсем безплатно сдалали Ваш канал за люди как нам. Вый являетесь кредитор на библейском принципе"сделай добро и брось его в море", а мы являемся дольжники, ваш резонанс на хорошо и вселена дает вам удачи от другое место.
@serb_off8 жыл бұрын
Благодарю вас за ваш труд! Кажый день слежу за вашим каналом
@pavlovalexey995 жыл бұрын
Самый крутой канал. Много чему можно научиться
@asankod85492 жыл бұрын
Привет из Азербайджана) Спасибо за уроки
@Yushik793 жыл бұрын
Сделал я как на видео, с передачей данных на комп получилось с приёмом я поймал вилы. Пол дня просидел так ни фига не получилось, потом я стал уже придираться к каждой мелочи и заметил что у автора сначала идёт инициализация DMA а потом UART у меня наоборот. На просторах инета я нашёл статью где как раз были описаны подобные грабли и как это исправить, DMA периферии с которой будете работать должна быть настроена первее самой периферии. Как оказалось порядок инициализации можно настроить в Кубе во вкладке Project Manager\Advanced Settings поставил как у автора и о чудо данные стали приниматься. В даташитах про этот прикол также ни фига не сказано.
@TheVoalex6 ай бұрын
Дай Вам Бог Здоровья!
@ЛевКоршунов-ж5е5 жыл бұрын
Terminal v1.9b не любит некоторые символы, к примеру, знак доллара, решотку и т.п., почему - то, передает какую - то белиберду или вообще, игнорирует их А, вообще, спасибо за видеву, осваиваю сейчас самый дрянной STM32F030F4 о двадцати ногах. Поскоку платы для него нет, раскорячили его на NUCLEO F030R8, тот выпаяли, этот впендюрили, вроде, работает. Но, тема контроллеров новая для меня, посему хэлловорлд без бубна не напишу для него. Будем учиться
@timelord11375 жыл бұрын
Спасибо)
@ДмитрийТисов-ж6я10 ай бұрын
Спасибо
@enricoubaldino58564 жыл бұрын
thanks for the explanation. How is it possible to write data from BufferDMA to UARTBuffer both when the CpltCallback interrupt (BufferDMA full) is triggered and when the IDLE interrupt is triggered. What strategy do you use to manage writing pointers? thank you
@MrK0mix8 жыл бұрын
А почему не использовался стандартный колбэк дма функции UART_DMAReceiveCplt()? Крутить проверку в режиме блокировки безусловно понятнее, но так вся библиотека хол выстраивается уже в понятную архитектуру.
@narodstream5528 жыл бұрын
Даже не знаю. Я скорей всего 13 мая про них еще не знал. Сейчас их и использую. Но я думаю в данном уроке пусть будет такая. Зато с некоторыми флагами познакомились.
@zhdanvadim95363 жыл бұрын
Thanks
@alexmueller10417 жыл бұрын
вообще работает как-то странно. Есть такой участот кода. if(hdma_usart1_rx.State == HAL_DMA_STATE_READY){ HAL_Delay(100); HAL_UART_Receive_DMA(&huart1, (uint8_t*) str, 20); //HAL_Delay(100); hdma_usart1_rx.State = HAL_DMA_STATE_BUSY; } при передачи по ASART в переменной str сохраняются значения "поочереди". При чем без прохождения курсора в код IF(...) То есть передаю 12 еще раз 12 итд. В переменной все сохраняется 121212... Но при этом STATE остается Busy, а значит код в IF(...) не должен выполнятся. Когда переменная str наполняется, State становится Ready и начинает выполнятся код в IF(...). Не могу понять одного , как переменная str может заполнятся без прохождения курсорра в IF(...)?
@DrargonsM8 жыл бұрын
Вовчик диджей))))) йоу.!!! лайк
@TheMysteo7 жыл бұрын
Здравствуйте! Подскажите пожалуйста, что может быть ? Делаю все как в вашем видео, по приему данных UART через DMA, но почему-то первый и второй байт массива одинаковый, хотя если смотреть через преобразователь UART USB , первый и второй байт не дублируется
@ilmaks8 жыл бұрын
спасибо!
@2007mannaz7 жыл бұрын
Добрый день, я нечего не понимаю с STM32. Проста почему то прерывании отслеживаем в бесконечном цикле. Проста на AVR указывается конкретный код в обработчике прерывании и тем самым его не запускали с бесконечного цикла. Ведь прерывание на то и прерывание, чтоб вызывалось по наступлению события, для этого даже отдельная функция. А тут мы постоянно ещё что та отслеживаем, ведь это теряет всякий смысл. Или я что та не понимаю?
@narodstream5527 жыл бұрын
Здравствуйте! Мы отслеживаем скорей всего не само прерывание, а его флаг в данный момент. А так да. Нужно обработать событие.
@MRTORNADO7778 жыл бұрын
классное видео!👍
@narodstream5528 жыл бұрын
+MR TORNADO Спасибо! Я рад, что Вам понравилось!
@denysnikolaevich5118 жыл бұрын
Здравствуйте , подскажите как правильно отправить строку в которой есть спец символы ? Я по вашим урокам понял для этого есть sprinf но он не понимает символ " Передать нужно строку AT+SAPBR=3,1,"CONTYPE","GPRS" в юарт .
@denysnikolaevich5118 жыл бұрын
разобрался сам sprintf(usb_tx,"AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\" ");
@narodstream5528 жыл бұрын
Denys Nikolaevich здравствуйте! Обычная работа со строками в си.
@denysnikolaevich5118 жыл бұрын
Ну это очевидно вам , я же си не знаю только учусь =)
@ДмитрийБуньков-щ8ш8 жыл бұрын
Здравствуйте. Подскажите пожалуйста. Копаюсь с реализацией протокола modbus на rs 485 через usart стмки. С помощью обычных прерываний всё работает. Пытаюсь прикрутить dma, но вот в чем проблема. То количество байт, которое я приму, заранее не известно. Поэтому нужно дать команду на приём большого количества байт и в процессе того, как они будут идти, прервать приём и сбросить его в 0 байт, чтобы новый пакет опять начал писаться в массив сначала. Как это сделать? И в регистры тыкался, и функции всякие вызывал, ничего не помогло. Цифра в регистре, соответстветвующая количеству принятых байт никак не хочет меняться. Заранее спасибо за ответ
@dmitryponyatov21585 жыл бұрын
Full или half duplex был?
@dmitryponyatov21585 жыл бұрын
Как реализовали обработку таймаута на modbus при использовании dma?
@МихаилЖуравель-в2к7 жыл бұрын
STM32 в каких то вещах поражает продуманностью, но в каких то просто убивает, так что хочется выкинуть все камни и стлинки в окно на прохожих. Вот неужели нельзя делать прием не по заказанной длине , а по например.
@dmitryponyatov21585 жыл бұрын
Это DMA, оно к ядру процессора доступ не имеет - чем байты сравнивать будете?
@vitalyparhomenko78174 жыл бұрын
Да и к тому же какой максимальный буфер тогда брать
@Aleksandr_Sidorov6 жыл бұрын
А можно просто конкретно урок про DMA отснять уж просто бьюсь не первый день когда работает когда нет
@IhorLiehotin8 жыл бұрын
подскажите, где вы узнаете о том, какие статусы принимает DMA? (Ну тот статус, который вы отслеживали при приеме данных). В Refferense Manual и HAL Driver Manual об этом ничего не сказано просто.
@narodstream5528 жыл бұрын
В файлах подключенных библиотек есть все переопределения любых статусных флагов, и зная те или иные флаги статусных регистров не важно какой шины, можно найти замену непосредственно в библиотеке, а можно в принципе и напрямую использовать флаги регистров, что не очень красиво на фоне пестрящих команд из библиотеки HAL. Короче, кроме мануала по HAL есть еще мануалы, в которых имеются все регистры. Смотрим их и изучаем там, а затем ищем их переопределения в хедерах и с-файлах подключенных библиотек. То есть, кроме мануалов, причем не кроме, а даже более мануалов я читаю исходные коды библиотек и примеров.
@ergokannikka8 жыл бұрын
Zdravstvuitje. A jest kokojeto vozmoznost vyvodit dannyje bjes polnogo zapolnjenije registra pri Recieve? Ili objezatjelno nado zaplonit ves register? Sposiba.
@narodstream5528 жыл бұрын
Ergo Kannikka может буфера, а не регистра? И какого именно буфера? Буфера FIFO DMA или буфера USART?
@ergokannikka8 жыл бұрын
Ja pytajus vyvesti dannyje s DMA buffera. Sozdavaja massiv na 10 bayt DMA interrupt nje actevirujetsja poka ves buffer nje zapolnish. Vozmozno li zdjelat chtoto na podobije massiv na 30 bayt i snimat kak tolko hot chtoto tam okazetsja. Tipo variable data length. Vozmozno tokoje?
@narodstream5528 жыл бұрын
Так должно и быть. DMA не отчитывается о каждом байте, т.к. передача через DMA происходит как известно без использования АЛУ, а код работает именно в нем
@ЮрийИванов-е9о3ы7 жыл бұрын
Спасибо за урок. Возможно в библиотеке HAL произошли какие то изменения у меня после передачи всего слова state=0x01 HAL_DMA_STATE_READY
@alexmueller10417 жыл бұрын
Tozhe samoe.
@alexmueller10417 жыл бұрын
Wot takaya struktura v hal dlya statusov typedef enum { HAL_DMA_STATE_RESET = 0x00U, /*!< DMA not yet initialized or disabled */ HAL_DMA_STATE_READY = 0x01U, /*!< DMA initialized and ready for use */ HAL_DMA_STATE_BUSY = 0x02U, /*!< DMA process is ongoing */ HAL_DMA_STATE_TIMEOUT = 0x03U /*!< DMA timeout state */ }HAL_DMA_StateTypeDef; Widno chto half_MEM0 statusa net. w stm32f100 ili hal obnovili. Nuzhno smotret Dokumentyciyu.
@D._-Porcupine-_.7 жыл бұрын
В stm32f407 тоже самое.
@ЛевКоршунов-ж5е5 жыл бұрын
Произошли, рабочий интерфейс сильно поменялся
@sergbo55096 жыл бұрын
Какой-то странный пример с ДМА. Зачем ждать заполнения не пойму. Вся философия ДМА в том что бы он заполнялся независимо от процессора, а когда у программы будет время она сразу же извлекает данные из ДМА или передает ссылку дальше, что бы не переполнился буфер. Т.е. в идеале полного заполнения не должно быть, следующее что должен сделать процессор после заполнения это остановить поток данных, т.е. Убрать CTS. Единственное когда реализуется ожидание заполнения, это ДМА с двойной буферизацией, там в то время когда один буфер заполняется второй извлекается, обычно используется в системах захвата данных в реальном времени, типа АЦП и тд. Правда как для демонстрации работы дма может и сойдет и так.
@narodstream5526 жыл бұрын
Вы верно подметили! Именно демонстрация. Урок не метит на оптимизацию кода, он направлен именно на то, чтобы показать применение периферии!
@22altair228 жыл бұрын
жалко нельзя поставить сразу 500 лайков
@narodstream5528 жыл бұрын
Тем не менее спасибо Вам за один! Это также поддержка канала.