嵌入式第9次实验

学号:140201236                姓名:沈樟伟

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

一、实验目的:

1.熟悉WWW技术中的SSI(Server Side Include)技术。

2.学会使用SSI技术编写代码把当前开发板内RTC的时钟及日期数据送往PC机浏览器显示。

3.学会使用SSI技术把当前开发板的按键(KEY2、KEY1)次数信息送往PC机浏览器显示。

二、实验内容:

1.编写代码完成Web服务器端发送RTC实时时

钟信息的任务。

2.编写代码完成Web服务器端发送按键(KEY2、KEY1)按键次数的任务。

三、实验过程描述及结果展示:

实验器材:STM32F407开发板、LCD显示屏

1、实验原理

SSI技术简介

服务器端嵌入SSI(Server Side Include)是一种基于服务器的网页制作技术。大多数的WEB服务器等均支持SSI

命令。将内容发送到浏览器之前,可以使用“SSI”指令将文本、图形或应用程序信息包含到网页中。因为包

含SSI指令的文件要求特殊处理,所以必须为所有SSI文件赋予SSI文件扩展名。默认的扩展名是.stm、.shtm、

.shtml。

SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:<!=--

#include file = “info.htm”-->就是一条SSI指令,其作用是将“info.htm”的内容拷贝到当前页面中。

<!=-- -->是HTML语法中的注释,当WEB服务器不支持SSI时,会忽略这些信息。

2、按键与STM32的硬件连接图

STM32F407芯片与键盘的连接电路图如下所示:

3、程序代码

#include "sys.h"

#include <string.h>

#include "delay.h"

#include "httpd.h"

#include "lwip/tcp.h"

#include "fs.h"

#include "lwip_comm.h"

void system_init(void);

void RTCTime_Handler(char *pcInsert);

void RTCDate_Handler(char *pcInsert);

void RTCKey1_Handler(char *pcInsert);

void RTCKey2_Handler(char *pcInsert);

const char *ppcTAGs[]=

{

"time",

"date",

"key2",

"key1"

};

u8 key1=0,key2=0;

void EXTI2_IRQHandler(void){

delay_ms(10);

key1++;

printf("%d\n",key1);

EXTI_ClearITPendingBit(EXTI_Line2);

}

void EXTI3_IRQHandler(void){

delay_ms(10);

key2++;

printf("%d\n",key2);

EXTI_ClearITPendingBit(EXTI_Line3);

}

void EXTIX_Init(void)

{

NVIC_InitTypeDef   NVIC_InitStructure;

EXTI_InitTypeDef   EXTI_InitStructure;

KEY_Init(); //按键对应的I/O初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);//使能SYSCFG时钟

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource2);//PE2 连接到中断线2

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOE, EXTI_PinSource3);//PE3 连接到中断线3

/*配置EXTI_Line2,3,4 */

EXTI_InitStructure.EXTI_Line = EXTI_Line2 | EXTI_Line3 /*| EXTI_Line4*/;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断事件

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿触发

EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断线使能

EXTI_Init(&EXTI_InitStructure);//配置

NVIC_InitStructure.NVIC_IRQChannel = EXTI2_IRQn;//外部中断2

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x03;//抢占优先级3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能外部中断通道

NVIC_Init(&NVIC_InitStructure);//配置

NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQn;//外部中断3

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x02;//抢占优先级2

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级 2

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能外部中断通道

NVIC_Init(&NVIC_InitStructure);//配置

}

int main(void)

{

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

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

{

RTC_InitTypeDef RTC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);//使能电源接口时钟

PWR_BackupAccessCmd(ENABLE);//使能RTC+SRAM区域

RCC_LSEConfig(RCC_LSE_ON);//开启LSE时钟

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); //选择LSE时钟作为RTC时钟

while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); //等待LSE准备好

RCC_RTCCLKCmd(ENABLE);//使能RTC时钟

