OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 15264|回复: 40

问个关于stm32 奇葩的问题 stm32可以支持HTML吗?如果不可以,什么样的MCU可以做到?

[复制链接]

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
发表于 2013-6-14 09:33:00 | 显示全部楼层 |阅读模式
          stm32可以支持HTML吗?如果不可以,什么样的MCU可以做到?
          就是说:一个html网页文件,能够通过stm32显示出来?求大神推荐MCU。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

27

主题

774

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1474
金钱
1474
注册时间
2013-4-12
在线时间
77 小时
发表于 2013-6-14 10:18:26 | 显示全部楼层
简单是多么的快乐,而快乐就因你而简单!微芯动力LTKKS
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2613
金钱
2613
注册时间
2011-1-25
在线时间
176 小时
发表于 2013-6-14 10:19:44 | 显示全部楼层
要跑系统吧。。
一直努力就很好。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-14 10:25:43 | 显示全部楼层
移植 UIP,在TCP基础上 解析HTTP协议,HTML文件放在SD卡上,或转成数组存FLASH,
1-1
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 10:57:46 | 显示全部楼层
回复【2楼】LTKKS:
---------------------------------
谢谢 但是stm32貌似只有人移植过ucos-II吧  安卓相对于stm32  太显高端。一定要跑系统才能实现网页浏览器吗?我所说的浏览网页是指本地网页文件。谢谢指教。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 10:58:16 | 显示全部楼层
回复【3楼】qq942266575:
---------------------------------
具体的呢?ucos-II可以实现吗?
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 10:59:52 | 显示全部楼层
回复【4楼】mygod:
---------------------------------
UIP  呵呵  谢谢不了解  我去查查看。不知道你提的建议是否在stm32的基础上?或者是其他什么MCU。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-14 13:27:05 | 显示全部楼层
回复【7楼】czs:
-------------------------------
做些简单的应该可以,移植UIP后,在STM32上创建个服务器,PC端浏览器通过输入IP-端口(stm32上的IP地址),进行连接,SMT32上解析相应的GET,POST请求 比如控制LED,调LCD背光啥的,
1-1
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 13:50:42 | 显示全部楼层
回复【8楼】mygod:
----------------------------
谢谢,我的目的是这样的:做一个接收机,将网页信息无线接收,解码后,在以stm32为mcu的接收机上浏览网页。说白了就是问,能不能在stm32上实现网页浏览器。  不需要和PC机连接。因为接收机是移动无线接收数据(网页)的。不知道大家有无好的建议?

注:前面说的接收、解码部分不考虑,做好了,现在为了扩展网页浏览数据业务。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 13:52:15 | 显示全部楼层
回复【8楼】mygod:
---------------------------------
还有就是,单纯的网页浏览器需不需要移植UIP?
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 15:14:14 | 显示全部楼层
原理其实不难....   守先要能进行TCP/IP通信.   ARP表的沟通及更新.     再来就是对于 TCP 端口80进行监听.   然后浏览器端与服务器端会进行沟通就完成的web服务器的初步功能.
详细的过程如:




HTTP(HyperText Transfer rotocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务器)请求信息和服务,HTTP目前协议的版本是1.1.HTTP是一种无状态的协议,无状态是指Web浏览器和Web服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后Web服务器返回响应(response),连接就被关闭了,在服务器端不保留连接的有关信息.HTTP遵循请求(Request)/应答(Response)模型。Web浏览器向Web服务器发送请求,Web服务器处理请求并返回适当的应答。所有HTTP连接都被构造成一套请求和应答。

HTTP使用内容类型,是指Web服务器向Web浏览器返回的文件都有与之相关的类型。所有这些类型在MIME Internet邮件协议上模型化,即Web服务器告诉Web浏览器该文件所具有的种类,是HTML文档、GIF格式图像、声音文件还是独立的应用程序。大多数Web浏览器都拥有一系列的可配置的辅助应用程序,它们告诉浏览器应该如何处理Web服务器发送过来的各种内容类型。

