Подключение wifi к stm32

Обновлено: 01.07.2024

Решил свою STM32F4 подключить к WiFi модулю, выбор пал на не дорогой HLK-RM04 совместимый с OpenWirt, а для облегчения освоения, приобрёл его вместе с KIT модулем который можно подключить через COM. (впрочем настроить модуль можно и без KIT)

Обмен данными в самом модуле был проверен через СОМ порт и програмку Serial&TCP/UPD Tool скаченную с сайта производителя WiFi модуля.

А вот дальше решил подключить его по UART к STM32F4.
В STM-ке выбрал USORT3, подключил WiFi_Tx -> STM32F4_Rx и соотвественно WiFi_Rx -> STM32F4_Tx

написал примерный код настройки USORT3 в STM43F4, а для простоты проверки соединения дабы на первых порах не усложнять, решил зажечь диод STM32 при приёме любых данных в регистре.

В stm32f4xx_config.c был выставлен HSE 8 Мгц

Так вот, после всех этих действий, похоже не приходят данные в регистр STM32F4, соотвественно проверочный диод не зажигается, вполне вероятно я что-то напортачил, есть кто работал либо с UART либо с этим модулем, либоо просто какие нибудь мысли которые помоглибы наладить обмен данными между этими двумя устройствами?

P.S.
OpenWirt пока не трогаю, чтобы не усложнять ещё и с этим, а вообще идея заключается в управлении всем этим хозяйством через Android ))
можно было бы конечно выбрать и блютуз модуль, но мне хотелось иметь жирный канал для последующих экспериментов передачи зука, видео и .тп.

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

FreeRTOS+STM32F4 Discovery
Пытаюсь портировать FriiRTOS 7.4.1 под микроконтроллер STM32F407VGT6 в Keil 4.7.0.0. Я получаю.

Микрофон STM32F4 Discovery
Здравствуйте, приобрел себе плату STM32F407VGT6. На ней стоит микрофон. Вопрос: Как с него.

USART1 на STM32F4-Discovery
Пытаюсь настроить USORT1 на STM32F4-Dyscovery. Плата подключена к компьютеру через USB-UART.

STM32F4 discovery не отлаживается
купил подключил к coosox. не отлаживается. пишет - No source available for "" fffffffc: .

Нашёл ошибку, оказывается надо было при настройке USORT добавить ещё строчку :
USORT_Cmd(USORT3,ENABLE);

Теперь при отправке любых данных, срабатывает флаг принятых данных и загорается диод, т.е. тперь хоть понятно стало, что данные попадают в регистр )))

Теперь можно идти дальше ..попробовать управлять диодом по приёму нужного байта, а потом настроить прерывания ))

С простой отправкой вроде бы заработало ))
При отправке на МК по WiFi 0х01 зажигается тестовый синий диод.

А вот прерывания что-то пока не хотят работать.

Возник вот такой вопрос, возможно ли одновременно передавать аудио и управляющие команды?

P.S.
Повнимательней присмотревшись к модулю HLK-RM04, у него имеется два UART, которые настраиваются не завсимо друг от друга. Т.е. один UART можно настроить на один IP адрес со своим портом, другой на другой или же на тот же но на другой порт. Причём один может быть настроен как сервер, другой как клиент или оба как серевера или клиенты.
Т.е. похоже запросто можно настроить один UART для передачи управляющих команд, другой скажем для воспроизведения звука.

Т.е. похоже запросто можно настроить один UART для передачи управляющих команд, другой скажем для воспроизведения звука. Т.е. похоже запросто можно настроить один UART для передачи управляющих команд, другой скажем для воспроизведения звука.

Думаю облом будет со звуком

Думаете скорости UART не хватит?

По идее, можно USORT STM-ки завязать на DMA, скорость соединения самого HLK-RM04 у меня выдаёт 150 Мбит

Кстати сам UART подключил немного на другой скорости, в место 9600 поменял на 115200 (то что было по умолчанию на WiFi модуле, кстати можно и ещё быстрей, главное чтобы погрешность потерь данных была не критичная)
На вскидку сейчас не скажу, но по моему и сам модуль, тоже можно подключить не как UART а как USORT. там кажется есть пин для третьего провода для синхронизации частот тактирования.

На мой взгляд модуль вполне способен потянуть

Т.е. похоже запросто можно настроить один UART для передачи управляющих команд, другой скажем для воспроизведения звука.

Думаете скорости UART не хватит?

По идее, можно USORT STM-ки завязать на DMA, скорость соединения самого HLK-RM04 у меня выдаёт 150 Мбит

