【嵌入式系统开发实训】学生实验报告

news/2024/5/17 10:36:15/文章来源:https://blog.csdn.net/weixin_52078305/article/details/132058881

一、实验内容
1、过程考核60分:
(1)顺序点亮3个LED灯(分数:10分);
(2)按键顺序点亮3个LED灯(分数:10分);
(3)读取18B20温度并通过串口显示(分数:10分);
(4)写入姓名(拼音)+学号到EEPROM,并在启动时送到串口显示(分数:10分);
(5)通过WIFI或GPRS上传温度到云端(分数:10分);
(6)通过云端服务器发指令,顺序点亮3个LED灯(分数:10分);
(7)其他加分项(分数:20分);
二、实验设备
1、硬件平台:
(1)开发板:
STM32F4开发板,包含以下资源,STM32F4处理器(ARM Cortex-M4),GPIO口、3个LED灯、1个按键、温度传感器18B20、EEPROM、RJ45以太网、WIFI模组、GPRS/GPS模组、LoRa模组等。
(2)ST-LINK下载器;
(3)USB转TTL模块;
2、软件平台:
(1)Keil5 开发环境,安装stm32f4支持包;
(2)ST-LINK驱动、USB转TTL驱动;
(3)网关示例软件;
(4)stm32f4示例程序;
(5)网络助手;
(6)云端服务器;
(7)以打包的方式分发;

三、主要实验内容及步骤

1、连接Stm32f4主板:
1)st-link,下载器:4线(5V, 3. 3V, GND, sWM, 按顺序从3. 3V开始,只要四根),1-3.3V-1; 2-gnd-4; 3-swdio-7;4-swclk-9;另一 边3.3V。
2) USB转TTL; 1-3.3V-3.3V; 2-TXD-RX; 3-RXD-TX; 4-GND-GND (对应板子上,3针,红色)。

2、顺序点亮3个LED灯(分数:10分);
在这里插入图片描述

代码:

1.void Light_Three_Led(void){  
2.    uint8_t i;  
3.    for(i=0; i<3; i++){  
4.        GPIO_ResetBits(GPIOD, GPIO_Pin_1 );  
5.        Delay_MS(1000);  
6.        GPIO_SetBits(GPIOD, GPIO_Pin_1 );  
7.          
8.        GPIO_ResetBits(GPIOD, GPIO_Pin_2 );  
9.        Delay_MS(1000);  
10.        GPIO_SetBits(GPIOD, GPIO_Pin_2 );  
11.          
12.        GPIO_ResetBits(GPIOD, GPIO_Pin_3 );  
13.        Delay_MS(1000);  
14.        GPIO_SetBits(GPIOD, GPIO_Pin_3 );  
15.    }  
16.  
17.}  

3、按键顺序点亮3个LED灯(分数:10分);
代码:

1.void EXTI9_5_IRQHandler(void)  
2.{  
3.        Delay_MS(20);              
4.    if(GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_8) == 0)  
5.        {  
6.            while(!GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_8))   
7.            printf("This is press key operating.\r\n") ;  
8.            Delay_MS(1);  
9.            Light_Three_Led( );  
10.              
11.              
12.        }  
13.  
14.    EXTI_ClearITPendingBit(EXTI_Line8);  
15.}  

效果图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4、读取18B20温度并通过串口显示(分数:10分);
在这里插入图片描述

温度传感器硬件原理图
代码:

1.temperature = ds18b20_get_temperature();  
2.        SEND_TEM=(float)temperature/10;  
3.        printf("temp:%.2f℃",SEND_TEM);  

效果图:
在这里插入图片描述

5、写入姓名(拼音)+学号到EEPROM,并在启动时送到串口显示(分数:10分);

代码:

1.void Write(void){  
2.    uint16_t i;  
3.    uint8_t write[13]={'2','0','2','0','4','0','4','1','4','9','M','H','D'};  
4.    uint8_t read[13]={0};  
5.    I2C_Write(I2C3,ADDR_EEPROM_24C64,0x0,write,100);  
6.    Delay_MS(10);  
7.    I2C_Read(I2C3,ADDR_EEPROM_24C64,0x0,read,100);  
8.    for(i=0;i<13;i++){  
9.    printf("%c ",read[i]);  
10.    }  
11.}  

效果图:

在这里插入图片描述

6、通过WIFI或GPRS上传温度到云端(分数:10分);

1.while(esp8266_send_cmd("AT+CWJAP=\"i\",\"12345678\"","WIFI GOT IP",200))  
2.//  while(esp8266_send_cmd("AT+CWJAP=\"jsu-c512\",\"12345678\"","WIFI GOT IP",200))  
3.    {  
4.        printf("WIFI GOT IP_ERR\r\n");  
5.    }  
6.      
7.    //=0:单路连接模式     =1:多路连接模式  
8.    while(esp8266_send_cmd("AT+CIPMUX=0","OK",30))  
9.    {  
10.        printf("AT+CIPMUX_ERR\r\n");  
11.    }  
12.      
13.    //建立TCP连接  这四项分别代表了 要连接的ID号0~4   连接类型  远程服务器IP地址   远程服务器端口号  
14.    while(esp8266_send_cmd("AT+CIPSTART=\"TCP\",\"172.20.10.6\",8088","CONNECT",200))  
15.    {  
16.        printf("AT+CIPSTART_ERR\r\n");  
17.    }  

WIFI接入步骤:

  1. PIO配置。
    2.发A指令到ESP8266。
    3、发应用层数据。
    代码:
1.while(esp8266_send_cmd("AT+CWJAP=\"i\",\"12345678\"","WIFI GOT IP",200))  
2./   while(esp8266_send_cmd("AT+CWJAP=\"jsu-c512\",\"12345678\"","WIFI GOT IP",200))  
3.{  
4.    printf("WIFI GOT IP_ERR\r\n");  
5.}  
6.  
7.//=0:单路连接模式     =1:多路连接模式  
8.while(esp8266_send_cmd("AT+CIPMUX=0","OK",30))  
9.{  
10.    printf("AT+CIPMUX_ERR\r\n");  
11.}  
12.  
13.//建立TCP连接  这四项分别代表了 要连接的ID号0~4   连接类型  远程服务器IP地址   远程服务器端口号  
14.while(esp8266_send_cmd("AT+CIPSTART=\"TCP\",\"172.20.10.6\",8088","CONNECT",200))  
15.{  
16.    printf("AT+CIPSTART_ERR\r\n");  
17.}  

7、通过云端服务器发指令,顺序点亮3个LED灯(分数:10分)
代码:

1.if(TIM_GetITStatus(TIM5, TIM_IT_Update) == SET)    
2.        {  
3.            if(light_ctrl[0])LIGHT1_ON;  
4.            else LIGHT1_OFF;  
5.            if(light_ctrl[1])LIGHT2_ON;  
6.            else LIGHT2_OFF;  
7.            if(light_ctrl[2])LIGHT3_ON;  
8.            else LIGHT3_OFF;  
9.            for(i=0;i<3;i++)sum_li+=light_ctrl[i];  
10.            KEY_Scan(0);  
11.            if(fflag==0){  
12.                for(i=0;i<3;i++)light_ctrl[i]=0;  
13.            }  
14.            else if  
15.            (  
16.                fflag>0&&fflag<=3)  
17.                {  
18.                    for(i=0;i<3;i++)  
19.                        light_ctrl[i]=0;  
20.                        light_ctrl[fflag-1]=1;  
21.                }  
22.            else   
23.            {if(fflag%3!=0){for(i=0;i<3;i++)light_ctrl[i]=0;for(i=0;i<fflag%3;i++)light_ctrl[i]=1;}  
24.            else{for(i=0;i<3;i++)light_ctrl[i]=1;}}  
25.        }  
1.void Wifi_data(char *Wifi_data){  
2.    char sp[20];  
3.    char* Point=NULL;  
4.    if(strstr((const char *)Wifi_data, (const char *)"on")!=NULL)//接收到设置阈值命令  
5.    {  
6.        Point = strstr((const char *)Wifi_data, (const char *)"on")+2;  
7.        memcpy(sp, Point, 2);  
8.        fflag=atoi(sp);   
9.          
10.    }  
11.      
12.}  