HTTP通信机制是在一次完整的HTTP通信过程中,Web浏览器与Web服务器之间将完成下列7个步骤:

(1) 建立TCP连接

在HTTP工作开始之前,Web浏览器首先要通过网络与Web服务器建立连接,该连接是通过TCP来完成的,该协议与IP协议共同构建Internet,即著名的TCP/IP协议族,因此Internet又被称作是TCP/IP网络。HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能,才能进行更层协议的连接,因此,首先要建立TCP连接,一般TCP连接的端口号是80

(2) Web浏览器向Web服务器发送请求命令

一旦建立了TCP连接,Web浏览器就会向Web服务器发送请求命令

例如:GET/sample/hello.jsp HTTP/1.1

(3) Web浏览器发送请求头信息

浏览器发送其请求命令之后,还要以头信息的形式向Web服务器发送一些别的信息,之后浏览器发送了一空白行来通知服务器,它已经结束了该头信息的发送。

(4) Web服务器应答

客户机向服务器发出请求后,服务器会客户机回送应答,

HTTP/1.1 200 OK

应答的第一部分是协议的版本号和应答状态码

(5) Web服务器发送应答头信息

正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。

(6) Web服务器向浏览器发送数据

Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

(7) Web服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码

Connection:keep-alive

TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。

    

HTTP请求格式

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息,HTTP请求信息由3部分组成:

l 请求方法URI协议/版本

l 请求头(Request Header)

l 请求正文

下面是一个HTTP请求的例子:

GET/sample.jspHTTP/1.1

Accept:image/gif.image/jpeg,*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

 

username=jinqiao&password=1234

 

(1) 请求方法URI协议/版本

请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。

根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

(2) 请求头(Request Header)

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长度等。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

(3) 请求正文

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。

HTTP请求方法我这里只讨论GET方法与POST方法

l GET方法

GET方法是默认的HTTP请求方法,我们日常用GET方法来提交表单数据,然而用GET方法提交的表单数据只经过了简单的编码,同时它将作为URL的一部分向Web服务器发送,因此,如果使用GET方法来提交表单数据就存在着安全隐患上。例如

Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

从上面的URL请求中,很容易就可以辩认出表单提交的内容。(?之后的内容)另外由于GET方法提交的数据是作为URL请求的一部分所以提交的数据量不能太大

OST方法

POST方法是GET方法的一个替代方法,它主要是向Web服务器提交表单数据,尤其是大批量的数据。POST方法克服了GET方法的一些缺点。通过POST方法提交表单数据时,数据不是作为URL请求的一部分而是作为标准数据传送给Web服务器,这就克服了GET方法中的信息无法保密和数据量太小的缺点。因此,出于安全的考虑以及对用户隐私的尊重,通常表单提交时采用POST方法。

  从编程的角度来讲,如果用户通过GET方法提交数据,则数据存放在QUERY_STRING环境变量中,而POST方法提交的数据则可以从标准输入流中获取。

HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是:

l  协议状态版本代码描述

l  响应头(Response Header)

l  响应正文

下面是一个HTTP响应的例子:

HTTP/1.1 200 OK

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

 

<html>
<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>
协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功):

HTTP/1.1 200 OK
响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:

   Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

响应正文响应正文就是服务器返回的HTML页面:

  <html>
<head>

<title>HTTP响应示例<title>

</head>

<body>

Hello HTTP!

</body>

</html>

响应头和正文之间也必须用空行分隔。  

l HTTP应答码

   HTTP应答码也称为状态码,它反映了Web服务器处理HTTP请求状态。HTTP应答码由3位数字构成,其中首位数字定义了应答码的类型:

   1XX-信息类(Information),表示收到Web浏览器请求,正在进一步的处理中

   2XX-成功类(Successful),表示用户请求被正确接收,理解和处理例如:200 OK

3XX-重定向类(Redirection),表示请求没有成功,客户必须采取进一步的动作。

4XX-客户端错误(Client Error),表示客户端提交的请求有错误 例如:404 NOT 

Found,意味着请求中所引用的文档不存在。

