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

Поделиться
HTML-код
  • Опубликовано: 20 окт 2024
  • STM32 UART с использованием библиотеки HAL. Пример работы с GSM модулем.
    Видео о GSM модуле - • QUECTEL M66 GSM. Недор...
    Переделка программатора - • ST-LINK переделка. Выв...
    ------------------------------------------
    Поддержать автора канала можно перейдя по ссылке:
    yoomoney.ru/to...
    Или просто отправив перевод на Yandex.кошелек:
    4100116547550395
    А также переводом по номеру карты Сбер:
    4279-3000-1033-0561
    ------------------------------------------

Комментарии • 43

  • @aleksandrkozlov9286
    @aleksandrkozlov9286 5 лет назад +2

    Спасибо большое за видео!

  • @ilmaks
    @ilmaks 5 лет назад +1

    Спасибо! Отличный урок.

  • @foxanderson7674
    @foxanderson7674 4 года назад

    Вам большое спасибо! Очень просто и понятно)

  • @AdamFullowsky
    @AdamFullowsky 4 года назад

    Здравствуйте, в одном из видео вы говорили, что собираетесь собирать дозиметр. Я тоже хотел бы перенести свой проект дозиметра на stm. В прошлой версии у меня была проблема с помехами из за использования dc-dc с управлением от мк. Скажите где можно для подобных нужд купить трансформатор(желательно smd), и какой способ управления трансформатором лучше, с контроллера или использовать специальную микросхему?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      Я ни в одном из видео не говорил что собираюсь делать дозиметр. С другой стороны если бы это было так, то я не вижу в схеме дозиметра потребности получать какой-либо сигнал с микроконтроллера. Я бы использовал SN6501 или аналогичную микросхему помощнее. Видео было на канале.

  • @andrei1146
    @andrei1146 5 лет назад +1

    Добрый день! Спасибо за Ваши видео! Подскажите, пожалуйста, какой у данного устройства рабочий диапазон температур?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Если вы спрашиваете о рабочем диапазоне GSM модуля M66, то производитель гарантирует от -40 до 80 градусов.
      Если спрашиваете про контроллер, показанный в данном видео, то мы испытывали его в диапазоне от -25 и до 65 градусов. Ниже думаю можно, а вот выше начнутся проблемы с отведением тепла. Ну разумеется это все без выпадения росы.

    • @andrei1146
      @andrei1146 5 лет назад +1

      @@VladimirMedintsev Я спрашивал о устройстве в целом, в котором его части общаются по UART с тактированием от RC-генератора, точность которого, если я не ошибаюсь, около 5% в рабочем диапазоне температур.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +1

      А, вот вы о чем... Если верить 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 5 лет назад

      @@VladimirMedintsev А Вы разве настраивали ABR в этом видео? И на сколько я понял из этого AN, речь идет об автоматическом определении скорости передачи при инициализации, а не о борьбе с плавающей частотой генератора в процессе работы. Кроме того, эта функция относится к приему, а мы не знаем, как отнесется приемник (GSM-модуль) к нашему юарту с плавающей частотой передачи. И на мой вкус запас по стабильности частоты маловат получается в рабочем диапазоне температур. Да и не стоит забывать, что у модуля тоже частота может плавать, и не обязательно в ту же сторону, что у нашего RC-генератора...

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Признаться я даже не знаю что вам на это ответить...
      1. Вот решил я снять видео про UART, надо же его показать в работе. Показанный в видео модуль был взят только ради примера. Пример это не настоящий код. Он дает право на некоторые упрощения не относящиеся к теме видео. А тема - UART.
      2. Если просмотреть видео про компоновку, где я показывал платы модуля более подробно можно на процессорной плате рассмотреть место под кварцы и под процессорный и под кварц RTC.
      3. Как показывает практика кварц там не нужен, модуль был подвергнут температурным тестам и показал свою стабильность.
      4. Модуль успешно продается и с весны 2018 года стоит у нескольких крупных заказчиках и сбоев не зафиксировано. Что доказывает, что наши расчеты оказались верными.
      5. Если просмотреть код, то куб по умолчанию поставил туда строчку huart1.Init.OverSampling = UART_OVERSAMPLING_16; строка находится в uart.c
      6. Разумеется см пункт 1 в боевом модуле, отправляющемся потребителям мало того, что настроена куча приятных штучек, так еще и код полностью отличается от приведенного в примере, и работа с uart в частности.
      Ваш изначальный вопрос про устройство в целом там все работает и отклонения заявленные производителем я вам показал.

  • @oberwerewolf
    @oberwerewolf 5 лет назад +1

    А линии CTS И RTS задействованы? Почему размер массива ограничен 64 байтами? Это размер буфера USART в STM32? В моем понимании если GSM модуль установит CTS в "1" это буде говорить о том, что последний байт о него ушел, и то что следующих ждать не надо и можно остановить заполнение массива.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      На схеме линии CTS и RTS разумеется подключены. Но в настройках UART стоит UART_HWCONTROL_NONE т.е. программно они не задействованы. Мне не хотелось в простом видео про UART залезать в дебри и сложности.
      Контроль передачи это тема для продвинутого видео.
      Размер в 64 байта - так захотелось. Никаких видимых и скрытых причин именно такого размера массива нету.

    • @aleksandrekalandadze8836
      @aleksandrekalandadze8836 5 лет назад

      @@VladimirMedintsev а как в Кейле понять, что GSM модуль установил CTS в "1"? т.е. я могу отправить команду и ждать пока модуль установит CTS в 1 и уже потом читать данные из буфера?

  • @ДмитроПерший
    @ДмитроПерший 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 5 лет назад +1

    Прошлый раз про SWO вы так и не ответили. :(
    Я не вижу, что именно вы пишете в Keil'e для работы SWO.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +2

      Понял, спасибо, сделаю короткий ролик и подробно покажу.

    • @maskon78
      @maskon78 5 лет назад +1

      @@VladimirMedintsev Вот спасибочки!

    • @maskon78
      @maskon78 5 лет назад +1

      Да, и по железу вопрос возник. Где-то увидел фразу, что swo надо подтягивать к плюсу через резистор 10к. Оно правда надо?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Да, к сожалению без этого не работает. У меня подтянуто в программаторе. Ибо постоянно забываю это делать на платах. Хоть памятку на стену вешай.

  • @MrRuroffg
    @MrRuroffg 4 года назад

    Владимир, добрый день. А почему вы все же остались на кейле, хотя намеревались перейти на cube ide?

    • @VladimirMedintsev
      @VladimirMedintsev  4 года назад

      Видимо в каком-то месте случилось недопонимание. Вы поместили свой вопрос под роликом более чем годовой давности. Во время сьемки этого ролика CubeIDE не существовало. Ну а если серьезно то мы перевели коммерческие проекты.

    • @MrRuroffg
      @MrRuroffg 4 года назад

      Прошу прощерия, я очень не внимательный.

  • @DIY_PLC
    @DIY_PLC 2 года назад +1

    Не могу найти работу с юарт по прерыванимям при пакетах с переменной длинной.

    • @zhdanvadim9536
      @zhdanvadim9536 2 года назад +1

      на гитхабе видел репозиторий в котором залиты все варианты работы с юартом, попробуйте найти поиском

  • @irbiit4910
    @irbiit4910 5 лет назад

    а вы не могли бы уточнить как именно работают резисторы на линиях rx, tx usart. Не понял как они согласуют уровни. Можно ли в качестве альтернативы использовать схему согласования уровней на полевых транзисторах. Возможно ли также, как альтернатива, использование, к примеру, TXS0108E или аналогов

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Можно использовать любое решение, вопрос только в цене.
      Здесь собран обычный делитель напряжения построенный на резисторах.
      Все остальные решения более дорогие.

    • @irbiit4910
      @irbiit4910 5 лет назад

      А почему на схеме только один резистор R10, подключённый к линии TX. Резистор на линию RX не нужен?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Нет не нужен.
      Есть ролик ruclips.net/video/ScsY08ZPT78/видео.html в котором я показывал что по этому поводу сказано в даташите на модуль. Но я честно говоря не совсем понимаю что вас смущает.

    • @irbiit4910
      @irbiit4910 5 лет назад

      Спасибо за ответ. Ничто не смущает, я просто этого не знал, поэтому и спрашивал.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Не обращайте внимания, это не единственное чего я сегодня не догнал, погода...

  • @vad741
    @vad741 5 лет назад

    Работает ли printf если отладчик подключен через обычный JTAG, а не SWD?

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Не работает. У JTAG немного другое назначение.

    • @vad741
      @vad741 5 лет назад

      Сейчас работаем по JTAG, и используем Keil. С SWD не работали. Какие минусы и ограничения есть при SWD? Стоит ли переходить в отладке на SWD? Привлекает меньший разъём и printf.

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад

      Ну собственно вопрос не ко мне, а к вам.
      Какого черта вы вообще использовали JTAG и почему вы пользуете большой разъем, а не создали собственную систему разъемов и подключений. Этакий собственный корпоративный стандарт.
      Ну а если серьезно, то возьмите любой процессор, прямо на ноги напаяйте ему SWD, подайте питание и попробуйте. Отладка, перенаправление ввода-вывода, логирование событий и системный монитор - работают. Кто вас знает может вы еще что-то используете. Но если серьезно то я сниму через денек видео про это дело, там и посмотрите надо ли оно вам.

  • @kurtsvl
    @kurtsvl 5 лет назад

    этот модуль поддерживает технологию OPENCPU ему внешний контроллер вообще не нужен

    • @VladimirMedintsev
      @VladimirMedintsev  5 лет назад +1

      Видео про UART для контроллеров STM32

  • @udelka
    @udelka 4 года назад

    Добрый день. Прошу помощи. Есть пример проекта ruclips.net/video/R21GQB8ISSM/видео.html в 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