while(RTC_Wait_Synchro());//等待RTC和APB同步

RTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;//24小时格式

RTC_InitStructure.RTC_SynchPrediv = 0xFF;//同步预分频器

RTC_InitStructure.RTC_AsynchPrediv = 0x7F;//异步预分频器

RTC_Set_Time(10,0,0,0);//设置时间

RTC_Set_Date(17,3,20,1);//设置日期

}

EXTIX_Init();

//uart_init(115200);       //串口初始化

while(1)

{

lwip_periodic_handle();//LWIP轮询任务

}

}

//SSI的Handler

u16_t SSIHandler(int iIndex,char *pcInsert,int iInsertLen)

{

switch(iIndex)//iIndex索引号

{

case 0:

RTCTime_Handler(pcInsert);

break;

case 1:

RTCDate_Handler(pcInsert);

break;

case 2:

RTCKey2_Handler(pcInsert);

break;

case 3:

RTCKey1_Handler(pcInsert);

break;

}

return strlen(pcInsert);

}

//SSIHandler中需要用到的处理RTC时间的函数

void RTCTime_Handler(char *pcInsert)

{

u8 hour,min,sec,ampm;

RTC_Get_Time(&hour,&min,&sec,&ampm);

*(pcInsert+0) = (char)((hour/10)+0x30);

*(pcInsert+1) = (char)((hour%10)+0x30);

*(pcInsert+2) = ‘:‘;

*(pcInsert+3) = (char)((min/10)+0x30);

*(pcInsert+4) = (char)((min%10)+0x30);

*(pcInsert+5) = ‘:‘;

*(pcInsert+6) = (char)((sec/10)+0x30);

*(pcInsert+7) = (char)((sec%10)+0x30);

}

void RTCDate_Handler(char *pcInsert)

{

u8 year,month,day,week;

RTC_Get_Date(&year,&month,&day,&week);

*(pcInsert+0) = ‘2‘;

*(pcInsert+1) = ‘0‘;

*(pcInsert+2) = (char)((year/10)+0x30);

*(pcInsert+3) = (char)((year%10)+0x30);

*(pcInsert+4) = ‘-‘;

*(pcInsert+5) = (char)((month/10)+0x30);

*(pcInsert+6) = (char)((month%10)+0x30);

*(pcInsert+7) = ‘-‘;

*(pcInsert+8) = (char)((day/10)+0x30);

*(pcInsert+9) = (char)((day%10)+0x30);

*(pcInsert+10) = ‘ ‘;

*(pcInsert+11) = ‘w‘;

*(pcInsert+12) = ‘e‘;

*(pcInsert+13) = ‘e‘;

*(pcInsert+14) = ‘k‘;

*(pcInsert+15) = ‘:‘;;

*(pcInsert+16) = (char)(week+0x30);

}

void RTCKey1_Handler(char *pcInsert)

{

if (key1<10)

{

*(pcInsert+0) = (char)(key1+0x30);

*(pcInsert+1) = ‘\0‘;

}

else

{

*(pcInsert+0) = (char)((key1/10)+0x30);

*(pcInsert+1) = (char)((key1%10)+0x30);

*(pcInsert+2) = ‘\0‘;

}

}

void RTCKey2_Handler(char *pcInsert)

{

if (key2<10)

{

*(pcInsert+0) = (char)(key2+0x30);

*(pcInsert+1) = ‘\0‘;

}

else

{

*(pcInsert+0) = (char)((key2/10)+0x30);

*(pcInsert+1) = (char)((key2%10)+0x30);

*(pcInsert+2) = ‘\0‘;

}

}

实验结果展示:

四、总结及实验心得:

  实验就是将学习到的知识点在实践中的应用。本次实验室熟悉WWW技术中的SSI(Server Side Include)技术,并学会使用SSI技术编写代码把当前开发板内RTC的时钟及日期数据送往PC机浏览器显示。使用SSI技术把当前开发板的按键(KEY2、KEY1)次数信息送往PC机浏览器显示。

  实验过程还算顺利,原本就是因为电脑硬件上除了点问题,本地网络连接异常。在后来,检查了接口的连接之后,解决了这个问题。

  

