Jump to content
Sign in to follow this  
Guest Георгий

STM32F746IGT6 и HHTP сервер БЕЗ Web интерфейса

Recommended Posts

Guest Георгий

Всем доброго В.С.

Необходимо сейчас к уже готовому проекту по работе с двигателями, печатной головой, различными датчиками и интерфейсами подрубить сервер для, вот неожиданность, удаленного управления всей этой историей.
Беда в том, что опыта с работой и настройкой сервера на микроконтроллерных платах у меня 0, ноль, зеро. В связи с чем и обращаюсь на данный форум с просьбой направить меня на путь истинный и посоветовать с чего начать и чем закончить (необязательный пункт).

И так, к сути. В наличии STM32F746IGT6 плата с Cortex M7 на борту и хардверной поддержкой Ethernet, разумеется. По скорости, объему памяти и прочему, я думаю смысла расписывать нет. Это целый набор разработчика с кучей периферии (экран, камера, плата с RG-45 разъемом и т.д.) . На ней-то я и планирую развернуть простейший сервер БЕЗ Web страницы (ибо есть десктопное приложение для взаимодействия с платой по методу отправки POST запросов и получения ответов после получения запроса). В наборе со всей этой красотой идет CD диск с КУЧЕЙ разных примеров для этой платы и несколькими примерами сервера в частности. В целом, подогнать готовый проект под необходимые нужды не составило труда - получаем запрос, распарсиваем его, получаем нужные значения и выполняем необходимые операции с механикой. Но тут-то и возникла первая проблема - ответ от сервера присылается в виде html-страницы, что и неудивительно, ведь она размещена на сервере и позволяет манипулировать светодиодами, а ответом является изменение инфы на странице после отправки запроса. Кое-как я заставил сервак не отправлять мне html страницу, а отправить заголовок о том, что все хорошо и данные валидны:

HTTP/1.1 200 OK\r\n Content-Type: text/plain\r\nConnection: close\r\n\r\nData valid!

Но ответ все равно присылается в файле, а строка в нем зацикливается до бесконечности, пока не остановишь его (не разобрался почему так, иногда только Data valid!, а иногда весь Request reply целиком). Вы скажите - "Так не отсылай ответ и все будет нормально"! Но нет, без ответа от сервера клиентское приложение не пустит нас дальше.

Я бы и дальше пилил этот сервер, в недрах которого заплутают даже Гензель и Гретель, но вдруг осознал, что он перегружен всяким ненужным функционалом типа поддержки кастомной fsdata, get-запросов и т.д.). Вот и решил написать, так сказать, свой HTTP/HTTPS(в идеале) сервер с DHCP (без него ни куда), без WEB интерфейса, с поддержкой POST-запросов и без FREERTOS (ну вот так вот нужно) Вот только инфы в интернете оказалось недостаточно (пару примеров под Visual GDB и Keil). Я работаю под Keil и их примеры тоже не подходят, ибо опять-таки содержат тот самый fsdata (начинкой которого является html страница). 

Уважаемые, люди, может кто-то посоветует где наколядовать инфы о том, как развернуть простой сервер с +- таким же функционалом (получил post-запрос, ответил что получил, ждет опять посылку)? Может статьи или книженции, мануалы и т.п.?

