嵌入式系统实验报告.docx

上传人:b****8 文档编号:8989830 上传时间:2023-02-02 格式:DOCX 页数:30 大小:1.53MB
下载 相关 举报
嵌入式系统实验报告.docx_第1页
第1页 / 共30页
嵌入式系统实验报告.docx_第2页
第2页 / 共30页
嵌入式系统实验报告.docx_第3页
第3页 / 共30页
嵌入式系统实验报告.docx_第4页
第4页 / 共30页
嵌入式系统实验报告.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

嵌入式系统实验报告.docx

《嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验报告.docx(30页珍藏版)》请在冰豆网上搜索。

嵌入式系统实验报告.docx

嵌入式系统实验报告

嵌入式系统实验报告

实验报告

 

课程名称:

嵌入式系统

学院:

信息工程

专业:

电子信息工程

班级:

学生姓名:

学号:

指导教师:

开课时间:

学年

第一

学期

实验名称:

IO接口(跑马灯)

实验时间:

11.16

实验成绩:

一、实验目的

1.掌握STM32F4基本IO口的使用。

2.使用STM32F4IO口的推挽输出功能,利用GPIO_Set函数来设置完成对IO口的配置。

3.控制STM32F4的IO口输出,实现控制ALIENTEK探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。

二、实验原理

本次实验的关键在于如何控制STM32F4的IO口输出。

IO主要由:

MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。

所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。

三、实验资源

实验器材:

探索者STM32F4开发板

硬件资源:

1.DS0(连接在PF9)

2.DS1(连接在PF10)

四、实验内容及步骤

1.硬件设计

2.软件设计

(1)新建TEST工程,在该工程文件夹下面新建一个HARDWARE文件夹,用来存储以后与硬件相关的代码。

然后在HARDWARE文件夹下新建一个LED文件夹,用来存放与LED相关的代码。

