学号:140201218                姓名:杨昌航

组别:第7组                实验地点: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

#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,&m);

*(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机浏览器显示。

stm32实验报告心得体会_嵌入式第9次实验报告相关推荐

  1. c#程序设计实训报告心得体会_关于实训的心得体会4篇

    关于实训的心得体会4篇 心得体会是指将学习的东西运用到实践中去,通过实践反思学习内容并记录下来的文字.有关实训的心得体会,欢迎大家一起来借鉴一下! 实训的心得体会(一): 透过这两周的实训,我们学会了 ...

  2. python实验总结心得体会_山东省实验学子在“2020未来太空学者大会中国区终选赛”中获佳绩...

    日前,"2020未来太空学者大会中国区终选赛"在北京举行,来自全国各地的近300名选手参加了此次比赛.山东省实验中学孙皓霖.林立栋.任淏璐.张明慧.刘宇哲.董晗.刘至理.刘齐一星. ...

  3. 传感器实训心得体会_基于at89c52传感器实训报告总结

    基于at89c52传感器实训报告总结 为了适应公司新战略的发展,保障停车场安保新项目的正常.顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划基于at89c52传感器实训报告总结九江学院信息科 ...

  4. python实验总结心得体会_细探培桃法,静待李花开诺德实验学校小学部召开家访总结交流会...

    点击蓝字 关注我们 家访是一场聆听,聆听每一个孩子的心声,聆听每一个家庭的回馈:家访是一场交换,寒风中带去关爱,晚霞里带回理解:家访就是一次守望,家校共育,桃李花开.为深入推进班主任和学科教师家访工作 ...

  5. java类与对象实验报告心得体会_第四周课程总结与实验报告(Java简单类与对象)...

    1.写一个名为Rectangle的类表示矩形.其属性包括宽width.高height和颜色color,width和height都是double型的,而color则是String类型的.要求该类具有: ...

  6. 计算机ppt制作实验报告总结,ppt实验报告心得体会[工作范文](18页)-原创力文档...

    ppt实验报告心得体会 篇一:PPT实训报告总结 丽水学院计算机与信息工程学院实验 报告实 验报告 实验4用ppt制作演示型课件(设计性实验) 一.实验目的 熟悉office 软件的编辑制作环境:熟练 ...

  7. stm32实验报告心得体会_stm32实训心得体会.docx

    stm32实训心得体会 stm32实训心得体会 篇一:STM32 实验2报告 实验2MINI STM32按键控制LED灯实验 一. 实验目的 1. 掌握嵌入式程序设计流程. 2. 熟悉STM32固件库 ...

  8. python语言的实验心得体会范文_实验报告心得体会范文3篇_心得体会

    实验报告心得体会范文 3 篇 _ 心得体会 篇一:实验报告心得体会范文 这次实习, 我对该公司的一些情况有了一个基本的了解, 根据在实习期间的所见, 我对 公司的今后发展提出了以下的建议: 1. 公司 ...

  9. python实验心得体会范文大全_万能实验报告心得体会5篇范文

    --文章来源网,仅供分享学习参考 ~ 1 ~ 万能实验报告心得体会 5 篇范文 万能实验报告心得体会(一) : 本次实训,是对我本事的进一步锻炼,也是一种考验.从中获得 的诸多收获,也是很可贵的,是十 ...

最新文章

  1. 计算机和网络知识,计算机和网络技术基础知识
  2. [HOW TO]-Ubuntu下 Tomcat 9 的设置办法
  3. Visual studio 生成事件的使用 、xcopy 实现 dll 复制操作、
  4. 教 Chatbot 生成更有营养的对话
  5. python堆排序求topn_Java堆排序,取得前TopN个数
  6. 目标检测如何计算召回率_计算机视觉目标检测的框架与过程
  7. HCL打开显示当前系统用户怎么解决_鼠标右键新建没有EXCEL 怎么解决?
  8. mysqli_connect函数未开启_CRMEB打通版linux系统部署客服开启长链接不成功
  9. SQL语言入门学习,这一篇就够了
  10. excel常用控件使用方法一看就懂(干货不糊弄)
  11. java画图板可选颜色,java学习——画图板
  12. 长沙公积金和商贷组合贷款
  13. CentOS7 官网下载及各版本区别
  14. 项目管理实战精髓培训课
  15. linux 执行计划任务
  16. 烷烃同分异构体数目的计算
  17. 基于ESO的永磁同步电机无感FOC 采用线性扩张状态观测器(LESO)估计电机反电势,利用锁相环从反电势中提取位置和转速信息
  18. 1527. 患某种疾病的患者
  19. 叠氮-三聚乙二醇-琥珀酰亚胺1245718-89-1Azido-PEG3-NHS ester
  20. 《霍元甲》:用心去打,用心去说教

热门文章

  1. Linux学习总结(56)——如何处理阿里云服务器上入侵的kdevtmpfsi 挖矿病毒
  2. Docker学习总结(23)——Docker搭建大规模测试环境的实践
  3. 制作第一个HTML网页,2制作第一个HTML网页.ppt
  4. 令人期待的php7.4,PHP7.4新特性
  5. zabbix3.0.2 使用percona mysql插件来监控mysql5.7的详细实现过程
  6. Linux下rz/sz安装及使用方法_上传和下载文件
  7. “安防+人工智能”,安企选择哪种抱大腿姿势才有出息?
  8. sublime text 2 解决错误 [Decode error - output not utf-8]
  9. oracle角色与权限
  10. 利用sendmail搭建电子邮件服务器