Кстати сам UART подключил немного на другой скорости, в место 9600 поменял на 115200 (то что было по умолчанию на WiFi модуле, кстати можно и ещё быстрей, главное чтобы погрешность потерь данных была не критичная)
На вскидку сейчас не скажу, но по моему и сам модуль, тоже можно подключить не как UART а как USORT. там кажется есть пин для третьего провода для синхронизации частот тактирования.

На мой взгляд модуль вполне способен потянуть
Максимальная скорость передачи этим модулем 230400 bps.

Максимальная скорость передачи этим модулем 230400 bps.

Да, я это знаю. но пока не стал его подключать на такую скорость, оставил на 115200

(скорость соединения не воспринимаю как скорость обмена данными, но как бы так она показывает что это не самое узкое место. если конечно верно понимаю)

Решил на практике удостовериться по поводу второго UART и вот тут возникли вопросы.
В даташите обычные пины указываются как UART_Tx(Rx) тут проблем нет, это обычный UART.
А вот другой UART 2 найти не могу, есть только пины RXD(TXD) с пояснением Ott function serial RX(ТХ)
(может именно эти пины вообще не имют ниакого отношения к UART 2)

Однако, открывая настройку HLK_RM04 в браузере, есть такая вкладка которая отвечает за настройку UART 2:

Всё оказалось верно, действительно у этого модуля два UART
Причём по каким-то причинам на оф сайте англоязычные даташиты несколько устаревшие.
В инете нашёл чуть посвежей, для 1.46 прошивки (у меня стоит 1.78) там уже пишут, что у модуля два UART и что пины второго могут работать в двух режимах, как UART 2 или GPIO

По началу я WiFi модуль подключал как точку доступа, т.к. в проге Serial & TCP_UDP Tool почему-то нельзя выставить трёхзначные числа IP адреса, поэтому делал точку доступа вида 11.11.11.11

Если же модуль подключать как клиент (через домашний роутер как обычный ноутбук) то нужно в настройках прилагаемой проги конфигурации выставить параметры вашей сети

Или это выставить через браузер, если настраивается через Web:


В принципе тут те же настройки как в любом роутере.


При такой настройке UART 1 будет доступен по адресу который присвоил домашний роутер или который выставили вы по порту 8080
Первое поле это скорость, оно должно быть такое же как у USORT на контроллере для первого UART.
Второе поле, это режим работы (везде в даташитах они устанавливали как Server)
Ну и сам номер порта, по которому доступен наш UART1


А вот для настройки второго UART 2, необходимо указать отдельно все настройки в соответствующей вкладке там так же, выставить скорость, выставить server, но порт уже будет 8081 (или любой другой какой нужен, но не совпадающий с портом первого uart)

Я по началу не обратил внимание на скорость в UART 2 и оно отличалось, когда я подключил STM-ку к пинам второго UART, у меня естественно ничего не заработало. Потом подсмотрев этот параметр в первом UART, подставил эту строчку и сразу всё завелось, как приём так и передача.

Пины UART 2 будут 22 и 26,по даташиту модуля.

Есть ещё одна особенность меню настроек о которой узнал случайно, если нажать в браузере на надпись WERLESS-N ROUTER IEEE 802.11N то будут доступны дополнительные настройки роутера, типа файерволы управление сетью, доступы и т.д. и т.п. что пресуще любому роутеру.

Ну общее представление для начала работы с этой штукой имеется, более глубоко либо по ходу, либо от задач ))
Эксперименты продолжаются )))

В общем, не знаю понадобиться ли кому, хитрого тут ничего нет, но решил написать как этот модуль WiFi сразу настроить и подсоединить к STM32F4-Dyscovery, достав из коробки с китайскими надписями ))

Что примечательно, так это-то, что к этому маленькому модулю ничего дополнительного не нужно, ну кроме как 4-х или 6-ти проводов.
У него 5 вольтовое питание, что позволяет его подключить к пятиволтовыму пину на STM32F4-Dyscovery, а саму STM запитать от USB компа, за одно и прошивать всё равно понадобиться.

Как только питание подключили через STM32 и модуль "ожил", он становиться виден в WiFi сетях, точнее как новая сеть HI-LINK_, вот к ней то и подключаемся (я использовал ноут, но можно подключиться и чрез смартфон или планшет). Он запросит пароль для соединения, набиваем 12345678.
После подключения к этой сетке, функции админки модуля доступны по адресу который забиваем в браузере 192,168,11,254.
Для входа попросит логин и пароль, вбиваем логин admin, пароль тоже admin (как обычно в роутерах)