Заранее благодарю. Всем добра!

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By rmatveev
      Всем привет!
      Задумано следующее: на малинку ставится веб-сервер (именно веб, а не HTTP, т.к. подразумевается тонкий клиент, но возможно я с терминами немного путаю), который обеспечивает управление через тонкий клиент по Ethernet, по Modbus RTU поверх RS-485 малинка должна будет управлять объектом.
      Т.е. задача такая: на удаленном рабочем месте визуализация объекта и его управление по Modbus.
      Изначально я хотел под это дело использовать какой-нибудь NUCLEO на процессоре STM32. Но почитал немного о подробностях установки TCP-IP стека и веб-сервера на STM32 и понял, что эту задачу они выполняют, но как-то сложновато. Вроде как Raspberry Pi намного лучше с этим должна справиться. Да и комьюнити намного больше.
      Ваши мнения, господа?
    • By 2expres
      Окажу услуги по написанию программ для Raspberry PI и прочих одноплатных ПК. Напишу прошивку для микроконтроллеров Microchip 10F, 12F, 16F, 18F. Создание, проектирование схем, разводка печатных плат, подготовка к серийному выпуску Gerber-файлы. 
      Цены на услуги на сайте написание программ для Raspberry PI
    • By Anton Klapatun
      День добрый!
       
      Имеется sim-карта со статическим IP и модем SIM800C, который через UART соединен с STM32F0.
      Прочитав статью на хабре, которая и являлась отправной точкой, было решено повторить подвиг, но в версии lwip 2.0.3, которой я пользуюсь, ppp изменился до неузнаваемости, что сначала внесло некоторый сумбур. Но в документации к lwip был найден текстовый файл с настройкой ppp-соединения (ppp.txt, прикреплю его ниже), в котором было все, что нужно для счастья, но когда модем начал общаться с контроллером, дальше фазы LCP дело не зашло. Как я понял из документа (ppp_connect.docx), который оказался у меня уже-и-не-помню-откуда, после конфигурирования параметров соединения в фазе LCP контроллер должен посылать в модем пакет с заголовком PAP (C0 23), но он почему-то этого не делает... Он вообще больше ничего не делает. Я пытался проследить в отладчике весь путь запроса, что приходит от модема, но это только больше меня запутало.
      Собственно, прием данных у меня организован через прерывание. После ввода AT-команды "ATD*99***1#" и получения ответа "CONNECT", устанавливается флаг "ppp_enable" и при приходе байта он кладется в очередь `xQueue_PPP_Package`.
      void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { uint8_t u8; if(huart == &huart1) { if (ppp_enable == true) { portBASE_TYPE xHigherPriorityTaskWoken_PPP_Rx; u8 = Sim800.UsartRxTemp; xHigherPriorityTaskWoken_PPP_Rx = pdFALSE; xQueueSendFromISR(xQueue_PPP_Package, &u8, &xHigherPriorityTaskWoken_PPP_Rx); } else { /*Reception of AT commands*/ } HAL_UART_Receive_IT(&huart1,&Sim800.UsartRxTemp,1); } } В задаче `StartLwIPTask` в бесконечном цикле проверяется эта очередь и при появлении элементов, записывает их в массив `PPPx.Data` и при фиксации второго HDLC-заголовка (0x7E), отправляет данные в lwip функцией `pppos_input`.
      P.S. Переменная `PPPx.Last_Index` это размер пришедшего ppp-пакета.
      void StartLwIPTask(void const * argument) { /* USER CODE BEGIN StartLwIPTask */ /*Создаем очередь*/ xQueue_Sim800_Package = xQueueCreate(128, sizeof(uint8_t)); xQueue_PPP_Package = xQueueCreate(128, sizeof(uint8_t)); uint8_t u8=0; volatile int setup = 0; tcpip_init( NULL, NULL ); /*Инициализация стека tcp/ip*/ /*Create a new PPPoS interface*/ ppp = pppos_create(&ppp_netif, output_cb, status_cb, 0); // /* Auth configuration, this is pretty self-explanatory */ ppp_set_auth(ppp, PPPAUTHTYPE_PAP, "beeline", "beeline"); /* Require peer to authenticate */ ppp_set_auth_required(ppp, 1); /*Only for PPPoS, the PPP session should be up and waiting for input.*/ ppp_set_silent(ppp, 1); /* * Initiate PPP listener (i.e. wait for an incoming connection), can only * be called if PPP session is in the dead state (i.e. disconnected). */ ppp_listen(ppp); /* Infinite loop */ for(;;) { if (sim800_init() == S_RESET) /*Настройка модуля Sim800*/ continue; for (;;) { if (pdPASS == xQueueReceive(xQueue_PPP_Package, &u8, 100/portTICK_RATE_MS)) { if (u8 == 0x7E) t++; PPPx.Data[PPPx.Last_Index++] = u8; if (t==2) { PPPx.Last_Index--; pppos_input(ppp, PPPx.Data, PPPx.Last_Index); t=0; memset(&PPPx, 0, sizeof(PPPx)); } } } } /* USER CODE END StartLwIPTask */ } Как я писал выше, все идет хорошо, пока идет фаза LCP, но после подтверждения контроллера запроса опций, наступает тишина.
      В интернете мне удалось найти довольно мало исчерпывающей информации и примеров по связке stm32+lwip+ppp, если кто-нибудь занимался подобным или сталкивался с похожей проблемой, буду очень признателен за помощь и за пинки в нужном направлении. Заранее спасибо.
       
       
      ppp.txt
      ppp_connect.docx
    • By Flash6300
      Всем привет. Подскажите пожалуйста как на электрической принципиальной схеме обозначается сетевой коммутатор (свитч) к которому подключены несколько клиентов, а сам свитч потом соединен с сервером?
    • Guest blackhand
      By Guest blackhand
      Здравствуйте. Недавно возникла потребность в Ethernet бутлоадере для stm32f7.  Гугл на этот счёт обладает крайне скудной информацией, в частности есть наполовину полезная pdf от ST STM32Cube Ethernet IAP example, в которой описана архитектура того, как работает этот бутлоадер в целом и по каким протоколам. Во всём мире существует только один готовый пример такого бутлоадера , который сконфигурирован для stm32f4 и под какую-то из EVAL-отладочную плату. В распоряжении имею отладочную Nucleo-144 на STM32F767ZI, у которой на борту уже есть PHY Ethernet чип.
      А теперь, в чём, собственно, проблема: Простое переназначение ножек в файле ethernetif.c под мою плату (ну я уж не говорю про замену всех библиотек под мой тип МК) не поможет. Пример сделан под PHY Ethernet чип, который общается с контроллером по интерфейсу MII. На Nucleo чип имеет интерфейс RMII , то есть, пинов у него меньше. При изучении кода примера выяснил, что там отлавливается некое внешнее прерывание с отдельной ножки MII чипа, которая соединена с PB14  (Enable PB14 to IT mode: Ethernet Link interrupt). Такой ножки у моего RMII в помине нет, поэтому это прерывание Ethernet Link interrupt просто повисает в воздухе.
      Может кто-нибудь встречался с такой проблемой или имеет готовый рабочий бутлоадер? Был бы благодарен за помощь
  • Сообщения

    • возможно - у меня мало опыта - но как понял они слабое звено в цепи - может ошибаюсь - с учетом не большого опыта - чем лучше сделать условия работы ключей - меньше проблем - в схеме на ир2153 - я применил - с подсказки Сергея диоды на разряд - резисторы между стоком -истоком - результат - практически не греются и даже радиатор на них не ставил - здесь ес все в конечном итоге выйдет с основной схемой шим и зашитой- норм - что предложил - почему-бы не сделать работу ключей более комфортной.имхо
    • Много раз видел такие сообщения от других, про доп диоды, но не разу не встречал пробитые диоды у собственных транзисторов и никогда доп диоды не ставил и в сварочниках да же не видел такого, так что это миф о доп диодах)
    • Клиенту безграмотному я начну с 10-20 у.е. за страницу текста А4 .... и никак иначе ... А пока тебе ответят КНИГИ и ГУГЛЬ, которые ты даже не открывал, но возомнил себя супер-пупер программером, который безотказен для друзей .... Я таких всегда спрашиваю - А если друг уже без девочки пол-года и попросит тебя .... Тоже "возмешь" - ся
    • Делать линейный блок питания с такими характеристиками на микросхемах затруднительно. Слишком уж большие напряжения. Поэтому проще нарисовать схему на дискретных элементах. Расчетные параметры следующие. Выходное напряжение от 13в до 34в и выше. Устанавливается R17R18. Номинальное сопротивление нагрузки 14,45ом. Выходной ток номинальный 2,35А. Выходной ток в режиме ограничения не менее 3,0А. Задается R8. Выходной ток короткого замыкания около 0,2А. Порог распознавания напряжения короткого замыкания не менее 2 вольт. Задается резистором R9. Порог распознавания сопротивления короткого замыкания не менее 1,5ом. Задается резистором R9. Размах пульсаций выходного напряжения от пика до пика около 95мкв. Просадка напряжения при изменении выходного тока от 0А до 2,35А около 1,8мв. Выходное сопротивление около 0,00077ом или 0,77мОм. При изменении входного напряжения от 41в до 91в выходное напряжение изменяется примерно на 6мв (коэффициент стабилизации по напряжению около 4396). Температурный дрейф выходного напряжения около минус 2мв/°C. Минимальное статическое падение напряжения между входом и выходом 7в. Минимальное динамическое падение напряжения между входом и выходом 2в. 00_Bp_30v_80w_Расчетная_модель.pdf BP_34V_80W_Оригиналы_рисунков.zip    
    • @rocker60 , где и кто тут говорил про деление уровня сигнала с генератора?
    • спасибо, но ведь у вас источник 12 вольт, будет эта схема работать на 5 вольтах?
    • Я не знаю, как кто, я подаю на вход сигнал без всяких делителей! Зачем сигнал 250 mV делить на 10. На универсальный вход поступит 25 mV.  Во всех инструкциях и Service Manual как на отечественные, так и на импортные УНЧ и ресиверы вход AUX -250 mV. При таком уровне сигнала и надо проверять УНЧ. Грамотная проверка сигналом прямоугольной формы описана выше
×
×
  • Create New...