5XX-服务器错误(Server Error)表示服务器不能完成对请求的处理:如 500

对于我们Web开发人员来说掌握HTTP应答码有助于提高Web应用程序调试的效率和准确性。

 

安全连接

Web应用最常见的用途之一是电子商务,可以利用Web服务器端程序使人们能够网络购物,需要指出一点是,缺省情况下,通过Internet发送信息是不安全的,如果某人碰巧截获了你发给朋友的一则消息,他就能打开它,假想在里面有你的信用卡号码,这会有多么糟糕,幸运的是,很多Web服务器以及Web浏览器都有创立安全连接的能力,这样它们就可以安全的通信了。

通过Internet提供安全连接最常见的标准是安全套接层(Secure Sockets layer,SSl)协议。SSL协议是一个应用层协议(和HTTP一样),用于安全方式在Web上交换数据,SSL使用公开密钥编码系统。从本质讲,这意味着业务中每一方都拥有一个公开的和一个私有的密钥。当一方使用另一方公开密钥进行编码时,只有拥有匹配密钥的人才能对其解码。简单来讲,公开密钥编码提供了一种用于在两方之间交换数据的安全方法,SSL连接建立之后,客户和服务器都交换公开密钥,并在进行业务联系之前进行验证,一旦双方的密钥都通过验证,就可以安全地交换数据。

//----------------------------------------------------------------------------------------------

HTTP协议状态码的含义 

  号码 含义 
----------------------------------------- 
"100 ": Continue 
"101 ": witching rotocols 
"200 ": OK 
"201 ": Created 
"202 ": Accepted 
"203 ": Non-Authoritative Information 
"204 ": No Content 
"205 ": Reset Content 
"206 ": artial Content 
"300 ": Multiple Choices 
"301 ": Moved ermanently 
"302 ": Found 
"303 ": See Other 
"304 ": Not Modified 
"305 ": Use roxy 
"307 ": Temporary Redirect 
"400 ": Bad Request 
"401 ": Unauthorized 
"402 ": ayment Required 
"403 ": Forbidden 
"404 ": Not Found 
"405 ": Method Not Allowed 
"406 ": Not Acceptable 
"407 ": roxy Authentication Required 
"408 ": Request Time-out 
"409 ": Conflict 
"410 ": Gone 
"411 ": Length Required 
"412 ": recondition Failed 
"413 ": Request Entity Too Large 
"414 ": Request-URI Too Large 
"415 ": Unsupported Media Type 
"416 ": Requested range not satisfiable 
"417 ": Expectation Failed 
"500 ": Internal Server Error 
"501 ": Not Implemented 
"502 ": Bad Gateway 
"503 ": Service Unavailable 
"504 ": Gateway Time-out 
"505 ": HTTP Version not supported
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 15:18:56 | 显示全部楼层
但目前使用单片机做简单web服务器,  最大的困扰是.    大部份开放的源代码 例如 uIP等等,   都不支持多封包的传送.

这也是目前我的专案较困难还没有实现的地方.

不支持分包发送或接收的话,  意谓著所有命令传送都将受限于 MTU 的大小,  也就是大约 1,500 个字元.

但如果想把页面做漂亮一点,  随便都会超过这个大小.     所以 ,   如果要能比较完整实现WEB服务器.

必须先找到能支持拆包及组包的代码加以应用才算完美方案 .
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-14 15:24:42 | 显示全部楼层
如果这样的话,用STM32吃力了,RAM 根本 不够用,
1-1
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 15:24:50 | 显示全部楼层
汗。。。谢谢大家,我对网络知识认识太少了。
这样问吧:PC机上有IE或者其他的网页浏览器,可以在断网的时候打开本地网页。想问大家的是,能不能在stm32上实现浏览本地网页的功能?
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 15:27:00 | 显示全部楼层
回复【13楼】mygod:
---------------------------------
哦。谢谢哈。如果不考虑ram的大小,假设一个有足够大小的ram的mcu。是不是也必须有操作系统啊?
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 15:27:17 | 显示全部楼层
STM32C8  ,  64K FLASH + 20K RAM  要跑单一个网页,   绝对是够了.........
速度措措有馀啊!!!!!