Теперь чуток отступлю и напишу про соединения пинов.
На STM32 я подключался к двум USORT, USORT2 пины PA2,PA3 и USORT3 пины PD8,PD9
Так вышло, что сначала я подключил USORT3 к основному UARTу на модуле, а потом USORT2 к дополнительному UART 2 на модуле, поэтому порядок получсился такой:

USORT2 STM32F4 -> UART 2 HLK_RM04
PA2 (Tx) -> Pin 22 (UART2_Rx/GPIO3)
PA3(Rx) -> Pin 26 (UART2_Tx/GPIO5)

Пины модуля HLK-RM04


На скриншоте в рамке выделил значение, которое определяет параметры работы UART:

115200 - это скорость порта
8 - это длинна пакета
n - это значение Parity, т.е. n - NONE, o - ODD, e - EVEN
1 - стоповый бит, значение 0 - без стопового бита

Т.е. всем этим хозяйством запросто можно управлять в WEB режиме для согласования с параметрами контроллера.

Ещё я отметил IP, как я писал выше, программка для теста почему-то не понимает IP вида 192.168.11.254, поэтому рекомендую для временной отладки поставить 11.11.11.11
либо написать свой софт (библиотеки на С++ есть на сайте производителя, там же есть и библиотека для Android)

Теперь раз уж мы подключили два UART, настроим второй.
В браузере есть вкладка, там нужно выставить параметры UART, я не парился и настроил скоросити UART одинаковые и в STM32F4 тоже их выставил одинаковые.
По умолчанию в UART 2 стоит 57600,8,n,1 ставим как и в первом 115200,8,n,1
затем выбираем режим Server и у нас стало доступно изменение порта, я ничего не менял, оставл 8081

Всё, с настройкой модуля закончили, осталось залить прошивку в STM32F4-Dyscovery для проверки правильности соединения портов и вообще на работоспособность.

(Ещё пост добавлю, с картинкой, ссылкой на прогу для управления этим хозяйством и тестовым проектом в CooCox для STM32F4)


Семейство STM32 на сегодняшний день насчитывает 799 различных микроконтроллеров, и это наводит на мысль, что круглая цифра 800 будет достигнута в ближайшее время.

Компания STMicroelectronics анонсировала выход STM32WB. Это двухъядерный микроконтроллер ARM® Cortex®-M-core, первый в новой серии устройств, дополняющей нынешние малопотребляющие MCU STM32 версией с беспроводной связью на борту (рисунок 1). В дополнение к высокопроизводительному ядру ARM Cortex-M4, предназначенному для обработки приложений, новые микроконтроллеры STM32 включают в себя независимое ядро ARM Cortex-M0+ для управления мультипротокольным передатчиком 2,4 ГГц. Дополнительное ядро M0+ реализует технологии Bluetooth 5.0, Thread и IEEE 802.15.4 в параллельном режиме, плюс обеспечивает управление безопасностью. Микроконтроллер STM32WB имеет энергопотребление от 50 мкА/МГц в активном режиме и лишь 600 нА при работающем RTC и сохранении 32 кбайт данных в SRAM. Простота подключения к антенне обеспечивается интегрированным балуном. На выбор разработчику предлагаются кристаллы с увеличенным объемом памяти – 128 или 256 кбайт ОЗУ и 256 кбайт, 512 кбайт или 1 Мбайт Flash-памяти.

Рис. 1. Новый двухъядерный контроллер STM32WB

Рис. 1. Новый двухъядерный контроллер STM32WB

Встроенное радио 2,4 ГГц контролируется ULP-ядром Cortex-M0 и потребляет всего 3,8 мА в режиме приема и 5,5 мА в режиме передачи (при 0 дБм). Максимальная выходная мощность может достигать +6 дБм, обеспечивая увеличенную дистанцию связи. Радиоконтроллер содержит сертифицированные стеки протоколов, включая ST OpenThread и Bluetooth 5 с поддержкой Mesh 1.0. Интерфейс хост-контроллера (HCI) и уровень управления доступом к среде передачи данных (MAC) дают разработчикам возможность самостоятельно выбирать стек Bluetooth Low Energy (BLE) или формат пакетов стандарта IEEE 802.15.4.

Учитывая растущую потребность в повышенной безопасности, компания ST реализовала в STM32WB встроенное хранилище пользовательских ключей, механизм шифрования на эллиптических кривых и аппаратную поддержку 256-битной криптографии AES. В микросхеме имеются механизмы для последующего улучшения потребительских свойств изделий в полевых условиях с использованием безопасного обновления прошивки (SFU) и поддержки Root Secure Service (RSS) для проверки подлинности обновления по воздуху (OTA). В STM32WB используется ноу-хау компании в области малопотребляющей периферии, включая таймеры, компараторы сверхмалого энергопотребления, 12-/16-разрядный SAR ADC, емкостный сенсорный контроллер, ЖК-контроллер и стандартные интерфейсы, такие как USB 2.0 FS (без кристалла), I²C, SPI, аудиоинтерфейс SAI и поддержку Quad-SPI (рисунок 2).