时间: 2024-12-19 07:52:45

嵌入式第9次实验的相关文章

嵌入式第12次实验报告

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

嵌入式第11次实验

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

嵌入式第12次实验

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

嵌入式第11次实验报告

学号:140201218             姓名:杨昌航 组别:第7组                实验地点:D19 一.实验目的: 1.了解短信AT指令的使用方法. 2.掌握使用短信AT指令驱动SIM900A发送和接收短信的方法. 二.实验内容: 1.使用AT命令进行模块测试,发送和接收短信. 2.编写程序利用触摸屏完成固定号码短信的发送和接收.(需要加上AT测试命令模块.手机SIM卡检测模块.手机信号质量检测模块等等.) 三.实验过程描述及结果展示: 短信常用AT指令 程序代码: #

嵌入式系统外部中断实验(按下按键,LED灯依次熄灭)

#include "stm32f10x.h"#include <stdio.h>#include <String.h> void RCC_cfg(void);void GPIO_cfg(void);void Delay(uint32_t nCount);void NVIC_cfg(void);void EXTIX_Init(void); u8 cnt; int main(void){ cnt=0; RCC_cfg(); GPIO_cfg(); NVIC_cfg(

[嵌入式高薪就业课程]嵌入式系统就业实训班

为培养适应企业需要.基础扎实.知识面宽.技能强.富有创新精神的嵌入式开发工程师, 通过本课程的系统学习,可以使学员由浅入深地对嵌入式ARM+Linux系统全面学习,能够独立胜任嵌入式底层开发.应用开发.系统开发.驱动开发等多方面工作,注重两大能力和敬业团队精神培养.  全面模拟IT公司的嵌入式软硬件开发.管理.组织.实施过程来强化个人能力和技术能力主要包括:工程实践能力团队协作能力 技术创新能力专业能力,编程能力 软硬件平台应用能力 项目开发能力 解决关键技术问题能力. 适合对象:理工科类专科(

第一次冲刺-团队开发(第二天)

昨天: 1.学会使用Eclipse进行添加android项目和添加类.0 2.知道包资源管理器如何打开 3.如何调试运行项目. 4.android最重要几个文件SRC中的Java文件,RES/layout/.mxl文件 5.实现一个helloword程序 今天: 1.看了老师给的学姐.学长软件的代码,找到他们的优缺点,取长补短 2.学习Eclipse中如何添加按钮等 3.学习android嵌入式开发中的实验4Activity实验和实验5界面布局的创建.

第一次冲刺(2)15/5/9

昨天完成项目: 1.学会使用Eclipse进行添加android项目和添加类.0 2.知道包资源管理器如何打开 3.如何调试运行项目. 4.android最重要几个文件SRC中的Java文件,RES/layout/.mxl文件 5.实现一个helloword程序. 今天要完成的项目: 1.学习视频俩个(0.7h). 2.学习Eclipse中如何添加按钮等 3.学习android嵌入式开发中的实验4Activity实验和实验5界面布局的创建. 未完成的任务 1.没有学会如何创建一个.XML文件

使用可编程电源自动化输出电源

主要用于测试公司嵌入式产品开关机实验,当重复给嵌入式板子上下电时,测试板子能够正常重启运行. 由于重启次数较多,人工断电不可取,故使用可编程电源, 型号:IT900系列 价格:1w+ 1.软件包程序 2.软件安装顺序: 1).默认安装visa512full.exe2).默认安装ICP460.exe3).进入DISK1默认安装setup.exe 3.切换USB控制和RS232控制 1).按下Shift和Menu按键进入菜单功能2).此时屏幕上显示可选择菜单,可使用上下键选择不同功能3).屏幕上出现