我现在就已经实现了...

但如果要写JAVASCRIPT语法, 让网页功能更多或者更花俏一点.    必须突破单一封包MTU大小限制才能办的到(拆需要有拆包/组包功能)

单就 STM32  72MHZ这样条件来说.   实现简单网页完完全全没问题的.
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 15:28:04 | 显示全部楼层
RAM 根本不是实现网页的必要条件啊!!!!!!

别听别人乱说混淆了.
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 15:29:01 | 显示全部楼层
MTU  大小才多少?   最多 1,500 字元. =  1.5K 左右.

STM32 即使 C8这一级,  RAM都还有将近20K.         措措有馀啦!!!!!!!!!!!!!
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 15:29:38 | 显示全部楼层
回复【16楼】liuje:
---------------------------------
谢谢。如果只是你说的,实现简单的网页浏览。你用的是什么语言写的?可否借鉴下呢?
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

25

主题

683

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1351
金钱
1351
注册时间
2012-4-25
在线时间
195 小时
发表于 2013-6-14 15:31:24 | 显示全部楼层
用STM32做WEB服务器 是件吃力不讨好的事情,换个高级平台 +操作系统,大把现成的 WEB服务器源码,直接下载过来移植就行了,
1-1
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 15:33:32 | 显示全部楼层
回复【18楼】liuje:
---------------------------------
目前 我只会C  请问你用操作系统了吗?还是裸机的啊。。。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-14 15:35:38 | 显示全部楼层
回复【20楼】mygod:
---------------------------------
哦,但是,成本要考虑的。如果实在不行,只能换平台了。。。囧。。。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 16:30:51 | 显示全部楼层
简单实现WEB网页只需要使用 HTML代码.    再简单不过了 .

一辆5万块的车, 它肯定能开 ;    一辆50万的车, 它也能开.    都叫车.     全看你想怎么应用它以及定位它的价值性...

底下就是我的部份代码,  真的再简单不过了......


unsigned int print_webpage(unsigned char *bu3 )
{

    unsigned int plen;
/* 新建一個網頁,就像新建一個文件一樣 */
    plen=fill_tcp_data_p(buf,0,PSTR("HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nPragma: no-cache\r\n\r\n"));

/*  定義網頁為UTF-8編碼 */
plen=fill_tcp_data_p(buf,plen,PSTR("<meta http-equiv=""Content-Type"" content=""text/html; charset=BIG5"" />"));

/*  定義網頁每隔5秒自動更新一次畫面 */
plen=fill_tcp_data_p(buf,plen,PSTR("<META HTTP-EQUIV=""refresh"" content=""5;URL=/"">"));
 
/* 在網頁正中央填寫信息 */
  plen=fill_tcp_data_p(buf,plen,PSTR("<title>STM32嵌入式WEB控制界面</title>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<font size=""6"" color=#FF0000>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<center><p><u><b> MODBUS溫控器WEB遠端監控測試</p></u></b></center> "));
plen=fill_tcp_data_p(buf,plen,PSTR("<font size=""5"" color=""0x00ff"">"));

plen=fill_tcp_data_p(buf,plen,PSTR("<hr>"));

/*-----------------------------------------------------------------------------------------------------*/
/*----------------------------------------室內溫控器狀態值監控-------------------------------------------------*/
plen=fill_tcp_data_p(buf,plen,PSTR("<center><p><i>MODBUS溫控器狀態監控[IP1]</i></p></center>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<center><font size=5> 室內溫度:</font>"));
  plen=fill_tcp_data_p(buf,plen,PSTR("<font size=5>"));
sprintf(tmp1,"%d.%d",IP[1].rt/10,IP[1].rt%10);
plen=fill_tcp_data(buf,plen,tmp1);
plen=fill_tcp_data_p(buf,plen,PSTR("</font>"));

plen=fill_tcp_data_p(buf,plen,PSTR("<center><font size=5> 設定溫度:</font>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<font size=5>"));
sprintf(tmp1,"%d.%d",IP[1].st/10,IP[1].st%10);
plen=fill_tcp_data(buf,plen,tmp1);
plen=fill_tcp_data_p(buf,plen,PSTR("</font>"));

   plen=fill_tcp_data_p(buf,plen,PSTR("<center> <form method =get><input type=submit name=""POWER1"" size=7 value=""電源開關"">"));
plen=fill_tcp_data_p(buf,plen,PSTR(" 電源狀態:"));

    if (IP[1].power)
   plen=fill_tcp_data_p(buf,plen,PSTR("<img src=""http://114.34.224.204/pic/ON-1.gif"" />")); 
else
    plen=fill_tcp_data_p(buf,plen,PSTR("<img src=""http://114.34.224.204/pic/OFF-1.gif"" />")); 

 
  plen=fill_tcp_data_p(buf,plen,PSTR("<center> <form method =get><input type=submit name=""FANSPEED1"" size=7 value=""風速切換"">"));
plen=fill_tcp_data_p(buf,plen,PSTR(" 風    速:"));
sprintf(tmp1,"%s",fanspeed[IP[1].fanspeed]);
plen=fill_tcp_data(buf,plen,tmp1);

plen=fill_tcp_data_p(buf,plen,PSTR("<center> <form method =get> <input type=submit name=""MODE1"" size=7 value=""模式切換"">"));
plen=fill_tcp_data_p(buf,plen,PSTR(" 工作模式:"));
sprintf(tmp1,"%s",mode[IP[1].mode]);
plen=fill_tcp_data(buf,plen,tmp1);
 
plen=fill_tcp_data_p(buf,plen,PSTR("<center><p><i>MODBUS溫控器狀態監控[IP2]</i></p></center>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<center><font size=5> 室內溫度:</font>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<font size=5>"));
sprintf(tmp1,"%d.%d",IP[2].rt/10,IP[2].rt%10);
plen=fill_tcp_data(buf,plen,tmp1);
plen=fill_tcp_data_p(buf,plen,PSTR("</font>"));

plen=fill_tcp_data_p(buf,plen,PSTR("<center><font size=5> 設定溫度:</font>"));
plen=fill_tcp_data_p(buf,plen,PSTR("<font size=5>"));
sprintf(tmp1,"%d.%d",IP[2].st/10,IP[2].st%10);
plen=fill_tcp_data(buf,plen,tmp1);
plen=fill_tcp_data_p(buf,plen,PSTR("</font>"));

plen=fill_tcp_data_p(buf,plen,PSTR("<center> <form method =get><input type=submit name=""POWER2"" size=7 value=""電源開關"">"));
plen=fill_tcp_data_p(buf,plen,PSTR(" 電源狀態:"));

  if (IP[2].power)
   plen=fill_tcp_data_p(buf,plen,PSTR("<img src=""http://114.34.224.204/pic/ON-1.gif"" />")); 
else
    plen=fill_tcp_data_p(buf,plen,PSTR("<img src=""http://114.34.224.204/pic/OFF-1.gif"" />")); 


  plen=fill_tcp_data_p(buf,plen,PSTR("<center> <form method =get> <input type=submit name=""FANSPEED2"" size=7 value=""風速切換"">"));
plen=fill_tcp_data_p(buf,plen,PSTR(" 風    速:"));
sprintf(tmp1,"%s",fanspeed[IP[2].fanspeed]);
plen=fill_tcp_data(buf,plen,tmp1);

plen=fill_tcp_data_p(buf,plen,PSTR("<center> <form method =get> <input type=submit name=""MODE2"" size=7 value=""模式切換"">"));
plen=fill_tcp_data_p(buf,plen,PSTR(" 工作模式:"));
sprintf(tmp1,"%s",mode[IP[2].mode]);
plen=fill_tcp_data(buf,plen,tmp1);
     
    return(plen);
}
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-14 16:33:25 | 显示全部楼层
使用部份uIP代码就能做到,  重点是  ENC28J60驱动,  ARP表的更新, ICMP的回应(回应PING命令) ..     然后监听端口80.

