嵌入式软件设计第8次试验

嵌入式软件设计第8次实验报告

学号:140201126                   姓名:杨鹏飞

组别:第二组                实验地点:D19

一、实验目的:

1.熟悉WWW技术中的CGI(公共网关接口)技术。

2.学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯 和蜂鸣器。

二、实验内容:

1.编写代码完成Web服务器端蜂鸣器的驱动。

2.编写代码完成Web服务器端LED灯的驱动。三、实验过程描述及结果展示:

1、实验原理

CGI技术简介:公共网关接口CGI(Common Gateway Interface)是WWW技术中最重要的技术之一。CGI是外部应用程序与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的规程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。绝大多数的CGI程序被用来解释处理来自表单的输入信息,并在服务器产生相应的处理,或将相应的信息反馈给浏览器,CGI程序使网页具有交互功能。

LED及蜂鸣器管脚连接图

从图中可以看出:

PF9,PF10为低电平时,LED0与LED1亮;

PF9,PF10为高电平时,LED0与LED1灭。

PF8为高电平时,蜂鸣器响;为低电平时,蜂鸣器不响。

2、设计流程图:

3、程序代码

(运行代码)

#include "sys.h"

#include <string.h>

#include "lwip_comm.h"

//LED灯端口和BEEP端口定义

#define LED1 PFout(10)

#define BEEP PFout(8)

void system_init(void);//系统初始化函数

//控制LED和BEEP的CGI handle;

const char* LEDS_CGI_Handler(int iIndex,\

int iNumParams,\

char *pcParam[],\

char * pcValue[]);

const char* BEEP_CGI_Handler(int iIndex,\

int iNumParams,\

char *pcParam[],\

char * pcValue[]);

//当WEB客户端请求浏览器的时候,此函数被CGI handle调用

extern int FindCGIParameter(const char *pcToFind,\

char *pcParam[],\

int iNumParams);

int main(void)

{

system_init();//系统初始化(总)

//以下代码对蜂鸣器进行初始化

{

GPIO_InitTypeDef GPIO_InitStructure;

//使能GPIOF管脚时钟

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;//蜂鸣器管脚

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//输出模式

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//最大速度

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;//电阻

GPIO_Init(GPIOF,&GPIO_InitStructure);//调用函数对管脚初始化

GPIO_ResetBits(GPIOF,GPIO_Pin_8);//PF8拉低

//以下代码对LED进行初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;//输出模式

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;//最大速度

GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;//推挽输出

GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;//上拉电阻

GPIO_Init(GPIOF,&GPIO_InitStructure);//调用函数对管脚初始化

GPIO_ResetBits(GPIOF,GPIO_Pin_10);//PF10拉低

}

while(1)

{

lwip_periodic_handle();//LWIP轮询任务

}

}

//BEEP的CGI控制句柄

const char* BEEP_CGI_Handler(int iIndex,\

int iNumParams,\

char *pcParam[],\

char * pcValue[])

{

unsigned char i=0;

//u8 i=0;

//找到BEEP的索引号

iIndex= FindCGIParameter("BEEP_TEST",pcParam,iNumParams);

if(iIndex !=-1)

{

BEEP = 0;

for(i=0;i<iNumParams;i++)

{

if(strcmp(pcParam[i],"BEEP_TEST")==0)//查找CGI

{

if(strcmp(pcValue[i],"BEEP_START")==0)

BEEP =1;//打开蜂鸣器

else if(strcmp(pcValue[i],"BEEP_STOP")==0)

BEEP =0;//关闭蜂鸣器÷

}

}

}

if(BEEP==1 && LED1==1) return "/BEEP_ON_LED_OFF.html";

else if(BEEP==1 && LED1==0) return "/BEEP_ON_LED_ON.html";

else if(BEEP==0 && LED1==1) return "/BEEP_OFF_LED_OFF.html";

else if(BEEP==0 && LED1==0) return "/BEEP_OFF_LED_ON.html";

else return "/index.html";

//return 0;

}

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

//LED的CGI控制句柄

const char* LEDS_CGI_Handler(int iIndex,\

int iNumParams,\

char *pcParam[],\

char * pcValue[])

{

unsigned char i=0;

//u8 i=0;

//找到LED的索引号

iIndex= FindCGIParameter("LED_TEST",pcParam,iNumParams);

if(iIndex !=-1)

{

LED1 = 0;

for(i=0;i<iNumParams;i++)

{

if(strcmp(pcParam[i],"LED_TEST")==0)//查找CGI

{

if(strcmp(pcValue[i],"LED_START")==0)

LED1 =0;//打开LED

else if(strcmp(pcValue[i],"LED_STOP")==0)

LED1 =1;//关闭LED

}

}

}

if(LED1==0 && BEEP==0) return "/BEEP_OFF_LED_ON.html";

else if(LED1==0 && BEEP==1) return "/BEEP_ON_LED_ON.html";

else if(LED1==1 && BEEP==0) return "/BEEP_OFF_LED_OFF.html";

else if(LED1==1 && BEEP==1) return "/BEEP_ON_LED_OFF.html";

else return "/index.html";

//return 0;

}

