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

一、实验内容
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张图片

代码:

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.}  

效果图:
【嵌入式系统开发实训】学生实验报告_第2张图片
【嵌入式系统开发实训】学生实验报告_第3张图片
【嵌入式系统开发实训】学生实验报告_第4张图片

4、读取18B20温度并通过串口显示(分数:10分);
【嵌入式系统开发实训】学生实验报告_第5张图片

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

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

效果图:
【嵌入式系统开发实训】学生实验报告_第6张图片

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.}  

效果图:

【嵌入式系统开发实训】学生实验报告_第7张图片

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.}  

指导老师签字

你可能感兴趣的:(课程设计,linux)