解读HTML开头起始字串.       然后送出以上页面,     丢出封包,  浏览器就看到画面啦.      难吗?       一点也不 ...
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-6-15 00:26:24 | 显示全部楼层
楼上高手.
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-15 08:59:09 | 显示全部楼层
回复【25楼】正点原子:
---------------------------------
不知道 原子哥有何高见?
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-15 09:16:02 | 显示全部楼层
回复【24楼】liuje:
---------------------------------
谢谢哈  但是我的任务是 在stm32上实现本地网页(简单的html)打开.不需要与计算机进行通信,那uIP,ENC28J60 ARP, ICMP,端口80此类东西(对网络知识不懂)是不是就不要考虑呢。要做的就是将网页显示出来。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2013-6-15 09:44:33 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-15 09:59:28 | 显示全部楼层
回复【28楼】xouou_53320:
---------------------------------
谢谢哈。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

46

主题

1579

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1970
金钱
1970
注册时间
2011-7-17
在线时间
4 小时
发表于 2013-6-15 13:31:11 | 显示全部楼层
回复【楼主位】czs:
---------------------------------
能,主要看你软件怎么写,如果你嫌弃外部ram不够大,你直接用flash当ram用也行,如果嫌慢,你用A8吧
Time?And?Relative?Dimension?In?Space.
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-15 21:01:36 | 显示全部楼层
回复【27楼】czs:

回复【24楼】liuje:
---------------------------------
谢谢哈  但是我的任务是 在stm32上实现本地网页(简单的html)打开.不需要与计算机进行通信,那uIP,ENC28J60 ARP, ICMP,端口80此类东西(对网络知识不懂)是不是就不要考虑呢。要做的就是将网页显示出来。

---------------------------------


当然是不行啊...    IP/ARP/ICMP/TCPIP  以及监听端口80 .     无论如何必须按步就班都处理好了.   最后才是送出 TCP封包,  里头就是 HTML 码或者Javascript也行 .
前面的工作占了80%呢...      真正html输出才占20%....        只是说前面这些部份比较能够找到现成的,  把 网路模块SPI I/O对应修改一下,  以及IP/MAC/GATEWARE与你的
局网匹配一下.    就能拿来直接套用了.    

最简单就是用uIP ,  或者 LWIP,   但很可惜这两个都没半法实现 TCP封包的 拆包/组包(或称分片/组片)这样的功能.         所以你HTML输出部份永远没办法超过一个标准封包大小
也就是MTU的限制 ->  大约 1,500 个字元 .
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-15 21:10:08 | 显示全部楼层
底下是我的HTML运行画面 (今天没接上设备) .      我目前也一直在找突破MTU限制的方法,  也就是必须能支持TCP封包拆包/组包的协议栈.

不知有人用过吗?    如果能实现,  我们可以利用STM32做出功能很完整, 画面也很漂亮的远程监控 Web site 喔  .




回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-15 21:25:48 | 显示全部楼层
今天有看到这篇文章介绍,  分享一下.   希望高手们也一起来研究研究 拆包与组包,  造福我们这些初学者 .........

我尝试移植了网路下载的 LWIP协议栈,  想用在原子的mini下运行看看 (另外有enc28j60模块) .   还没有成功.

因为我对STM32整体架构还不熟...      有兴趣的一起来研究看看 .

(附上LWIP网上下载的程序)







STM32F103+UCOSII+LWIP.zip

9.13 MB, 下载次数: 581