(2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在LED文件夹下面,保存为led.c,在led.c中输入相应的代码。

(3)采用GPIO_Set函数实现IO配置。

LED_Init调用GPIO_Set函数完成对PF9和PF10ALIENTEK探索者STM32F407开发板教程119STM32F4开发指南(寄存器版)的模式配置,控制LED0和LED1输出1(LED灭),使两个LED的初始化。

(4)新建一个led.h文件,保存在LED文件夹下,在led.h中输入相应的代码。

3.下载验证

使用flymcu下载(也可以通过JLINK等仿真器下载),如图1.2所示:

图1.2

运行结果如图1.3所示:

图1.3

五、实验源程序

相关代码如下所示:

(1)led.c文件

#include"led.h"

voidLED_Init(void)

{

RCC->AHB1ENR|=1<<5;//

GPIO_Set(GPIOF,PIN9|PIN10,GPIO_MODE_OUT,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//PF9,PF10设置

LED0=1;//LED0关闭

LED1=1;//LED1关闭

}

(2)led.h文件

#ifndef__LED_H

#define__LED_H

#include"sys.h"

//LED端口定义

#defineLED0PFout(9)//DS0

#defineLED1PFout(10)//DS1

voidLED_Init(void);//初始化

#endif

(3)main函数

#include"sys.h"

#include"delay.h"

#include"led.h"

intmain(void)

{

Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz

delay_init(168);//初始化延时函数

LED_Init();//初始化LED时钟

while

(1)

{

LED0=0;//DS0亮

LED1=1;//DS1灭

delay_ms(500);

LED0=1;//DS0灭

LED1=0;//DS1亮

delay_ms(500);

}

}

六、实验总结

本次实验过程中,由于第一次实验,对实验器件,还有实验过程都不大了解,使得做实验过程中遇到很大的问题。

也花费了不少时间,不过在慢慢的摸索中,以及老师的指导和同学的帮助下,最终也了解了探索者STM32F4开发板的外部结构,以及各个引脚的作用,还有各个串口和并口的具体使用,还观察了跑马灯的运行状态,以及它的运行程序。

七、预习思考题

八、注意事项

(1)新建文件夹时,区分不同的文件夹之间的关系。

(2)编写代码时,注意格式和符号,在英文环境下输入。

实验名称:

触摸屏

实验时间:

11.23

实验成绩:

一、实验目的

1.掌握触摸屏的工作原理。

2.通过外接带触摸屏的LCD模块,来实现触摸屏控制。

3.通过对电阻触摸和电容触摸的学习,实现触摸屏驱动,最终实现一个手写板的功能。

二、实验原理

电阻式触摸屏原理:

当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,控制器检测到这个接通点并计算出X、Y轴的位置。

特点:

精度高、价格便宜、抗干扰能力强、稳定性好;

易被划伤、透光性差、不支持多点触摸。

电容式触摸屏原理:

利用人体的电流感应进行工作。

当手指触摸金属层时,由于人体电场,用户和触摸屏表面形成一个耦合电容。

对于高频电流来说电容是直接导体,于是手指从接触点吸走一个很小的电流。

这个电流分别从触摸屏的4个角的电极流出,并且流经4个电极的电流与手指到4角的距离成正比。

控制器通过对电流比例的计算,得到触摸点的位置。

特点:

手感好、无需校正、透光性好、支持多点触摸;

成本高、精度不高、抗干扰力差。

三、实验资源

实验器材:

探索者STM32F4开发板

硬件资源:

1、DS0(连接在PF9)

2、串口1(波特率:

115200,PA9/PA10连接在板载USB转串口芯片CH340上面)

3、ALIENTEK2.8/3.5/4.3/7寸TFTLCD模块(通过FSMC驱动,FSMC_NE4接LCD

片选/A6接RS)

4、按键KEY0(PE4)

四、实验内容及步骤

1.硬件设计

图2.1触摸屏与STM32F4连接原理图

2.软件设计

(1)打开上一章的工程,由于本次实验不要用到USMART和CAN相关代码,所以,先去掉USMART相关代码和can.c(此时HARDWARE组剩下:

led.c、ILI93xx.c和key.c)。

不过,本次实验要用到24C02,所以要添加myiic.c和24cxx.c到HARDWARE组下。

(2)然后,在HARDWARE文件夹下新建一个TOUCH文件夹。

然后新建一个touch.c、touch.h、ctiic.c等十个文件,并保存在TOUCH文件夹下,并将这个文件夹加入头文件包含路径。

其中,touch.c和touch.h是电阻触摸屏部分的代码,顺带兼电容触

摸屏的管理控制,其他则是电容触摸屏部分的代码。

3.下载验证

使用flymcu下载(也可以通过JLINK等仿真器下载),如图2.2所示:

图2.2

运行结果如图2.3所示:

图2.3

五、实验源程序

(1)main函数

intmain(void)

{

Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz

delay_init(168);//延时初始化

uart_init(84,115200);//初始化串口波特率为115200

LED_Init();//初始化LED

LCD_Init();//LCD初始化

KEY_Init();//按键初始化

tp_dev.init();//触摸屏初始化

POINT_COLOR=RED;//设置字体为红色

LCD_ShowString(30,50,200,16,16,"ExplorerSTM32F4");

LCD_ShowString(30,70,200,16,16,"TOUCHTEST");

LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");

LCD_ShowString(30,110,200,16,16,"2014/5/7");

if(tp_dev.touchtype!

=0XFF)LCD_ShowString(30,130,200,16,16,"PressKEY0toAdjust");

delay_ms(1500);

Load_Drow_Dialog();

if(tp_dev.touchtype&0X80)ctp_test();//电容屏测试

elsertp_test();//电阻屏测试

}

(2)//电阻触摸屏测试函数

voidrtp_test(void)

{

u8key;u8i=0;

while

(1)

{

key=KEY_Scan(0);

tp_dev.scan(0);

if(tp_dev.sta&TP_PRES_DOWN)//触摸屏被按下

{

if(tp_dev.x[0]

{

if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Drow_Dialog();

elseTP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED);//画图

}

}elsedelay_ms(10);//没有按键按下的时候

if(key==KEY0_PRES)//KEY0按下,则执行校准程序

{

LCD_Clear(WHITE);//清屏

TP_Adjust();//屏幕校准

TP_Save_Adjdata();

Load_Drow_Dialog();

}

i++;

if(i%20==0)LED0=!

LED0;

}

}

(3)//电容触摸屏测试函数

voidctp_test(void)

{

u8t=0;u8i=0;

u16lastpos[5][2];//最后一次的数据

while

(1)

{

tp_dev.scan(0);

for(t=0;t<5;t++)

{

if((tp_dev.sta)&(1<

{

if(tp_dev.x[t]

{

if(lastpos[t][0]==0XFFFF)

{

lastpos[t][0]=tp_dev.x[t];

lastpos[t][1]=tp_dev.y[t];

}

lcd_draw_bline(lastpos[t][0],lastpos[t][1],tp_dev.x[t],tp_dev.y[t],2,

POINT_COLOR_TBL[t]);//画线

lastpos[t][0]=tp_dev.x[t];

lastpos[t][1]=tp_dev.y[t];

if(tp_dev.x[t]>(lcddev.width-24)&&tp_dev.y[t]<20)

{

Load_Drow_Dialog();//清除

}

}

}elselastpos[t][0]=0XFFFF;

}

delay_ms(5);i++;

if(i%20==0)LED0=!

LED0;

}

}

六、实验总结

基本达到实验的要求,了解触摸屏基本概念与原理,以及通过编程实现对触摸屏的控制,以及知道如何验证实验结果是否属于预期目标,并了解实验原理,为今后嵌入式的学习打下一定的学习基础。

七、预习思考题

八、注意事项

(1)新建文件夹时,区分不同的文件夹之间的关系。

(2)编写代码时,注意格式和符号,在英文环境下输入。

实验名称:

串口通信

实验时间:

11.30

实验成绩:

一、实验目的

1.了解STM32F4串口。

2.掌握如何使用STM32F4的串口来发送和接收数据。

3.学会如何初始化串口。

4.掌握串口编程与调试方法。

二、实验原理

串行通信需要将传输的数据分解成二进制位,然后采用一条信号线将多个二进制数据位按一定的时间和顺序,逐位由信息发送端传到信息的接收端。

根据数据的传输方向和发送接收是否能同时进行,数据传输的工作方式分为单工方式,半双工方式和全双工方式。

单工通信是指信息只能单方向传输的工作方式,发送端和接收端的方向是固定的。

半双工通信方式可以实现双向的通信,不能在两个方向上同时进行工作,但可以轮流交替地进行通信,即通信信道的任意端,既可以是发送端也可以是接收端。

全双工通信方式是指在通信的任意时刻,允许数据同时在两个方向上传输,即通信双方可以同时发送和接收数据。

三、实验资源

实验器材:

探索者STM32F4开发板

硬件资源:

a.DS0(连接在PF9)

b.串口1(波特率:

115200,PA9/PA10连接在板载USB转串口芯片CH340上面)

四、实验内容及步骤

1.硬件设计

所需硬件资源:

1)指示灯DS0

2)串口1

图3.1硬件连接图示意图

2.软件设计

(1)打开上一章的TSET工程,因为本章我们用不到按键和蜂鸣器等功能,所以把key.c和beep.c从HARDWARE工程组里面删除,从减少工程代码量,仅留下必须的.c文件,节省空间,加快编译速度。

(2)然后在SYSTEM组下双击usart.c,就可以看到文件里的代码。

3.下载验证

使用flymcu下载(也可以通过JLINK等仿真器下载),如图3.2所示:

图3.2

运行结果如图3.3所示:

图3.3

五、实验源程序

(1)uart_init函数

//初始化IO串口1

//pclk2:

PCLK2时钟频率(Mhz)

//bound:

波特率

voiduart_init(u32pclk2,u32bound)

{

floattemp;

u16mantissa;

u16fraction;

temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV@OVER8=0

mantissa=temp;//得到整数部分

fraction=(temp-mantissa)*16;//得到小数部分@OVER8=0

mantissa<<=4;

mantissa+=fraction;

RCC->AHB1ENR|=1<<0;//使能PORTA口时钟

RCC->APB2ENR|=1<<4;//使能串口1时钟

GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,

GPIO_PUPD_PU);//PA9,PA10,复用功能,上拉输出

GPIO_AF_Set(GPIOA,9,7);//PA9,AF7

GPIO_AF_Set(GPIOA,10,7);//PA10,AF7

//波特率设置

USART1->BRR=mantissa;//波特率设置

USART1->CR1&=~(1<<15);//OVER8=0

USART1->CR1|=1<<3;//串口发送使能

#ifEN_USART1_RX//如果使能了接收

//使能接收中断

USART1->CR1|=1<<2;//串口接收使能

USART1->CR1|=1<<5;//接收缓冲区非空中断使能

MY_NVIC_Init(3,3,USART1_IRQn,2);//组2,最低优先级

#endif

USART1->CR1|=1<<13;//串口使能

}

(2)test.c函数

#include"sys.h"

#include"delay.h"

#include"usart.h"

#include"led.h"

intmain(void)

{

u8t;

u8len;

u16times=0;

Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz

delay_init(168);//延时初始化

uart_init(84,115200);//串口初始化为115200

LED_Init();//初始化与LED连接的硬件接口

while

(1)

{

if(USART_RX_STA&0x8000)

{

len=USART_RX_STA&0x3fff;//得到此次接收到的数据长度

printf("\r\n您发送的消息为:

\r\n");

for(t=0;t

{

USART1->DR=USART_RX_BUF[t];

while((USART1->SR&0X40)==0);//等待发送结束

}

printf("\r\n\r\n");//插入换行

USART_RX_STA=0;

}else

{

times++;

if(times%5000==0)

{

printf("\r\nALIENTEK探索者STM32F407开发板串口实验\r\n");

printf("正点原子@ALIENTEK\r\n\r\n\r\n");

}

if(times%200==0)printf("请输入数据,以回车键结束\r\n");

if(times%30==0)LED0=!

LED0;//闪烁LED,提示系统正在运行.

delay_ms(10);

}

}

}

六、实验总结

在程序设计方面,对串口通信的过程有了更深刻的理解和领会。

通过本次实验,使我对ARM嵌入式开发有了一定的掌握和理解,巩固了我在课程中所学的基本理论知识和实验技能,使我对嵌入式系统课程有了更深入的了解,熟悉了串口的使用,了解了内部功能模块及内核架构。

 

七、预习思考题

八、注意事项

(1)新建文件夹时,区分不同的文件夹之间的关系。

(2)编写代码时,注意格式和符号,在英文环境下输入。

实验名称:

RTC实时时钟

实验时间:

12.7

实验成绩:

一、实验目的

1.学会使用TFTLCD模块来显示日期和时间,实现一个简单的实时时钟,并可以设置闹钟

2.了解和掌握STM32F4的RTC的工作原理

二、实验原理

STM32F4的RTC时钟的使用:

1)时钟和分频;2)日历时间(RTC_TR)和日期(RTC_DR)寄存器;3)可编程闹钟;4)周期性自动唤醒