指导老师签字

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_150391.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

融邦JAVA面试题

1. Java线程池的作用及使用方式 线程池的作用&#xff1a; (1) 降低系统资源消耗&#xff1a;通过重用已存在的线程&#xff0c;降低线程创建和销毁造成的消耗。 (2) 提高系统响应速度&#xff1a;当有任务到达时&#xff0c;无需等待新线程的创建便能立即执行。 (3) 提高线程…

怎么学习CSS相关技术知识? - 易智编译EaseEditing

学习CSS技术是前端开发中的重要一环&#xff0c;它用于控制网页的样式和布局&#xff0c;使网页更加美观和易于使用。以下是学习CSS技术的几个方面&#xff1a; 基本语法和选择器&#xff1a; 了解CSS的基本语法&#xff0c;学习如何使用选择器来选择HTML元素并应用样式。 样…

【JavaWeb】 三大组件之监听器 Listener

&#x1f384;欢迎来到边境矢梦的csdn博文&#xff0c;本文主要讲解Java 中三大组件之监听器 Listener的相关知识&#x1f384; &#x1f308;我是边境矢梦&#xff0c;一个正在为秋招和算法竞赛做准备的学生&#x1f308; &#x1f386;喜欢的朋友可以关注一下&#x1faf0;&a…

RocketMQ生产者和消费者都开启Message Trace后,Consume Message Trace没有消费轨迹

一、依赖 <dependency><groupId>org.apache.rocketmq</groupId><artifactId>rocketmq-spring-boot-starter</artifactId><version>2.0.3</version> </dependency>二、场景 1、生产者和消费者所属同一个程序 2、生产者开启消…

​LeetCode解法汇总142. 环形链表 II

目录链接&#xff1a; 力扣编程题-解法汇总_分享记录-CSDN博客 GitHub同步刷题项目&#xff1a; https://github.com/September26/java-algorithms 原题链接&#xff1a; 力扣 描述&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如…

后端进阶之路——综述Spring Security认证,授权(一)

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 「推荐专栏」&#xff1a; ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff0c;vue成神之路★ ★ 解决算法&#xff0c;一个专栏就够了★ ★ 架…

看pdf的软件有哪些?这几款了解一下

看pdf的软件有哪些&#xff1f;PDF格式的文件在现代社会中应用广泛&#xff0c;而PDF阅读器是很重要的一种工具。相比于其他文件格式&#xff0c;PDF文件的格式统一&#xff0c;便于分享和传输&#xff0c;并且不易被篡改。而PDF阅读器则是我们查看、编辑和管理PDF文件的必备工…

Maven发布项目到Nexus私服

项目pom配置 在项目pom.xml中文件中的仓库配置&#xff0c;Nexus私服如何搭建在这里不介绍了可自行百度。 <distributionManagement><repository><id>releases</id><name>Nexus Release Repository</name><url>http://私服地址:34…

matlab编程实践16、17

捕食者与猎物模型 人口增长 在人口增长或衰减的最简单模型中&#xff0c;增长速度或衰减速度与人口本身的数目成正比。增加或减少人口规模会导致出生和死亡数量成比例地增加或减少。在数学上&#xff0c;可以由以下微分方程描述。 可以得出&#xff1a;&#xff0c;其中。 该简…

k8s概念-deployment

deployment用于部署无状态应用 Deployment集成了上线部署、滚动升级、创建副本、回滚等功能 Deployment里包含并使用了ReplicaSet Replicaset 通过改变Pod副本数量实现Pod的扩容和缩容 参考文档 https://kubernetes.io/zh-cn/docs/concepts/workloads/controllers/deployment/ …

基于C#制作一个串口通信调试软件

串口调试软件是一种用于调试和监测串口通信的工具软件。它可以帮助用户通过串口与外部设备进行通信,并实时显示发送和接收的数据,方便用户进行数据的分析和调试。 串口知识了解什么是串口通信原理波特率数据位停止位奇偶校验位RS-232标准合格的通信软件应具备的特点实现步骤界…

【C语言day14】

静态成员在程序运行期间只会被初始化一次&#xff0c;而函数可能会被多次调用。因此&#xff0c;静态成员在函数多次调用时&#xff0c;其上一次的结果不会重新清零。如果你希望每次函数调用时都将静态成员清零&#xff0c;你需要在函数中手动进行清零操作。 #include<std…

三言两语说透koa的洋葱模型

Koa是一个非常轻量化的Node.js web应用框架,其洋葱圈模型是它独特的设计理念和核心实现机制之一。本文将详细介绍Koa的洋葱圈模型背后的设计思想,以及它是如何实现的。 洋葱圈模型设计思想 Koa的洋葱圈模型主要是受函数式编程中的compose思想启发而来的。Compose函数可以将需…

tinkerCAD案例:31. 3D 基元形状简介

tinkerCAD案例&#xff1a;31. 3D 基元形状简介 1 将一个想法从头脑带到现实世界是一次令人兴奋的冒险。在 Tinkercad 中&#xff0c;这将从一个新的设计开始。 在新设计中&#xff0c;简单的原始形状可以通过不同的方式组合成更复杂的形状。 在这个项目中&#xff0c;你将探索…

JavaScript三元运算符

条件运算符&#xff08;三元运算符&#xff09;的基本结构 条件 &#xff1f; true:false例如&#xff1a; const age 20; age > 18 ? console.log("你已经成年了"):console.log("你还是一个孩子&#xff01;");我们这里把条件运算符和IF来做个区分…

【基础理论】了解点过程

Maximum tsunami wave height generated by the 16 Sept. 2015 Chile earthquake, from the International Tsunami Information Center. Posted by Austin Elliott 一、说明 在这个世界上&#xff0c;会发生许多事件&#xff0c;其趋势可能遵循一种模式。在这篇博客中&#…

vue 图片回显标签

第一种 <el-form-item label"打款银行回单"><image-preview :src"form.bankreceiptUrl" :width"120" :height"120"/></el-form-item>// 值为 https://t11.baidu.com/it/app106&fJPEG&fm30&fmtauto&…

51单片机学习--LED点阵屏显示图形动画

为了通用性考虑&#xff0c;需要把用到的几个口用特殊位声明来重新命名&#xff0c;由于RCLK在头文件中已有定义&#xff0c;所以这里把P3^5声明成RCK吧。。这样的做法可以提高可读性 sbit RCK P3^5; //RCLK sbit SCK P3^6; //SRCLK sbit SER P3^4;接下来编写74HC595的输…

iOS多线程——pthread、NSThread

pthread NSThread 多线程的常见方案pthreadpthread 简介pthread 使用方法pthread 其他相关方法 NSThread创建、启动线程线程相关用法线程状态控制方法线程之间的通信NSThread 线程安全和线程同步NSThread 非线程安全NSThread 线程安全 多线程的常见方案 技术方案特点使用语言线…

VS创建QT项目的几个注意点

前提是已经安装好了VS、QT和Qt VS Tool。 一、创建项目无法找到头文件&#xff0c;点击编译运行又可以执行。虽然可以编译运行&#xff0c;但是无法找不到头文件显示是红色并且在开发时无法出现相关代码提示&#xff0c;并且无法导入QT相关头文件。 解决方法&#xff1a; 1、…