回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-16 13:01:06 | 显示全部楼层
回复【31楼】liuje:
---------------------------------
回复【31楼】liuje:
回复【27楼】czs: 回复【24楼】liuje: --------------------------------- 谢谢哈  但是我的任务是 在stm32上实现本地网页(简单的html)打开.不需要与计算机进行通信,那uIP,ENC28J60 ARP, ICMP,端口80此类东西(对网络知识不懂)是不是就不要考虑呢。要做的就是将网页显示出来。 --------------------------------- 当然是不行啊...    IP/ARP/ICMP/TCPIP  以及监听端口80 .     无论如何必须按步就班都处理好了.   最后才是送出 TCP封包,  里头就是 HTML 码或者Javascript也行 . 前面的工作占了80%呢...      真正html输出才占20%....        只是说前面这些部份比较能够找到现成的,  把 网路模块SPI I/
......
       不是吧?那计算机在没有联网的情况下打开本地网页,是怎么实现的呢?还不是没有用到你说的前面的工作。---------------------------------
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-16 15:40:53 | 显示全部楼层
那是离线缓存的关系啊.    这是PC上的浏览器额外提供的功能.     只要是线上浏览,  浏览器与服务器这两端, 都必须一来一往,  一要一给.    多一少一 都不行的.
以uIP或lwip来说, 每次一来一往,  TCP封包都在1,500个字节以内 .
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-16 20:40:47 | 显示全部楼层
回复【35楼】liuje:
---------------------------------
那 我用个stm32应该就不可以实现你说的  离线缓存方式的打开网页了吧?   但是如果用6410等高级的平台加上linux系统可不可以实现打开本地网页的功能呢?  呵呵,其实我问的主要是这个。不连接网络的时候,嵌入式平台到底能不能打开本地网页。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

36

主题

118

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
282
金钱
282
注册时间
2012-3-23
在线时间
0 小时
 楼主| 发表于 2013-6-16 20:41:31 | 显示全部楼层
回复【35楼】liuje:
---------------------------------
特别谢谢你的热心回答。
天天实验室   却无成就。。。。。惨蛋!  感谢opendv的所有大虾。。
回复 支持 反对

使用道具 举报

4

主题

119

帖子

0

精华

初级会员

Rank: 2

积分
169
金钱
169
注册时间
2013-4-6
在线时间
3 小时
发表于 2013-6-16 21:26:27 | 显示全部楼层
回复【36楼】czs:

回复【35楼】liuje:
---------------------------------
那 我用个stm32应该就不可以实现你说的  离线缓存方式的打开网页了吧?   但是如果用6410等高级的平台加上linux系统可不可以实现打开本地网页的功能呢?  呵呵,其实我问的主要是这个。不连接网络的时候,嵌入式平台到底能不能打开本地网页。

---------------------------------

 这完全取决于浏览器本身是否支持离线浏览.     跟WEB服务器本身是什么做的, 完全无关.
你自己可以用手机试试就很快知道了.   像 "Opera" , 还有 "Chrome" 的手机版, 都能支持离线浏览事先下载到手机内的内容.
回复 支持 反对

使用道具 举报

13

主题

314

帖子

0

精华

高级会员

Rank: 4

积分
713
金钱
713
注册时间
2012-7-20
在线时间
102 小时
发表于 2013-6-17 01:06:31 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

1

主题

215

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2013-9-23
在线时间
4 小时
发表于 2014-3-6 19:53:12 | 显示全部楼层
回复【32楼】liuje:

底下是我的HTML运行画面 (今天没接上设备) .      我目前也一直在找突破MTU限制的方法,  也就是必须能支持TCP封包拆包/组包的协议栈.
不知有人用过吗?    如果能实现,  我们可以利用STM32做出功能很完整, 画面也很漂亮的远程监控 Web site 喔  .


---------------------------------
大神啊,能否帮我解答一下我的问题呢?谢谢啊!!http://www.openedv.com/posts/list/0/27973.htm?privmsg=1#164439
回复 支持 反对

使用道具 举报

8

主题

44

帖子

0

精华

初级会员

Rank: 2

积分
118
金钱
118
注册时间
2013-5-15
在线时间
8 小时
发表于 2015-2-13 22:59:43 | 显示全部楼层
刚完成在原子uip例程的基础上做好web服务器无刷更新和异步提交功能,可以开关led和无刷显示数据,但不是很稳定,大概操作十几二十次左右就不返回数据了,led也不能控制
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-8 05:25

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表