Программирование МК STM32. УРОК 15. HAL. USART. DMA

  Рет қаралды 21,378

narod stream

narod stream

Күн бұрын

Пікірлер: 49
@edmelectronics4110
@edmelectronics4110 3 жыл бұрын
Спасибо за Ваш труд. Желаю Вам здаровя и много денег за то, что Ви совсем безплатно сдалали Ваш канал за люди как нам. Вый являетесь кредитор на библейском принципе"сделай добро и брось его в море", а мы являемся дольжники, ваш резонанс на хорошо и вселена дает вам удачи от другое место.
@serb_off
@serb_off 8 жыл бұрын
Благодарю вас за ваш труд! Кажый день слежу за вашим каналом
@pavlovalexey99
@pavlovalexey99 5 жыл бұрын
Самый крутой канал. Много чему можно научиться
@asankod8549
@asankod8549 2 жыл бұрын
Привет из Азербайджана) Спасибо за уроки
@Yushik79
@Yushik79 3 жыл бұрын
Сделал я как на видео, с передачей данных на комп получилось с приёмом я поймал вилы. Пол дня просидел так ни фига не получилось, потом я стал уже придираться к каждой мелочи и заметил что у автора сначала идёт инициализация DMA а потом UART у меня наоборот. На просторах инета я нашёл статью где как раз были описаны подобные грабли и как это исправить, DMA периферии с которой будете работать должна быть настроена первее самой периферии. Как оказалось порядок инициализации можно настроить в Кубе во вкладке Project Manager\Advanced Settings поставил как у автора и о чудо данные стали приниматься. В даташитах про этот прикол также ни фига не сказано.
@TheVoalex
@TheVoalex 6 ай бұрын
Дай Вам Бог Здоровья!
@ЛевКоршунов-ж5е
@ЛевКоршунов-ж5е 5 жыл бұрын
Terminal v1.9b не любит некоторые символы, к примеру, знак доллара, решотку и т.п., почему - то, передает какую - то белиберду или вообще, игнорирует их А, вообще, спасибо за видеву, осваиваю сейчас самый дрянной STM32F030F4 о двадцати ногах. Поскоку платы для него нет, раскорячили его на NUCLEO F030R8, тот выпаяли, этот впендюрили, вроде, работает. Но, тема контроллеров новая для меня, посему хэлловорлд без бубна не напишу для него. Будем учиться
@timelord1137
@timelord1137 5 жыл бұрын
Спасибо)
@ДмитрийТисов-ж6я
@ДмитрийТисов-ж6я 10 ай бұрын
Спасибо
@enricoubaldino5856
@enricoubaldino5856 4 жыл бұрын
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
@MrK0mix
@MrK0mix 8 жыл бұрын
А почему не использовался стандартный колбэк дма функции UART_DMAReceiveCplt()? Крутить проверку в режиме блокировки безусловно понятнее, но так вся библиотека хол выстраивается уже в понятную архитектуру.
@narodstream552
@narodstream552 8 жыл бұрын
Даже не знаю. Я скорей всего 13 мая про них еще не знал. Сейчас их и использую. Но я думаю в данном уроке пусть будет такая. Зато с некоторыми флагами познакомились.
@zhdanvadim9536
@zhdanvadim9536 3 жыл бұрын
Thanks
@alexmueller1041
@alexmueller1041 7 жыл бұрын
вообще работает как-то странно. Есть такой участот кода. 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(...)?
@DrargonsM
@DrargonsM 8 жыл бұрын
Вовчик диджей))))) йоу.!!! лайк
@TheMysteo
@TheMysteo 7 жыл бұрын
Здравствуйте! Подскажите пожалуйста, что может быть ? Делаю все как в вашем видео, по приему данных UART через DMA, но почему-то первый и второй байт массива одинаковый, хотя если смотреть через преобразователь UART USB , первый и второй байт не дублируется
@ilmaks
@ilmaks 8 жыл бұрын
спасибо!
@2007mannaz
@2007mannaz 7 жыл бұрын
Добрый день, я нечего не понимаю с STM32. Проста почему то прерывании отслеживаем в бесконечном цикле. Проста на AVR указывается конкретный код в обработчике прерывании и тем самым его не запускали с бесконечного цикла. Ведь прерывание на то и прерывание, чтоб вызывалось по наступлению события, для этого даже отдельная функция. А тут мы постоянно ещё что та отслеживаем, ведь это теряет всякий смысл. Или я что та не понимаю?
@narodstream552
@narodstream552 7 жыл бұрын
Здравствуйте! Мы отслеживаем скорей всего не само прерывание, а его флаг в данный момент. А так да. Нужно обработать событие.
@MRTORNADO777
@MRTORNADO777 8 жыл бұрын
классное видео!👍
@narodstream552
@narodstream552 8 жыл бұрын
+MR TORNADO Спасибо! Я рад, что Вам понравилось!
@denysnikolaevich511
@denysnikolaevich511 8 жыл бұрын
Здравствуйте , подскажите как правильно отправить строку в которой есть спец символы ? Я по вашим урокам понял для этого есть sprinf но он не понимает символ " Передать нужно строку AT+SAPBR=3,1,"CONTYPE","GPRS" в юарт .
@denysnikolaevich511
@denysnikolaevich511 8 жыл бұрын
разобрался сам sprintf(usb_tx,"AT+SAPBR=3,1,\"CONTYPE\",\"GPRS\" ");
@narodstream552
@narodstream552 8 жыл бұрын
Denys Nikolaevich здравствуйте! Обычная работа со строками в си.
@denysnikolaevich511
@denysnikolaevich511 8 жыл бұрын
Ну это очевидно вам , я же си не знаю только учусь =)
@ДмитрийБуньков-щ8ш
@ДмитрийБуньков-щ8ш 8 жыл бұрын
Здравствуйте. Подскажите пожалуйста. Копаюсь с реализацией протокола modbus на rs 485 через usart стмки. С помощью обычных прерываний всё работает. Пытаюсь прикрутить dma, но вот в чем проблема. То количество байт, которое я приму, заранее не известно. Поэтому нужно дать команду на приём большого количества байт и в процессе того, как они будут идти, прервать приём и сбросить его в 0 байт, чтобы новый пакет опять начал писаться в массив сначала. Как это сделать? И в регистры тыкался, и функции всякие вызывал, ничего не помогло. Цифра в регистре, соответстветвующая количеству принятых байт никак не хочет меняться. Заранее спасибо за ответ
@dmitryponyatov2158
@dmitryponyatov2158 5 жыл бұрын
Full или half duplex был?
@dmitryponyatov2158
@dmitryponyatov2158 5 жыл бұрын
Как реализовали обработку таймаута на modbus при использовании dma?
@МихаилЖуравель-в2к
@МихаилЖуравель-в2к 7 жыл бұрын
STM32 в каких то вещах поражает продуманностью, но в каких то просто убивает, так что хочется выкинуть все камни и стлинки в окно на прохожих. Вот неужели нельзя делать прием не по заказанной длине , а по например.
@dmitryponyatov2158
@dmitryponyatov2158 5 жыл бұрын
Это DMA, оно к ядру процессора доступ не имеет - чем байты сравнивать будете?
@vitalyparhomenko7817
@vitalyparhomenko7817 4 жыл бұрын
Да и к тому же какой максимальный буфер тогда брать
@Aleksandr_Sidorov
@Aleksandr_Sidorov 6 жыл бұрын
А можно просто конкретно урок про DMA отснять уж просто бьюсь не первый день когда работает когда нет
@IhorLiehotin
@IhorLiehotin 8 жыл бұрын
подскажите, где вы узнаете о том, какие статусы принимает DMA? (Ну тот статус, который вы отслеживали при приеме данных). В Refferense Manual и HAL Driver Manual об этом ничего не сказано просто.
@narodstream552
@narodstream552 8 жыл бұрын
В файлах подключенных библиотек есть все переопределения любых статусных флагов, и зная те или иные флаги статусных регистров не важно какой шины, можно найти замену непосредственно в библиотеке, а можно в принципе и напрямую использовать флаги регистров, что не очень красиво на фоне пестрящих команд из библиотеки HAL. Короче, кроме мануала по HAL есть еще мануалы, в которых имеются все регистры. Смотрим их и изучаем там, а затем ищем их переопределения в хедерах и с-файлах подключенных библиотек. То есть, кроме мануалов, причем не кроме, а даже более мануалов я читаю исходные коды библиотек и примеров.
@ergokannikka
@ergokannikka 8 жыл бұрын
Zdravstvuitje. A jest kokojeto vozmoznost vyvodit dannyje bjes polnogo zapolnjenije registra pri Recieve? Ili objezatjelno nado zaplonit ves register? Sposiba.
@narodstream552
@narodstream552 8 жыл бұрын
Ergo Kannikka может буфера, а не регистра? И какого именно буфера? Буфера FIFO DMA или буфера USART?
@ergokannikka
@ergokannikka 8 жыл бұрын
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?
@narodstream552
@narodstream552 8 жыл бұрын
Так должно и быть. DMA не отчитывается о каждом байте, т.к. передача через DMA происходит как известно без использования АЛУ, а код работает именно в нем
@ЮрийИванов-е9о3ы
@ЮрийИванов-е9о3ы 7 жыл бұрын
Спасибо за урок. Возможно в библиотеке HAL произошли какие то изменения у меня после передачи всего слова state=0x01 HAL_DMA_STATE_READY
@alexmueller1041
@alexmueller1041 7 жыл бұрын
Tozhe samoe.
@alexmueller1041
@alexmueller1041 7 жыл бұрын
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-_.
@D._-Porcupine-_. 7 жыл бұрын
В stm32f407 тоже самое.
@ЛевКоршунов-ж5е
@ЛевКоршунов-ж5е 5 жыл бұрын
Произошли, рабочий интерфейс сильно поменялся
@sergbo5509
@sergbo5509 6 жыл бұрын
Какой-то странный пример с ДМА. Зачем ждать заполнения не пойму. Вся философия ДМА в том что бы он заполнялся независимо от процессора, а когда у программы будет время она сразу же извлекает данные из ДМА или передает ссылку дальше, что бы не переполнился буфер. Т.е. в идеале полного заполнения не должно быть, следующее что должен сделать процессор после заполнения это остановить поток данных, т.е. Убрать CTS. Единственное когда реализуется ожидание заполнения, это ДМА с двойной буферизацией, там в то время когда один буфер заполняется второй извлекается, обычно используется в системах захвата данных в реальном времени, типа АЦП и тд. Правда как для демонстрации работы дма может и сойдет и так.
@narodstream552
@narodstream552 6 жыл бұрын
Вы верно подметили! Именно демонстрация. Урок не метит на оптимизацию кода, он направлен именно на то, чтобы показать применение периферии!
@22altair22
@22altair22 8 жыл бұрын
жалко нельзя поставить сразу 500 лайков
@narodstream552
@narodstream552 8 жыл бұрын
Тем не менее спасибо Вам за один! Это также поддержка канала.
UFC 310 : Рахмонов VS Мачадо Гэрри
05:00
Setanta Sports UFC
Рет қаралды 1,2 МЛН
Tuna 🍣 ​⁠@patrickzeinali ​⁠@ChefRush
00:48
albert_cancook
Рет қаралды 148 МЛН
UART DMA, Interrupt Stm32 in CubeIDE. Code example.
12:37
Мудров
Рет қаралды 4,9 М.
Программирование МК STM32. УРОК 27. HAL. DAC
36:10
38 Прямой доступ к памяти (DMA)
50:32
MIR Company
Рет қаралды 2 М.
STM32. ADC & DAC
52:30
ФРТК МФТИ
Рет қаралды 7 М.