STM32 UART с библиотекой HAL. Пример работы с GSM модулем. Программирование и схемотехника.

  Рет қаралды 9,931

Vladimir Medintsev

Vladimir Medintsev

Күн бұрын

Пікірлер: 43
@aleksandrkozlov9286
@aleksandrkozlov9286 6 жыл бұрын
Спасибо большое за видео!
@ilmaks
@ilmaks 6 жыл бұрын
Спасибо! Отличный урок.
@foxanderson7674
@foxanderson7674 4 жыл бұрын
Вам большое спасибо! Очень просто и понятно)
@ДмитроПерший
@ДмитроПерший 5 жыл бұрын
Добрый день. Вопрос чуток не в тему, но похож, т.к. функции очень похожи. Суть в чём: я пытаюсь "подружить" отладочную плату F4 Discovery с дисплеем 320x240 на чипе ILI9341 по шине SPI. Создал проект в Кубе. Использую открытую библиотеку для работы с данным дисплеем, которая выложена га Гитхабе. Обычные функции - закраска прямоугольников, рисование линий, заполнение экрана и т.д. В библиотеке используется стандартная функция передачи по шине HAL_SPI_Transmit (). Так вот, пока я использую функции из библиотеки, все примеры работают. Но все эти примеры "одноцветные". Т.е. те или иные геометрические фигуры закрашиваются одним цветом. Но стоит мне попробовать передать массив цветов для каждого пикселя в определённой прямоугольной области (по сути это передача картинки), экран - глючит. Появляются артефакты в виде скошенных разноцветных тонких полос на светлом фоне и картинки нет. У меня закралась мысль на счёт того, что может я таймаут выставляю в функции маленький. Как его вообще определять? На "глазок" или есть механизм расчёта? В описании функции в HALе об этом умалчивают. П.С.: Массив цветов создавал с помощью программы LCD Image Converter. Но для эксперимента, я в данном массиве заменял значения на один цвет. Думал, может программа не верно создаёт массив с неправильными значениями цветов. Всё равно это не помогает. Иногда, когда я создавал очень маленькую прямоугольную область (16х16 пикселей) и закрашивал одним цветом, у меня получалось. Но стоит создать прямоугольник размером 64х32 пикселя и более, глючит. И не важно, закрашиваешь ты его одним цветом или массивом цветов, что бы отобразить картинку. Как вариант, хочу откатиться на Atmega328 и попробовать там. С 8 --ми битными чипами у меня опыта больше. Или, как вариант, попробовать "опустится" на более низкий уровень написания кода и использовать CMSIS для передачи по SPI. Что посоветуете?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Скошенное изображение идущее наискосок это не из-за времени. Скорее всего вы передаете или на байт больше или меньше необходимого во вновь создаваемых функциях. Еще раз очень внимательно все циклы просмотрите. У меня просто очень похожее было разок я таблицу цветов неверно передавал.
@ДмитроПерший
@ДмитроПерший 5 жыл бұрын
@@VladimirMedintsev Ок. Спасибо. Попробую.
@maskon78
@maskon78 6 жыл бұрын
Прошлый раз про SWO вы так и не ответили. :( Я не вижу, что именно вы пишете в Keil'e для работы SWO.
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
Понял, спасибо, сделаю короткий ролик и подробно покажу.
@maskon78
@maskon78 6 жыл бұрын
@@VladimirMedintsev Вот спасибочки!
@maskon78
@maskon78 6 жыл бұрын
Да, и по железу вопрос возник. Где-то увидел фразу, что swo надо подтягивать к плюсу через резистор 10к. Оно правда надо?
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
Да, к сожалению без этого не работает. У меня подтянуто в программаторе. Ибо постоянно забываю это делать на платах. Хоть памятку на стену вешай.
@DIY_PLC
@DIY_PLC 2 жыл бұрын
Не могу найти работу с юарт по прерыванимям при пакетах с переменной длинной.
@zhdanvadim9536
@zhdanvadim9536 2 жыл бұрын
на гитхабе видел репозиторий в котором залиты все варианты работы с юартом, попробуйте найти поиском
@oberwerewolf
@oberwerewolf 6 жыл бұрын
А линии CTS И RTS задействованы? Почему размер массива ограничен 64 байтами? Это размер буфера USART в STM32? В моем понимании если GSM модуль установит CTS в "1" это буде говорить о том, что последний байт о него ушел, и то что следующих ждать не надо и можно остановить заполнение массива.
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
На схеме линии CTS и RTS разумеется подключены. Но в настройках UART стоит UART_HWCONTROL_NONE т.е. программно они не задействованы. Мне не хотелось в простом видео про UART залезать в дебри и сложности. Контроль передачи это тема для продвинутого видео. Размер в 64 байта - так захотелось. Никаких видимых и скрытых причин именно такого размера массива нету.
@aleksandrekalandadze8836
@aleksandrekalandadze8836 5 жыл бұрын
@@VladimirMedintsev а как в Кейле понять, что GSM модуль установил CTS в "1"? т.е. я могу отправить команду и ждать пока модуль установит CTS в 1 и уже потом читать данные из буфера?
@andrei1146
@andrei1146 6 жыл бұрын
Добрый день! Спасибо за Ваши видео! Подскажите, пожалуйста, какой у данного устройства рабочий диапазон температур?
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
Если вы спрашиваете о рабочем диапазоне GSM модуля M66, то производитель гарантирует от -40 до 80 градусов. Если спрашиваете про контроллер, показанный в данном видео, то мы испытывали его в диапазоне от -25 и до 65 градусов. Ниже думаю можно, а вот выше начнутся проблемы с отведением тепла. Ну разумеется это все без выпадения росы.
@andrei1146
@andrei1146 6 жыл бұрын
@@VladimirMedintsev Я спрашивал о устройстве в целом, в котором его части общаются по UART с тактированием от RC-генератора, точность которого, если я не ошибаюсь, около 5% в рабочем диапазоне температур.
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
А, вот вы о чем... Если верить datasheet (раздел 6.3.8), то производитель процессора пишет, что в температурном диапазоне 0 до 85 градусов точность RC цепочки составляет от -1.9% до 2% это максимальные значения, а в диапазоне от -40 до 105 градусов от -2.8% и до 3.8% это очень даже небольшие отклонения. UART их даже не заметит. Так что в этом месте подвоха не будет. Тем более что UART в STM32 весьма продвинутый и может автоматично подстраиваться по частоте. Более подробно читать тут AN4908 STM32 USART automatic baud rate detection.
@andrei1146
@andrei1146 6 жыл бұрын
@@VladimirMedintsev А Вы разве настраивали ABR в этом видео? И на сколько я понял из этого AN, речь идет об автоматическом определении скорости передачи при инициализации, а не о борьбе с плавающей частотой генератора в процессе работы. Кроме того, эта функция относится к приему, а мы не знаем, как отнесется приемник (GSM-модуль) к нашему юарту с плавающей частотой передачи. И на мой вкус запас по стабильности частоты маловат получается в рабочем диапазоне температур. Да и не стоит забывать, что у модуля тоже частота может плавать, и не обязательно в ту же сторону, что у нашего RC-генератора...
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
Признаться я даже не знаю что вам на это ответить... 1. Вот решил я снять видео про UART, надо же его показать в работе. Показанный в видео модуль был взят только ради примера. Пример это не настоящий код. Он дает право на некоторые упрощения не относящиеся к теме видео. А тема - UART. 2. Если просмотреть видео про компоновку, где я показывал платы модуля более подробно можно на процессорной плате рассмотреть место под кварцы и под процессорный и под кварц RTC. 3. Как показывает практика кварц там не нужен, модуль был подвергнут температурным тестам и показал свою стабильность. 4. Модуль успешно продается и с весны 2018 года стоит у нескольких крупных заказчиках и сбоев не зафиксировано. Что доказывает, что наши расчеты оказались верными. 5. Если просмотреть код, то куб по умолчанию поставил туда строчку huart1.Init.OverSampling = UART_OVERSAMPLING_16; строка находится в uart.c 6. Разумеется см пункт 1 в боевом модуле, отправляющемся потребителям мало того, что настроена куча приятных штучек, так еще и код полностью отличается от приведенного в примере, и работа с uart в частности. Ваш изначальный вопрос про устройство в целом там все работает и отклонения заявленные производителем я вам показал.
@irbiit4910
@irbiit4910 5 жыл бұрын
а вы не могли бы уточнить как именно работают резисторы на линиях rx, tx usart. Не понял как они согласуют уровни. Можно ли в качестве альтернативы использовать схему согласования уровней на полевых транзисторах. Возможно ли также, как альтернатива, использование, к примеру, TXS0108E или аналогов
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Можно использовать любое решение, вопрос только в цене. Здесь собран обычный делитель напряжения построенный на резисторах. Все остальные решения более дорогие.
@irbiit4910
@irbiit4910 5 жыл бұрын
А почему на схеме только один резистор R10, подключённый к линии TX. Резистор на линию RX не нужен?
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Нет не нужен. Есть ролик kzbin.info/www/bejne/iZTWimNuj7WHbZo в котором я показывал что по этому поводу сказано в даташите на модуль. Но я честно говоря не совсем понимаю что вас смущает.
@irbiit4910
@irbiit4910 5 жыл бұрын
Спасибо за ответ. Ничто не смущает, я просто этого не знал, поэтому и спрашивал.
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Не обращайте внимания, это не единственное чего я сегодня не догнал, погода...
@AdamFullowsky
@AdamFullowsky 4 жыл бұрын
Здравствуйте, в одном из видео вы говорили, что собираетесь собирать дозиметр. Я тоже хотел бы перенести свой проект дозиметра на stm. В прошлой версии у меня была проблема с помехами из за использования dc-dc с управлением от мк. Скажите где можно для подобных нужд купить трансформатор(желательно smd), и какой способ управления трансформатором лучше, с контроллера или использовать специальную микросхему?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Я ни в одном из видео не говорил что собираюсь делать дозиметр. С другой стороны если бы это было так, то я не вижу в схеме дозиметра потребности получать какой-либо сигнал с микроконтроллера. Я бы использовал SN6501 или аналогичную микросхему помощнее. Видео было на канале.
@vad741
@vad741 6 жыл бұрын
Работает ли printf если отладчик подключен через обычный JTAG, а не SWD?
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
Не работает. У JTAG немного другое назначение.
@vad741
@vad741 6 жыл бұрын
Сейчас работаем по JTAG, и используем Keil. С SWD не работали. Какие минусы и ограничения есть при SWD? Стоит ли переходить в отладке на SWD? Привлекает меньший разъём и printf.
@VladimirMedintsev
@VladimirMedintsev 6 жыл бұрын
Ну собственно вопрос не ко мне, а к вам. Какого черта вы вообще использовали JTAG и почему вы пользуете большой разъем, а не создали собственную систему разъемов и подключений. Этакий собственный корпоративный стандарт. Ну а если серьезно, то возьмите любой процессор, прямо на ноги напаяйте ему SWD, подайте питание и попробуйте. Отладка, перенаправление ввода-вывода, логирование событий и системный монитор - работают. Кто вас знает может вы еще что-то используете. Но если серьезно то я сниму через денек видео про это дело, там и посмотрите надо ли оно вам.
@MrRuroffg
@MrRuroffg 4 жыл бұрын
Владимир, добрый день. А почему вы все же остались на кейле, хотя намеревались перейти на cube ide?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Видимо в каком-то месте случилось недопонимание. Вы поместили свой вопрос под роликом более чем годовой давности. Во время сьемки этого ролика CubeIDE не существовало. Ну а если серьезно то мы перевели коммерческие проекты.
@MrRuroffg
@MrRuroffg 4 жыл бұрын
Прошу прощерия, я очень не внимательный.
@kurtsvl
@kurtsvl 5 жыл бұрын
этот модуль поддерживает технологию OPENCPU ему внешний контроллер вообще не нужен
@VladimirMedintsev
@VladimirMedintsev 5 жыл бұрын
Видео про UART для контроллеров STM32
@udelka
@udelka 4 жыл бұрын
Добрый день. Прошу помощи. Есть пример проекта kzbin.info/www/bejne/iGOUeIR4ba6Gia8 в coocox управление модулем dfplayer. Все работает. Но я учусь работать в cubeide. Уже сделал проект. И хотел его озвучить с помощью модуля dfplayer. Пытался переделать проект из coocox в cubeide и возник затык. В обработчике прерывания есть строка if ((USART3->SR & USART_FLAG_RXNE) != (u16)RESET). Как ее переделать с помощью библиотеки HAL?
@VladimirMedintsev
@VladimirMedintsev 4 жыл бұрын
Это работа с регистрами, ничего здесь переделывать не надо. Оно и так должно работать.
@udelka
@udelka 4 жыл бұрын
@@VladimirMedintsevТак cubeide ругается на этот формат команды USART3->SR & USART_FLAG_RXNE
If people acted like cats 🙀😹 LeoNata family #shorts
00:22
LeoNata Family
Рет қаралды 42 МЛН
УДИВИЛ ВСЕХ СВОИМ УХОДОМ!😳 #shorts
00:49