(网页代码)

蜂鸣器不响 LED灭

<HTML>

<HEAD>

<TITLE>嵌入式Web服务器测试网页</TITLE>

</HEAD>

<BODY>

<P>

<IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

</P>

<H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

<DIV style="margin-top:1cm; text-align:center;">

<FORM method="get" action="./leds.cgi">

LED:

<input type="radio" name="LED_TEST" value="LED_START">ON

<input type="radio" name="LED_TEST" value="LED_STOP" checked>OFF

<BR> <BR>

<input type="submit" name="button1" value="SEND">

</FORM>

</DIV>

<DIV style="margin-top:3cm; text-align:center;">

<FORM method="get" action="./beep.cgi">

BEEP:

<select name="BEEP_TEST" >

<option value="BEEP_START">ON

<option value="BEEP_STOP" selected = "selected">OFF

</select>

<BR> <BR>

<input type="submit" name="button2" value="SEND">

</FORM>

</DIV>

</BODY>

</HTML>

蜂鸣器不响 LED亮

<HTML>

<HEAD>

<TITLE>嵌入式Web服务器测试网页</TITLE>

</HEAD>

<BODY>

<P>

<IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

</P>

<H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

<DIV style="margin-top:1cm; text-align:center;">

<FORM method="get" action="./leds.cgi">

LED:

<input type="radio" name="LED_TEST" value="LED_START" checked>ON

<input type="radio" name="LED_TEST" value="LED_STOP">OFF

<BR> <BR>

<input type="submit" name="button1" value="SEND">

</FORM>

</DIV>

<DIV style="margin-top:3cm; text-align:center;">

<FORM method="get" action="./beep.cgi">

BEEP:

<select name="BEEP_TEST" >

<option value="BEEP_START">ON

<option value="BEEP_STOP" selected = "selected">OFF

</select>

<BR> <BR>

<input type="submit" name="button2" value="SEND">

</FORM>

</DIV>

</BODY>

</HTML>

蜂鸣器响 LED灭

<HTML>

<HEAD>

<TITLE>嵌入式Web服务器测试网页</TITLE>

</HEAD>

<BODY>

<P>

<IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

</P>

<H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

<DIV style="margin-top:1cm; text-align:center;">

<FORM method="get" action="./leds.cgi">

LED:

<input type="radio" name="LED_TEST" value="LED_START" >ON

<input type="radio" name="LED_TEST" value="LED_STOP" checked>OFF

<BR> <BR>

<input type="submit" name="button1" value="SEND">

</FORM>

</DIV>

<DIV style="margin-top:3cm; text-align:center;">

<FORM method="get" action="./beep.cgi">

BEEP:

<select name="BEEP_TEST" >

<option value="BEEP_START" selected = "selected">ON

<option value="BEEP_STOP">OFF

</select>

<BR> <BR>

<input type="submit" name="button2" value="SEND">

</FORM>

</DIV>

</BODY>

</HTML>

蜂鸣器响 LED亮

<HTML>

<HEAD>

<TITLE>嵌入式Web服务器测试网页</TITLE>

</HEAD>

<BODY>

<P>

<IMG src="./image/photo.jpg" alt="耿丹樱花" align="right">

</P>

<H1 align="center">嵌入式Web服务器LED及BEEP测试</H1>

<DIV style="margin-top:1cm; text-align:center;">

<FORM method="get" action="./leds.cgi">

LED:

<input type="radio" name="LED_TEST" value="LED_START" checked>ON

<input type="radio" name="LED_TEST" value="LED_STOP">OFF

<BR> <BR>

<input type="submit" name="button1" value="SEND">

</FORM>

</DIV>

<DIV style="margin-top:3cm; text-align:center;">

<FORM method="get" action="./beep.cgi">

BEEP:

<select name="BEEP_TEST" >

<option value="BEEP_START" selected = "selected">ON

<option value="BEEP_STOP" >OFF

</select>

<BR> <BR>

<input type="submit" name="button2" value="SEND">

</FORM>

</DIV>

</BODY>

</HTML>

4、实验结果

四、总结及实验心得:

主要是对STM32F407开发板进行控制和修改,让它实现不同的功能。通过这次的课程使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,才能改变自己思考问题的方式,不至于太过片面。实验结果不是目的,重要的是怎样做实验。