RTC正常工作的一般配置步骤如下:

1)使能电源时钟,并使能RTC及RTC后备寄存器写访问;2)开启外部低能振荡器,选择RTC时钟,并使能;3)取消RTC写保护;4)进入RTC初始化模式;5)设置RTC的分频,以及配置RTC参数

通过以上的5个步骤,我们就完成了对RTC的配置,RTC即可正常工作,而且这些操作不是每次上电都必须执行的,可以视情况而定。

三、实验资源

实验器材:

探索者STM32F4开发板

 

四、实验内容及步骤

硬件资源:

1、DS0(连接在PF9),DS1(连接在PF10)

2、串口1(波特率:

115200,PA9/PA10连接在板载USB转串口芯片CH340上)

3、ALIENTEK2.8/3.5/4.3/7寸TFTLCD模块(通过FSMC驱动,FSMC_NE4接LCD片选/A6接RS)

1.硬件设计

RTC属于STM32F4内部资源,期配置也是通过软件设置好就可以了。

不过RTC不能断电,否则数据就丢失了,我们如果想让时间在断电后还可以继续走,那么必须确保开发板的电池有电。

2.软件设计

打开上一章的工程,首先在HARDWARE文件夹下新建一个RTC的文件夹。

然后打开USER文件夹下的工程,新建一个rtc.c的文件和rtc.h的头文件,保存在RTC文件夹下,并将RTC文件夹加入头文件包含路径。

