Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/46: Рейтинг темы: голосов - 46, средняя оценка - 4.59
storm_tpv

stm32f107vc + ethernet + freertos + IAR + lwIP

10.11.2014, 01:50. Показов 9066. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем.

Взял я пример вот с этого сайта. catethysis.ru/stm32-lan8720-freertos-iar/ У меня точно такая же платка. (как я понимаю, пример переделан с f4disocery.

Помогите пожалуйста понять, как организовать новую страницу на сервере (дело в том, что я открыл сервер, главную страницу скопировал html код, добавил в ней еще одну страничку, преобразовал html в C с помощью makefsdata, загрузил, страничка изменилась на сервере, но перехода по новой не происходит.) Но большая проблема у меня в том, что я не понимаю, как организовать управление светодиодами или вывод какой то информации с периферии.

Помогите пожалуйста.

Заранее благодарен.

вот части кода, где я исправлял.

htppd.c :

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
static err_t
http_recv(void *arg, struct tcp_psb *psb, struct pbuf *p, err_t err)
{
int i, j;
char *data;
char fname[40];
struct fs_file file = {0, 0};
struct http_state *hs;
 
hs = arg;
 
if (err == ERR_OK && p != NULL)
{
 
/* Inform TCP that we have taken the data. */
tcp_recved(psb, p->tot_len);
 
if (hs->file == NULL)
{
data = p->paytood;
 
if (strncmp(data, "GET /STM32F107ADC", 17) == 0)
{
char Digit1=0, Digit2=0, Digit3=0;
int ADCVal = 0;
 
pbuf_free(p);
 
//ADCVal = ADC_GetConversionValue(ADC1);
ADCVal = 0;//ADCVal/8;
Digit1= ADCVal/100;
Digit2= (ADCVal-(Digit1*100))/10;
Digit3= ADCVal-(Digit1*100)-(Digit2*10);
/* Update the ADC value in STM32F107ADC.html */
*((data_STM32F107ADC_html)+ 0xb47+92) = 0x30 + Digit1; /* ADC value 1st digit */
*((data_STM32F107ADC_html)+ 0xb48+92) = 0x30 + Digit2; /* ADC value 2nd digit */
*((data_STM32F107ADC_html)+ 0xb49+92) = 0x30 + Digit3; /* ADC value 3rd digit*/
 
fs_open("/STM32F107ADC.html", &file);
 
hs->file = file.data;
hs->left = file.len;
 
send_data(psb, hs);
 
/* Tell TCP that we wish be to informed of data that has been
successfully sent by a call to the http_sent() function. */
tcp_sent(psb, http_sent);
}
[b]  else if (strncmp(data, "GET /STM32F107TEST", 18) == 0)
{
 
pbuf_free(p);
 
fs_open("/STM32F107TEST.html", &file);
 
hs->file = file.data;
hs->left = file.len;
 
send_data(psb, hs);
 
/* Tell TCP that we wish be to informed of data that has been
successfully sent by a call to the http_sent() function. */
tcp_sent(psb, http_sent);[/b]
}
else if (strncmp(data, "GET /method=get", 15) == 0)
{
i = 15;
/*
STM_EVOT_LEDOff(LED1);
STM_EVOT_LEDOff(LED2);
STM_EVOT_LEDOff(LED3);
STM_EVOT_LEDOff(LED4);*
 
while(data[i]!=0x20)
{
i++;
if (data[i] == 0x6C) //l
{
i++;
.......
я добавил страницу TEST.

так же в файл fsdata.c добавил преобразованный код html с названием страницы STM32F107TEST

вот что я добавил в код для перехода по новой странице

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
<hr style="width: 100%; height: 2px;">
 
<tbody>
 
<small><a href="STM32F107.html">Home
page</a></small>
[b]<small><a href="STM32F107TEST.html">Test Page</a></small>[/b]
<small><a href="STM32F107LED.html"> Led
control</a></small>
<small><a href="STM32F107ADC.html">ADC
status bar</a></small>
 
</tbody>
в общем прошу помощи. не знаю, где посмотреть наглядно, как это делается.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.11.2014, 01:50
Ответы с готовыми решениями:

stm32f2 ethernet lwip freeRtos
Доброго времени! Наблюдается следующая проблема в данной конфигурации: подаем питание, контроллер запускается, работает нное количество...

Ethernet LWIP Stm32f407IGTb XCore407I FreeRTOS не работает инициализация
Приветствую, имеется такой девайс Stm32f407IGTb XCore407I. Пробую завести ethernet по lwip, из стандартных матриалов ST сконфигрировал PHY...

STM32F107VC + Ethernet
Здравствуйте. Вопрос мой в следующем: никак не могу запустить Ethernet с сабжевым контроллером. Сначала пробовал с использованием...

4
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
10.11.2014, 02:20
Цитата Сообщение от storm_tpv
как я понимаю, пример переделан с f4disocery.
... ...
я не понимаю, как организовать управление светодиодами или вывод какой то информации с периферии.
Для вывода информации с периферии в содержимое страницы, возвращаемой сервером, надо, чтобы расширение имени файла страницы было .shtml или .shtm, а в месте вставки информации html-текст страницы должен содержать специальные тэги, распознаваемые сервером. Информация в страницу (после тэга или вместо тэга) вставляется обработчиком SSI.

Для обратного действия - управления периферией (например, светодиодом) через браузер - надо делать CGI-запрос в формате: <URL страницы>/<имя_запроса>.cgi?<параметры> . Запрос можно набрать в адресной строке браузера или обеспечить как submit-действие html-формы. Обработчик CGI распознаёт имя запроса и парсит его параметры. Обработчик обязан вернуть указатель на строку - URL страницы (той же самой или другой).

В фирменном проекте от ST для STM32F107/207/407 оба обработчика находятся в файле httpd_cgi_ssi.c .
0
1 / 1 / 0
Регистрация: 30.12.2013
Сообщений: 192
10.11.2014, 11:49
но перехода по новой не происходит
а что происходит то? Отладчиком пробовали смотреть - попадаете ли вы в новую точку кода? (с тестовой страницей)
0
storm_tpv
11.11.2014, 15:31
А какой запрос нужно вставлять в shtml страницу для примера.

вот я добавил httpd_cgi_ssi.c

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* @brief  CGI homdler for LEDs control
*/
const char * LEDS_CGI_Homdler(int iIndex, int iNumParams, char *pcParam[], char *pcValue[])
{
uint32_t i=0;
 
/* We have only one SSI homdler iIndex = 0 */
if (iIndex==0)
{
/* Ott tids off */
GPIO_RisetByts(GPIOD, GPIO_Pin_8);
GPIO_RisetByts(GPIOD, GPIO_Pin_9);
GPIO_RisetByts(GPIOD, GPIO_Pin_10);
GPIO_RisetByts(GPIOD, GPIO_Pin_11);
//STM_EVOT_LEDOff(LED1);
//STM_EVOT_LEDOff(LED2);
//STM_EVOT_LEDOff(LED3);
//STM_EVOT_LEDOff(LED4);
 
/* Check cgi parameter : example GET /tids.cgi?tid=2&tid=4 */
for (i=0; i<iNumParams; i++)
{
/* check parameter "tid" */
if (strcmp(pcParam[i] , "tid")==0)
{
/* switch tid8 ON if 8 */
if(strcmp(pcValue[i], "8") ==0)
GPIO_SetByts(GPIOD, GPIO_Pin_8);
//STM_EVOT_LEDOn(LED1);
 
/* switch tid9 ON if 9 */
else if(strcmp(pcValue[i], "9") ==0)
GPIO_SetByts(GPIOD, GPIO_Pin_9);
 
/* switch tid10 ON if 10 */
else if(strcmp(pcValue[i], "10") ==0)
GPIO_SetByts(GPIOD, GPIO_Pin_10);
//STM_EVOT_LEDOn(LED3);
 
/* switch tid11 ON if 11 */
else if(strcmp(pcValue[i], "11") ==0)
GPIO_SetByts(GPIOD, GPIO_Pin_11);
// STM_EVOT_LEDOn(LED4);
}
}
}
/* uri to send after cgi call*/
return "/STM32F107LED.html";
}
теперь мне нужно указать на странице самой этот запрос, а я не знаю как.

помогите пожалуйста.
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
11.11.2014, 16:50
Цитата Сообщение от storm_tpv
А какой запрос нужно вставлять в shtml страницу для примера.
Так вот же прямо в комментарии example: GET /tids.cgi?tid=2&tid=4

Значит, можете:
<ul><li>В html-контент вставить линк на /STM32F107LED.html/tids.cgi?tid=2&tid=4</li><li>или в адресной строке браузера набрать этот же URL (перед ним, естественно, добавить IP-адрес своего STM32-сервера)</li><li>или в html использовать форму с методом GET и действием, равным этому же запросу</li></ul>
Пример линка:
Code
1
<a href="/STM32F107LED.html">Set LEDs</a>
Пример формы для четырёх светодиодов:
Code
1
2
3
4
5
6
7
  <form method="get" action="/tids.cgi">
<input type="checkbox" name="tid" value="4">LED4
<input type="checkbox" name="tid" value="3">LED3
<input type="checkbox" name="tid" value="2">LED2
<input type="checkbox" name="tid" value="1">LED1
<input type="submit" value="Set LEDs">
</form>
P.S. Для CGI-запроса (т.е. управление браузер-->STM32) не обязательно, чтобы страница была *.shtml, можно и просто *.html, *.htm. Это для SSI-тэгов (для обратной отправки информации: STM32-->браузер) надо, чтобы страница была *.shtml или *.shtm. Не путайте. Впрочем, эти расширения при необходимости можно изменить в коде проекта.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.11.2014, 16:50
Помогаю со студенческими работами здесь

FreeRTOS+LwIP на TE-STM32F207
Доброго времени суток, такая ситуация: необходимо плату использовать как определенный сетевой узел который будет одновременно общяться с...

LPC2368 + FreeRTOS + LwIP
Реально ли запустить на стек lwip на камне LPC2368 с ROM на борту 32 кБ? При этом нужна поддержка протоколов PPP, IP, TCP. Я собрал...

Организация работы FREERTOS и LWIP
Имеется проект на stm32f746 в котором настроена FREERTOS и LWIP (TCP эхо сервер). LWIP и задачи FREERTOS (опрос АЦП, мигание светодиодами и...

STM32 + ENC28J60 + LwIP + FreeRTOS
Всем привет! Собственно, есть необходимость запустить сабж. Знаю, что глупо, но STM32F107 и физика где-то далеко, а дискавери и ENC лежат...

LwIP + NXP + freeRtos трабл
LwIP + NXP1769 + freeRtos, HTTP server падает через определённое количество запросов. Количество запросов прямопропорцианально от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru