嵌入式系统实验报告.docx
- 文档编号:14744154
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:21
- 大小:517.27KB
嵌入式系统实验报告.docx
《嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验报告.docx(21页珍藏版)》请在冰点文库上搜索。
嵌入式系统实验报告
学院:
计算机科学与工程
姓名:
学号:
______________
专业:
指导老师:
完成日期:
实验一:
流水灯案例、8位数码管动态扫描案例
一、实验目的
1.1进一步熟悉KeilC51集成开发环境调试功能的使用;
1.2学会自己编写程序,进行编译和仿真测试;
1.3利用开发板下载hex文件后验证功能。
二、实验原理
2.1:
实验原理图
2.2:
工作原理
2.2.1:
流水灯
电路中有LO,1,L2,L3,4,L5,L6,L7共八个发光二极管,当引脚LED_SEL输入为1,对于A、B、C、D、E、F、G、H引脚,只要输入为1,则点亮相连接的发光二极管。
A~H引脚连接STM32F108VB芯片的PE8~PE15,程序初始化时,对其进行初始设置。
引脚LED_SEL为1时,发光二极管才工作,否则右边的数码管工作。
注意,LEDSEL连接于PB3,该引脚具有复用功能,在默认状态下,该引脚的I0不可用,需对AFIO_MAPR寄存器进行设置,设置其为10可用。
2.2.2:
8位数码管
数码管中的A~G、DP段分别连接到电路图中的A~G、H线上,当某段上有一-定的电压差值时,便会点亮该段。
当E3输入为1,也就是LED_ SEL输入为0时,根据SELO~SEL2的值确定选中的数码管,即位选,再根据A~H引脚的高低电平,点亮对应段,即段选。
三、实验结果
3.1:
流水灯
对于给出的流水灯案例,下载HEX文件后,在开发板上可观察到L0-L7从左至右依次点亮,间隔300ms。
当全部点亮八个发光二极管后,八个发光二极管同时熄灭,间隔300ms后,发光二极管再次从左至右依次点亮。
如此反复循坏。
3.2:
8位数码管
对于给出的8位数码管动态扫描案例,下载后,在开发板上可观察到8个数码管从左至右依次显示对应的数字,且每一个数码显示的数字在1-9之间循环。
可以通过加快扫描频率,使得八位数码管在人眼看上去是同时显示。
在后续的案例中可以看到该现象。
四、实验分析
4.1:
流水灯
该题是后续做题的基础,通过对代码的分析,以及借助实验指导书对实验过程有了大致了解。
4.2:
8位数码管
在流水灯的基础上,首先只需要将LED_SEL=0修改为LED_SEL=1,便可选中二极管,此时8个二极管从左往右依次显示数字,且每一个数字在0-9之间循环。
应老师要求,将8个二极管显示出1-181-07(班级学号),在main.c中直接调用led.c中的voidSetLed(u8w,u8value)函数,再加修改即可。
五、实验总结
通过本次实验,进一步熟悉KeilC51集成开发环境调试功能的使用,了解了数码管硬件原理,根据数码管连接原理图,设计八段数码管显示程序,在开发板上实现可观察到8个数码管从左至右依次显示对应的学号。
实验二:
外部中断_键盘、按键计数案例、串口1与pc机通信案例
一、实验目的
1.1、了解键盘扫描方式,有效的控制键盘;
1.2、为使CPU正确读出端口的状态,须掌握去除抖动的方法;
1.3、了解异步收发传输器的工作原理;
1.4、进行串口程序设计,完成实验要求;
二、实验原理
2.1、外部中断&按键计数实验原理图
2.2、外部中断&按键计数工作原理
K1、K2、K3按下去,引脚KEY1、KEY2输出低电平。
在K1或K2或K3按下后要对其进行消抖的工作,在定时器中断中判断按键的状态,为低电平,计数加1,连续60次计数,超过2/3,则证明按键已经按下,通过两个变量分别保存按键的当前状态与上一个状态来判断是.上升沿、下降沿、低电平、高电平的触发方式。
2.3、串口通信原理图
2.4、串口通信工作原理
USB转串口模块,对应使用RXD线接收数据,用TXD发送数据。
每个串口由2个数据缓冲器(相互独立1收1发)一个移位寄存器( -字节数据一位- ~位发送出去)一个串行控制器和一个波特率发生器(这个比较重要,结合相关的定时器)组成。
对应发送、接收数据完成(RI、TI硬件置1)都会触发串口中断,但是无法确定是哪个触发的,所以在串口中断中我们要判断是接收数据产生的中断还是发送数据产生的中断,对于发送数据产生的中断,我们要软件将TI清0,并将数据就绪标志清0,允许下一字节数据发送,发送数据函数中通过while循环,等待发送数据准备就绪,完了将就绪的数据复制给SBUF;对于接收数据产生的中断,我们要软件将RI清0,并从SBUF中读取数据。
二、实验结果
3.1、外部中断
(1)实验现象是,按键一次就会跳过几个灯,也就是说按键一次并不是向后移一位而是好几位,这是因为按键没有去抖动,所以会进入多次中断导致。
(2)按键-次,灯就向下移一位,这是通过软件去抖动之后,按键按下后延时一段时间,再来判断中断有没有打开,所以按键一-次只进入一次中断。
(3)按键-次,灯就向下移一位,虽然没有用按键去抖动,但是这个键在硬件上已经去抖,所以按键一次也是只进入一次中断程序,所以会有这种现象。
(4)由于是电平触发,所以在按下按键的时候,会有好多灯一起亮,比如低电平,在低电平这段时间里,会不断地请求中断,所以就会进入很多次中断,在加上请求中断的速度快和LED灯有一定的的余晖,所以肉眼看起来就好像灯全是亮的。
3.2、按键计数
本实验涉及K1、K2两个按键。
③下载程序后,数码管左边三位点亮,为000;
③当K1每按一次,则显示的三位十进制值加1,当加到999时,再按一次,值变为000;
③当K2每按下一次,显示的值减1,当减到000时,再按一次,则值变为999。
3.3、串口通信
本实验在上位机上需使用串口助手连接,可使用STC-ISP作为串口助手(也可使用其它的串口助手;下载程序后,数码管左边三位代表十进制数。
K1:
控制数据发送; K2:
数据减1:
K3:
数据加1。
上位机使用串口助手接受,波特率设置为115200,使用文本格式接受。
K1发送数据006后,串口助手显示“您发送的数据为:
6”。
上位机发送HEX数据4,则开发板上最左端的三位显示004。
四、实验分析
4.1、外部中断
边沿触发方式外部中断电路的最大优点在于不会丢失中断。
只要中断请求负跳变的宽度大于1个机器周期,单片机就能够采样到中断请求信号,单片机将采样到的信号存到中断请求标志寄存器中。
4.2、按键计数
利用中断的思想进行按键的加减,中断相对于内部掩饰,具有反应灵敏,易操作的特点。
4.3、串口通信
本次实验中解决了如何判断数据是发送还是接收的问题和如何判断数据是否发送或接受完毕的问题,通过实验中的讨论和研究书上关于串行口的内容,我们通过中断标志位和循环很好的解决了这个问题。
这个实验让我认识到单片机中中断的巨大作用,它不仅可以省去很多繁琐的设计步骤,还可以帮助我们解决许多设计上的问题。
另外,我觉得这是一次较为综合性的实验,按键,消抖,数码管显示,定时,串行口中断,串行口数据的收发这些内容都在本次实验中体现出来了,也算是让我们进行了一个小复习,让我们站在一个更高的平台上去编写程序。
五、实验总结
通过这些实验,我们了解了键盘扫描方式有交叉扫描和直接扫描两种方式,同时也了解到嵌入式系统一般采用软件延时去除抖动。
对串行接口程序设计有了更加深入的了解,明白了既作为发送器,也作为接收器的异步收发传输器的工作原理及字符意义。
在整个实验过程中,与同学及时交流,解决疑惑,顺利完成了该项试验。
实验三:
ADC实验、定时器和看门狗
一、实验目的
1.1学习ADC模/数转换器的使用。
1.2学习ADC应用。
1.3了解STM32的定时器
1.4了解STM32的看门狗计时器。
二、实验内容
2.1温度与光照测量
2.2ADC双通道测量电压
2.3定时器数字钟实现,采用定时器中断计时。
2.4独立看门狗实验。
2.5窗口看门狗实验。
2.6定时器中断实验。
三、实验原理
3.1温度与光照测量实验原理图
3.2工作原理
热敏电阻随温度呈线性变化,光敏电阻电流随光强线性变化。
通过AD(STM32的AD值为12位)采集光敏电阻和热敏电阻的输出值,输出对应的AD值,光照值直接为AD值,而采集的温度AD值,通过公式计算或查表可得。
具体公式请参照程序中的GetTemperature()函数。
3.3ADC双通道实验原理图
3.4工作原理
根据PA0和PA1输入的电压,可转化成不同的AD值,通过获取寄存器中的AD值,再将其转变成电压值。
开发板采用的3.3V的外部参考电压。
3.5实验原理图
3.6工作原理
STM32的定时器功能十分强大,有TIME1和TIMe8等高级定时器,也有TIME2~TIME5等通用定时器,还有TIME6和TIME7等基本定时器。
STM32内部还自带了两个看门狗定时器:
独立看门狗(IWDG)和窗口看门狗(WWDG)。
通过这些定时器可以实现相关的功能。
看门狗定时器是嵌入式的一个重要组成部分,它实际上是一个计数器。
一般给看门狗一个数字,程序开始运行后看门狗开始倒计数。
如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。
如果看门狗计数器倒数到0就认为程序没有正常工作,而强制复位系统。
因此看门狗定时器对嵌入式系统提供了独立的保护功能,当系统出现故障时,在可控的时钟周期内,看门狗将系统复位或将系统从休眠中唤醒。
窗口看门狗通常用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常运行序列而产生的软件故障。
除非递减计数器的值在T6位变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。
在递减计数器达到窗口配置寄存器数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个MCU复位。
这表面递减计数器需要在一个有限的时间窗口中被刷新。
四、实验结果
4.1温度与光照测量
程序下载到开发板,并运行后,可以观察到数码管的左边三位和右边四位点亮。
左边三位形成的十进制值为温度值,精确到小数点后1位。
通过改变Rt器件接触到的温度,可观察到不同的温度(可用手接触Rt器件,也可对其吹气等等方式);
右边四位形成的+进制为光照值,直接使用AD值表示。
通过遮挡或增强ROP的光照可观察到AD值的变换。
4.2ADC双通道测量电压
程序下载到开发板,并运行后,可以观察到数码管的左边三位和右边三位点亮。
并显示有精确到小数点后2位的数值。
当PAO或PA1槽没有任何接入时,不同的开发板可能显示的值有所不同,但对电压的测量没有影响。
先取一个电压值小于3.3V的电池,将电池的负极接EXT的GND槽,电池的正极接EXT的PAO槽或PA1槽,根据正极接入不同的插槽,是的电压值显示的位置不同。
左边三位形成的十进制值为PAO槽测到的电压值,精确到小数点后2位。
右边三位形成的十进制值为PA1槽测到的电压值,精确到小数点后2位。
4.3定时器设置
①TIM3时钟使能。
②设置TIM3_ARR和TIM3_PSC的值。
③设置TIM3_DIER允许更新中断。
④允许TIM3工作。
⑤TIM3中断分组设置。
⑥编写中断服务函数。
4.4独立看门狗设置
①向键值寄存器(IWDG_KR)写入0x5555,取消IWDG_PR和IWDG_RLR的写保护。
②向IWDG_KR写入0xAAAAA,使STM32重新加载IWDG_RLR的值到看门狗计数器里面,实现独立看门狗的喂狗操作。
③向IWDG_KR写入0xCCCCC来启动STM32的看门狗。
4.5窗口看门狗设置
①使能WWDG时钟。
②设置WWDG_CFR和WWDG_CR两个寄存器。
③开启WWDG中断并分组。
④编写中断服务函数。
五、实验分析
ADC测电压:
使用STM32内部温度传感器,首先设置内部ADC,并激活内部通道,通过ADC_CR1的AWDEN位(bit23)设置,设置该位为1,则启用内部温度传感器。
STM32的内部温度传感器固定连接在ADC的通道16上,所以,设置好ADC之后只要读取通道16的值,就是温度传感器返回来的电压值。
独立看门狗:
在键值寄存器(IWDG_KR)中写入0Xcccc,启用独立看门狗,此时计时器开始从其复位值0Xfff递减计数。
串口看门狗:
除非递减计数器的值在T6位(WWDG-》CR的第六位)变成0前被刷新,看门狗电路在达到预置的时间周期时,会产生一个MCU复位。
在递减计数器达到窗口配置寄存器(WWDG-》CFR)数值之前,如果7位的递减计数器数值(在控制寄存器中)被刷新,那么也将产生一个MCU复位。
这表明递减计数器需要在一个有限的时间窗口中被刷新。
定时器中断:
通用定时器是一个通过可编程预分频器驱动的16位自动装载计数器构成。
适用于多种场合,包括定时中断、测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和PWM)。
每个定时器都是完全独立的,没有互相共享任何资源,可以一起同步操作。
六、实验总结
通过本次实验,进一步了解了ADC模/数转换器的工作原理,以及利用ADC进行电压温度等测量。
通过本次实验stm32的几种通用定时器、基本定时器、高级定时器和看门狗定时器在嵌入式系统中的重要作用。
其中的看门狗定时器能够对嵌入式系统提供独立的保护功能,能够在系统出现故障时,在可控的时钟周期内,看门狗将系统复位或将系统从休眠中唤醒。
实验四:
μC/OS-Ⅱ操作系统
一、实验目的
1.1了解μC/OS-Ⅱ操作系统的基本功能。
1.2了解μC/OS-Ⅱ内核结构。
1.3学习μC/OS-Ⅱ在Cortex-M3上的移植。
二、实验内容
1.STM32平台μC/OS-Ⅱ移植。
三、实验原理
μC/OS-Ⅱ实际上是一个实时操作系统内核,它只包含了任务调度、任务管理、时间管理、内存管理和任务间的通信与同步等基本功能。
而没有提供输人输出管理、文件系统、网络之类的额外服务。
但是,由于μC/OS-Ⅱ的可移植性和开源性,用户可以自己添加所需的各种服务。
μC/OS-Ⅱ包含全部功能的核心部分代码只占用8.3KB,而且由于μC/OS-Ⅱ是可裁剪的.所以用户系统中实际的代码最少可达2.7KB,可谓短小精悍。
目前,已经出现了第三方为yC/OS-II开发的文件系统、TCP/IP协议栈用户显示接口等。
μC/OS-Ⅱ内核结构:
临界段、任务、任务状态、任务控制快、任务调度、空闲任务。
μC/OS-Ⅱ的时间管理:
任务延时函数(OSTimeDly())、按时分秒延时函数(OSTimeDlyHMSM())、让处在延时期的任务结束延时(OSTimeDlyResume())、系统时间(OSTimeGet()和OSTimeSet())。
μC/OS-Ⅱ任务之间的通信:
事件控制块ECB,信号量,邮箱,消息队列。
μC/OS-Ⅱ的内存管理:
通过内存控制块的数据结构来跟踪每一个内存分区,系统中的每个内存分区都有它自己的内存控制块。
μC/OS-Ⅱ的中断处理:
μC/OS中,中断服务子程序要使用汇编语言。
但如果用户使用的C语言编译器支持在线汇编语言的话,用户可以直接将中断服务子程序代码放在C语言的程序文件中。
μC/OS-Ⅱ在Cortex-M3上的移植:
μC/OS-Ⅱ可以简单地看做是一个多任务调度器,在这个任务调度器上完善地添加了与多任务操作系统相关的一些系统服务,如信号量、邮箱等。
其90%的代码是用C语言写的,可以直接移植到有C语言编译器的处理器上。
移植工作主要都集中在多任务切换的实现上。
因为这部分代码是用来保存和恢复CPU现场的(即写/读相关寄存器),不能用C语言,只能使用江编语言完成。
将μC/OS-Ⅱ移植到ARM处理器上,需要修改3个与ARM体系结构相关的文件。
四、实验结果
创建任务
(1)配置Oscfg.h
配置uC/OS操作系统,根据自己的需要对操作系统进行裁剪。
配置嘀嗒时钟时要看清注释。
(2)编写LED驱动
(3)编写app_cfg.h
(4)编写app
(5)编写mian.c
五、实验分析
uCOS-II源代码中有一个专门用来裁剪系统的配置文件,通过各种宏的来打开或者关闭那些不需要用到系统服务,这样可以大大减小平台移植uCOS-II所需要的存储空间。
uCOS-II基本全部是用C语言写的,只有和微处理器相关的那部分是用汇编写的,汇编所占比例极小,从而使得uCOS-II便于移植到各种微处理器上.事实上uCOS-II已经运用在了大部分的8位、16位、32位的MCU中了
六、实验总结
通过本次实验,进一步了解了uC/OS操作系统的内核结构以及uC/OS操作系统的内存管理,任务管理,时间管理等运作方式。
知道了uC/OS操作系统在STM32开发板上的移植。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 实验 报告