时间: 2024-11-03 22:33:59

嵌入式软件设计第8次试验的相关文章

嵌入式软件设计第8次实验报告-140201236-沈樟伟

嵌入式软件设计第8次实验报告 学号:140201236                   姓名:沈樟伟 组别:第二组                实验地点:D19 一.实验目的: 1.熟悉WWW技术中的CGI(公共网关接口)技术. 2.学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯和蜂鸣器. 二.实验内容: 1.编写代码完成Web服务器端蜂鸣器的驱动. 2.编写代码完成Web服务器端LED灯的驱动.三.实验过程描述及结果展示: 1.实验原理 CGI技术简介:公共网关接口CGI(C

嵌入式软件设计第11次实验报告-140201235-陈宇

嵌入式软件设计第11次实验报告 学号:140201235             姓名:陈宇 组别:第3组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短

嵌入式软件设计第12次实验报告-140201235-陈宇

嵌入式软件设计第12次实验报告 学号:140201235             姓名:陈宇 组别:第3组                实验地点:D19 一.实验目的: 1.掌握通过GSM短信远程与嵌入式设备进行交互的方法. 二.实验内容: 1.编写程序把嵌入式开发板采集到的温度信息通过GSM短信传送给指定号码.(每10秒发送1次) 2.编写程序,使手机可以通过短信指令的方式控制嵌入式开发板的蜂鸣器和LED灯.(比如手机编辑"BEEP_ON"和"BEEP_OFF"

嵌入式软件设计第11次实验报告-140201133-李宇昕

嵌入式软件设计第11次实验报告 学号:140201133            姓名:李宇昕 组别:第3组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短

浅谈嵌入式软件设计

浅谈嵌入式软件设计 本文在21IC的公众号文章<多年嵌入式编程工程师经验分享:换个角度来编程>基础上结合自己理解而写,部分图片以及文字说明均来自互联网. 前后台模型 模型介绍 当开发过程中不使用OS时,几乎所有的嵌入式程序归根结底都是一个由无法停止的循环为结构构成的,即常见的while(1)或for(;;),用流程图表示就是这样: graph TD stop[结束] start[查询IO或外设状态] --> section1[执行相关业务逻辑] section1 --> condi

嵌入式软件设计第7次实验报告

学号:140201112                    姓名:孙佳文 组别:3                                  实验地点:D19 一.实验目的: 1.熟悉网线的制作(T568B标准直连线) 2.学会使用HTML语言(超文本标记语言)进行网页的设计 3.学会使用makefsdata.exe制作嵌入式二进制网页文件. 二.实验内容: 1.制作T568B标准的直连线一根. 2.设计嵌入式Web服务器网页: 3.使用makefsdata.exe制作嵌入式二进制网

嵌入式软件设计第9次实验报告

学号:140201209      姓名:田博文 组别:第4组          实验地点:D19 一.实验目的: 1.熟悉WWW技术中的SSI(Server Side Include)技术. 2.学会使用SSI技术编写代码把当前开发板内RTC的时钟及日期数据送往PC机浏览器显示. 3.学会使用SSI技术把当前开发板的按键(KEY2.KEY1)次数信息送往PC机浏览器显示. 二.实验内容: 1.编写代码完成Web服务器端发送RTC实时时 钟信息的任务. 2.编写代码完成Web服务器端发送按键(K

嵌入式软件设计第8次实验报告

学号:140201112                   姓名:孙佳文 组别:3                实验地点:D19 一.实验目的: 1.熟悉WWW技术中的CGI(公共网关接口)技术. 2.学会使用CGI技术编写C语言代码驱动嵌入式开发板的LED灯和蜂鸣器. 二.实验内容: 1.编写代码完成Web服务器端蜂鸣器的驱动. 2.编写代码完成Web服务器端LED灯的驱动. 三.实验过程描述: 1.实验原理 CGI技术简介:公共网关接口CGI(Common Gateway Interfa

嵌入式软件设计之提高代码可移植性

前面一篇博文<嵌入式软件架构设计之分层设计>給大家分享了程序分层设计的一些个人观点.里面有提到接口统一规范的问题,下面这篇博文详细阐述一下关于代码可移植性的问题.代码可移植性非常重要!在这里有的人很纳闷,有人会问:除了汇编语言的移植性很差以外,c语言,c++,java等其他高级语言的移植性不是都很棒的么.毋庸置疑,c语言的移植性是非常好.但本文不是在探讨一段编程语言的移植性问题,要探讨的是:在不同的嵌入式平台上,如何提高开发嵌入式产品的效率问题.换一种表达方式:如何提高嵌入式软件平台之间的可移