rtc.c中的代码中的RTC_Init函数用来初始化RTC时钟,在这里设置时间和日期,分别是通过RTC_Set_Time和RTC_Set_Data函数来实现的,其中RTC_Set_Time用于设置时间,RTC_Set_Data用于设置日期。

Test.c中通过RTC_Sst_WakeUp(4,0);设置RTC周期型自动唤醒周期为1秒钟,类似于STM32F1的秒钟中断。

然后,在main函数不断的读取RTC的时间和日期(每100ms一次),并显示在LED上面。

将RTC的一些相关函数加入了usmart,这样通过串口就可以直接设置RTC时间、日期、闹钟A、周期性唤醒和备份寄存器读写等操作。

3.下载验证

使用flymcu下载(也可以通过JLINK等仿真器下载),如图4.2所示:

运行结果如图4.3所示:

图4.2

图4.3

五、实验源程序

1.RTC_Init

//RTC初始化

//返回值:

0,初始化成功;

//1,LSE开启失败;

//2,进入初始化模式失败;

u8RTC_Init(void)

{

u16retry=0X1FFF;

RCC->APB1ENR|=1<<28;//使能电源接口时钟

PWR->CR|=1<<8;//后备区域访问使能(RTC+SRAM)

if(RTC_Read_BKR(0)!

=0X5050)//是否第一次配置?

{

RCC->BDCR|=1<<0;//LSE开启

while(retry&&((RCC->BDCR&0X02)==0))//等待LSE准备好

{

retry--;delay_ms(5);

}

if(retry==0)return1;//LSE开启失败.

RCC->BDCR|=1<<8;//选择LSE,作为RTC的时钟

RCC->BDCR|=1<<15;//使能RTC时钟

//关闭RTC寄存器写保护

RTC->WPR=0xCA;

RTC->WPR=0x53;

if(RTC_Init_Mode())return2;//进入RTC初始化模式

RTC->PRER=0XFF;//RTC同步分频系数(0~7FFF),必须先设置同步分频,

//再设置异步分频,Frtc=Fclks/((Sprec+1)*(Asprec+1))

RTC->PRER|=0X7F<<16;//RTC异步分频系数(1~0X7F)

RTC-CR&=~(1<<16);//RTC设置为,24小时格式

RTC-ISR&=~(1<<7);//退出RTC初始化模式

RTC-WPR=0xFF;//使能RTC寄存器写保护

RTC_Set_Time(23,59,56,0);//设置时间

RTC_Set_Date(14,5,5,1);//设置日期

//RTC_Set_AlarmA(7,0,0,10);//设置闹钟时间

RTC_Write_BKR(0,0X5050);//标记已经初始化过了

}

//RTC

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 哲学历史

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1