Рис. 2. Преимущества архитектуры микроконтроллера STM32WB

Рис. 2. Преимущества архитектуры микроконтроллера STM32WB

При проектировании устройств на базе STM32WB можно использовать весь арсенал средств разработки экосистемы STM32. Дополнительно ST выпускает новую плату Nucleo STM32WB для ускорения вывода на рынок продуктов с беспроводным интерфейсом. При этом разработчики могут использовать богатый инструментарий, в том числе STM32CubeMX – графический инструмент для конфигурации микроконтроллеров и генерации кода, пакет STM32CubeWB MCU, периферийные драйверы, промежуточное программное обеспечение и готовые примеры кода. Что еще более важно, для поддержки специфической разработки STM32WB добавлен STM32CubeMonitor-RF – специальный инструмент для тестирования радио.


Схема контактов модуля esp8266

В нашем использовании мы используем только 1, 2, 4, 6, 7 и 8 контактов. Контакты 3 и 4 используются при обновлении библиотеки прошивки. Из схемы выводов видно, что ESP8266 в основном использует USART для связи. Скорость передачи модуля по умолчанию - 9600 бод.

2. Проверьте исправность модуля.

Контактное соединение тестового модуля
Модуль WF-ESP8266 Серийный порт
VCC 3V3
GND GND
CH_PD 3V3
UTXD RXD
URXD TXD

После подключения откройте помощника по отладке последовательного порта, отправьте AT и ответьте OK. Модуль нормальный.


После включения модуля включите "WALN" мобильного телефона и просканируйте сигнал Wi-Fi.Если горячая точка, отправленная модулем, может быть отсканирована, модуль в основном нормальный. Эта точка доступа обычно относится к типу «ОТКРЫТАЯ», то есть без пароля, и пользователи могут подключаться и смотреть. После выключения модуля горячая точка исчезает.

3. AT-команды

Говоря о модуле ESP8266 WIFI, нельзя не упомянуть его AT-команду. Затем узнайте об AT-командах.





4. Три режима работы ESP8266

Есть три режима работы ESP8266, а именно

5. Настроить модуль WIFI.

1. Режим AP (сервер) и связь по мобильному телефону

2. Режим станции (клиента) и компьютерная связь

3. Общайтесь с мобильными телефонами в режиме станции (клиента).

Пока настроены три режима.

6. Модуль WIFI привода STM32

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



Подопытная плата Wemos (ESP8266), программироваться будет в IDE Arduino .


Задача такова, нужно соединить STM с ESP, передать на ESP (через интернет) прошивку, далее ESP должна подтянуть BOOT_0 к «плюсу», нажать ресет, и загрузить прошивку в STM через USART_1. Однако прежде надо научится общаться с системным загрузчиком — там не всё так просто как мне думалось по началу, но и сложного ничего нет. Вот мануал на русском языке (обязательно прочтите), описывающий протокол обмена данными между бутлоадером и внешним устройством.

В мануале говориться что максимальная скорость USART'а не должна превышать 115200 (при увеличении растет погрешность). В примере я указал 57600 так как такая скорость используется по умолчанию утилитой stm32flash. Тем не менее плата успешно прошивалась даже на скорости 921600.

Чтобы «договориться» с загрузчиком, нужно послать ему один байт (0x7F), загрузчик принимает этот байт и по нему распознаёт скорость USART'а. Если байт успешно принят (скорость определена), то загрузчик в ответ посылает байт подтверждения 0x79 — ACK-байт . После этого можно посылать загрузчику различные команды. Большая часть команд состоит из двух байт. На все команды, если они успешно выполнены, загрузчик отвечает байтом подтверждения.


Прежде чем браться за ESP, я написал программу для Arduino Mega (и для stm тоже), чтоб потренироваться «разговаривать» с загрузчиком…

Загружаемая прошивка хранится на SD карте.

Serial1 — соединён с USART'ом stm32. Настраивается на работу с битом чётности (SERIAL_8E1).

Serial — смотрим отладочную инфу, и «рулим» ардуиной.

WRITE_ADDR — начальный адрес для загрузки новой прошивки.

SIZE_WRITE — прошивка загружается в stm блоками, максимальный размер блока 256 байт.

Передача каждого блока происходит так: передаётся команда (0x31, 0xCE), в ответ приходит байт подтверждения, передаётся адрес по которому будет записан блок (адрес каждого последующего блока сдвигается на длину размера блока), в ответ приходит байт подтверждения, передаётся блок, в ответ приходит байт подтверждения, и т.д. Соответственно, чем больше размер блока, тем меньше будет промежуточных операций.

Файл размером 64Кб, на скорости 57600, прошивается за

Я где-то встречал неподтверждённую инфу, что у некоторых МК максимальный размер блока 128 байт.

FIRMWARE — название файла (прошивки). Программа работает только с bin-файлами .

D5 — реле для управления BOOT_0.



2 — на пин BOOT_0. У платы BluePill это центральный штырёк, на который надет джампер.
3 — на «минус».
1 — на «плюс».

В отключённом состоянии будет тянуть BOOT_0 на «минус», а при включении на «плюс».

D6 — управляет ресетом. Коротит ресет на «минус» через NPN транзистор.




RX и TX нужно подтянуть к «плюсу» резисторами



Подключайте все железки, прошивайте ардуину, открывайте и отправляйте ей команды…

B — активирует загрузчик (подтягивает BOOT_0 к «плюсу»), нажимает ресет, отправляет байт для определения скорости (0x7F) и ожидает ACK-байт. Если ACK-байт пришёл, значит МК готов к приёму команд.

R — деактивирует загрузчик и нажимает ресет.

E — посылает команду очистки всей памяти.

W — загружает прошивку в stm32. Сначала вызывается функция очистки памяти — erase_memory() , и если ACK-байт вернулся, то происходит открытие файла, которое тоже проверяется. Далее в бесконечном цикле отправляется команда на запись, потом начальный адрес для записи первого блока (вместе с контрольной суммой адреса), а потом из файла читается блок, создаётся контрольная сумма блока, и это отправляется в stm. Если файл не закончился, то цикл повторяется. При каждом следующем цикле адрес для записи смещается на длину блока. Так повторяется до тех пор пока файл не закончится. Все действия постоянно проверяются на возврат ACK-байта. Если всё прошло успешно, то загрузчик отключается и нажимается ресет, то есть МК переводится в рабочее состояние.




Обязательно укажите — «Нет конца строки».

Если SD-карты нет, то просто поклацайте релюшкой и ресетом с помощью последних трёх команд, или добавьте в код команды для запуска существующей в МК прогрограммы и вывода ID…

Войдите в режим бутлоадера и пошлите символ g или i.

Если же и ардуины нет, то вот то же самое для stm32. В архиве два примера, один с SD-картой, другой без — просто отправка команд. Общение с целевой платой сделано через USART_1, логи и управление через USB. Карта подключается к SPI2. Весь механизм прописан в файле to_stm.c

ESP подключается так же как и ардуина…



С протами вывода здесь всё наоборот, Serial работает с stm, а Serial1 (в ESP у Serial1 есть только TX) печатает логи (они закомментированы).

Всё что касается работы с сетью, взято из стандартного примера FSBrowser , и немного переработано. Код из ардуины полностью перенесён в ESP с той лишь разницей, что управление и загрузка прошивки осуществляется через веб-интерфейс, а вместо SD-карты используется SPIFFS . Про работу с SPIFFS в частности, и про ESP в целом, я подробно писал здесь.


Скачиваем архив и загружаем папку data в ESP как это описано по ссылке выше. В программе вписываем название прошивки, имя своей точки доступа и пароль. Прошиваем ESP и заходим в браузер по аресу esptostm32.local/ …



Загружаем файл прошивки — Обзор ⇨ Upload, ждём когда он появится в левой колонке, жмём Enter boot и при положительном ответе жмём Write. МК прошьётся и перейдёт в обычный режим работы. При последующем обновлении нужно удалить прежний файл правой кнопкой мышки и загрузить новый.

Если в прошивке добавить, перед бесконечным циклом, вывод какой-либо инфы в USART, например так…

… тогда после прошивки это будет выводится в веб-интерфейс, сообщая об успешном обновлении. При дальнейших обновлениях будете изменять версию.

Как вы помните, USART системного загрузчика работает с битом чётности, однако в прошивке учитывать это не нужно, настраивайте как обычно…


… а в функции write_memory() специально для этого сделана переинициализация Serial'а .


С помощью кнопок Reset , On boot и Off boot можно обресетить МК или включить/отключить бутлоадер, но по большому счёту они и не нужны, так, на всякий случай. Кнопка Event вообще ничего не делает (только возвращает «ОК»), мало ли кто-то захочет какую-то функцию прикрутить.


На этом всё.



Всем спасибо

Читайте также: