嵌入式系统 流水灯、按键、定时器实验报告_第1页
嵌入式系统 流水灯、按键、定时器实验报告_第2页
嵌入式系统 流水灯、按键、定时器实验报告_第3页
嵌入式系统 流水灯、按键、定时器实验报告_第4页
嵌入式系统 流水灯、按键、定时器实验报告_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式系统应用实验报告名字:学生编号。学院:专业:级别:讲师:实验1。流水灯实验1.1实验要求对实验板上的发光二极管灯进行编程和控制,使其依次打开和关闭,其间有一定的间隔。1.2原理分析本实验主要研究stm32f10x系列单片机的gpio输出操作。根据数据手册,gpio可通过软件编程配置为以下模式:进入漂浮的空气输入上拉输入下拉模拟输入开漏输出推挽输出推挽复用功能开漏复用功能根据实验要求,gpio应首先配置为推挽输出模式。根据原理图,单片机的gpio输出信号通过74hc244缓冲器,与发光二极管灯连接。因为74hc244的oe1和oe2接地且处于同一水平,所以端子a的水平与端子y的水平相同,并

2、且发光二极管灯为同正。因此,如果要点亮发光二极管,gpio应输出低电平。否则,发光二极管灯熄灭。1.3程序分析在软件方面,当程序启动时,调用systeminit()函数(见附录1)初始化系统时钟和其他关键部分,然后配置gpio。gpio配置功能是sz_stm32_ledinit()(见附录2),其中gpio时钟首先使能:rcc _外围锁定控制(gpio_clkled,启用);然后配置gpio输入/输出模式:gpio _ initstructure。通用输入输出模式=通用输入输出模式输出程序;然后配置gpio端口转动速度:gpio _ initstructure。速度=50兆赫兹;最后,将配置的

3、参数写入寄存器,初始化完成:gpio_init(gpio_portled,gpio_initstructure).初始化完成后,程序在一个周期内打开一个发光二极管,关闭其他发光二极管,利用延时()功能延时,达到流水灯的效果(程序的完整代码见附件3)。实验程序流程图如下:在硬件方面,根据实验指南,如下连接实验板:1.3实验结果实验二。按键实验2.1实验要求stm32用于读取外部按键状态,一旦按键被按下,就会产生外部中断,在中断处理功能中,与该按键对应的灯点亮。2.2原理分析实验主要研究stm32f10x系列单片机gpio外部中断功能的使用。stm32f107vct中有五组gpio,分别是pa15

4、:0、pb15:0、pc15:0、pd 1533600和pe 1533600。stm32的所有gpio都可以作为中断输入源,单片机通过多路复用使其从gpio到处理器总共有16个中断px15:0。实现是pa0,pb0,pc0,pd0和pe0共享一个gpio中断。pa1,pb1,pc1,pd1和pe1共享一个gpio中断; pa 15、pb15、pc15、pd15和pe15共享一个gpio中断。下图是以exti0为例的外部中断/事件线图像:要产生中断,您必须首先配置并启用中断线路。根据所需的边沿检测设置两个触发寄存器,并在中断屏蔽寄存器的相应位写“1”以允许中断请求。当外部中断线上出现预期边沿时,

5、将产生一个中断请求,相应的挂起位将被设置为“1”。在挂起寄存器的相应位写“1”将清除中断请求。要将输入输出端口用作外部中断输入,有以下步骤:(1)初始化输入输出端口作为输入。在此步骤中,用作外部中断输入的输入输出端口的状态可以设置为上拉/下拉输入或浮动输入,但当浮动时,必须采用外部上拉或下拉电阻。否则,中断可能会被连续触发。即使上拉/下拉用于干扰大的地方,也建议使用外部上拉/下拉电阻,这样可以在一定程度上防止外部干扰的影响。(2)打开输入输出端口复用时钟,设置输入输出端口与中断线路的映射关系。外部中断配置寄存器exticr需要针对io端口和stm32的中断线路之间的对应关系进行配置,因此我们需

6、要先启动复用时钟,然后配置io端口和中断线路之间的对应关系。为了连接外部中断和中断线路。(3)打开输入输出端口对面的在线中断/事件,并设置触发条件。在这一步中,我们需要配置中断生成条件。stm32可以配置为上升沿触发、下降沿触发或任何电平变化触发,但不能配置为高电平触发或低电平触发。这里根据他们的实际情况来配置。同时,应该打开中断线上的中断。这里,应该注意的是,如果使用外部中断并且中断的emr位被置位,软件模拟不能跳转到中断,但是硬件是正常的。在不设置emr的情况下,软件模拟可以进入中断服务功能,这在硬件中也是可能的。不建议配置emr位。(4)配置中断分组(nvic)并启用中断。在这一步中,我

7、们配置中断的分组和启用。对于stm32的中断,只有在配置和开启后才能执行,否则在中断服务功能中不会执行。(5)编写中断服务功能。这是中断设置的最后一步。中断服务功能是必要的。如果中断在代码中打开,但中断服务功能未被写入,则可能导致硬件错误并导致程序崩溃。因此,在中断打开后,应该为该中断编写一个服务功能。在中断服务功能中写入要执行的中断后操作,并根据情况判断是否清除中断产生的标志位。从原理图可以看出,当按键未被按下时,gpio读取高电平,按键被按下后,io端口接地,导致电平跳变,因此外部中断触发模式应设置为下降沿触发。2.3程序分析发光二极管灯的照明与实验1中的相同,但细节重复。首先,程序初始化

8、键,初始化函数是gpio_key_config()(见附录4)。配置过程与实验1中的gpio基本相同。因为gpio需要在这里收集外部按键信号,所以gpio模式应该调整为内部上拉电阻输入gpio _ initstructure。ipu .然后执行gpio中断初始化函数key_exit_init()(见附录5),首先将连接按钮的io端口与exti线路连接起来:gpio _ extilinenfig(gpio _ key 1 _ exti _ port _ source,gpio _ key 1 _ exti _ pin _ source);然后将触发模式设置为下降沿触发,将其写入中断配置寄存器,并

9、使能中断:exti_initstructure。exti _ line=gpio _ key1 _ exti _ lineexti_initstructure。外部模式=外部模式中断;exti_initstructure。外部触发=外部触发下降;exti_initstructure。exti _ linecmd=enable外部初始化(外部初始化结构).然后执行中断分组配置和中断优先级配置,功能是中断配置()(见附录6)。配置过程非常复杂,涉及到抢占优先级和响应优先级的概念。首先,程序将所有外部中断分类为nvic优先级组2,即2位抢占优先级和2位响应优先级:nvic _优先级组配置(nvic

10、_优先级组_ 2);然后,所有外部中断信号的抢占优先级被指定为0、1和2,以便它们可以相互区分,并且所配置的参数被写入相应的寄存器以完成配置:nvic _初始结构。nvic _ irqchannel=gpio _ key 1 _ exti _ irqn;nvic _初始结构。nvic _ irqchannel抢占优先级=0;nvic _初始结构。nvic _ irqchannelsubpriority=0;nvic _初始结构。nvic_irqchannelcmd=启用;nvic _初始化(nvic _初始化结构);nvic _初始结构。nvic _ irqchannel=gpio _ key

11、 2 _ exti _ irqn;nvic _初始结构。nvic _ irqchannel抢占优先级=1;nvic _初始化(nvic _初始化结构);nvic _初始结构。nvic _ irqchannel=gpio _ key3 _ exti _ irqn;nvic _初始结构。nvic _ irqchannel抢占优先级=2;nvic _初始化(nvic _初始化结构).初始化完成后,程序进入等待键中断触发的状态,一旦键被按下,就进入中断服务功能exti9_5_irqhandler()(见附录7)。打开和关闭功能中的发光二极管灯,并重置中断产生标志。实验流程图如下(主要功能代码见附件8)

12、:硬件连接模式如下图所示:2.3实验结果实验3。计时器实验3.1实验要求stm32的通用定时器tim5用于产生1s的中断,在中断功能中实现led1、led2、led3和led4同时翻转的效果。3.2原理分析本实验主要研究stm32f10x系列单片机定时器的使用。实验中使用的stm32f107单片机最多有10个定时器,包括:最多四个16位定时器,每个定时器最多有四个通道用于输入捕获/输出比较/脉宽调制或脉冲计数和增量编码器输入1个16位脉宽调制高级控制定时器,带死区控制和电机控制紧急制动2个独立看门狗定时器(独立和窗口)系统时间定时器:24位自递减计数器两个16位基本定时器用于驱动数模转换器根据

13、时钟树,系统时钟在分频后进入tim5的时钟模块入口,并在预分频后作为时钟提供给tim5。预分频器的系数为:timx_psc。当timx_psc=0表示无分频时,tim5定时器的时钟使用cnt=模块入口时钟72兆赫兹;当timx_psc=1表示无分频时,tim5定时器的时钟为ck_cnt=模块入口时钟36兆赫;等等。公式为:ck=fck/psc/(psc15:01),其中最大psc为65535。其次,tim5计数器的计数值的设置,以ck_cnt为时钟进行计数,当向下计数到0或向上计数到设置值(timx_arr)时产生中断。以计数为例,当从0计数到设定值timx_arr时会发生中断。要每秒产生一个

14、中断,将计数器值乘以系统时钟的预分频值=72兆赫兹,其中计数器值和预分频值都必须小于65535。如果我们将预分频值设置为7200,计数器值设置为10000,那么7200 * 10000=72,000,000,即72m。拆分方法有很多,35000*2000=72,000,000,只要注意计数器值和预分频值必须小于65535。当计数值溢出时,它将改变计数溢出标志位,并产生一个定时器中断,用于实验中打开发光二极管灯。3.3程序分析发光二极管初始化部分与实验1相同。初始化后,所有发光二极管灯打开。定时器配置功能是tim5_init()(见附录6)。配置功能首先启用计数器时钟:rcc _ ap1b外围锁

15、定cmd(rcc _ ap1b外围_tim5,启用);然后自动加载计数值,从0:tim_timebasestructure。时间段=(100-1);设置定时器的预分频系数:tim_timebasestructure。tim _预分频器=(7200-1);并将计数器设置为向上计数:tim_timebasestructure。时间_计数器代码=时间_计数器代码_向上;最后,写入定时器配置寄存器,完成配置:tim _时基初始化(tim5,tim _时基结构).配置完成后,应清除计数器的溢出标志位,并开启溢出中断,使计数器开始计数。tim_clearitpendingbit(tim5,tim _ it _ update);时间信息设置(时间信息5,时间信息更新,启用);tim_cmd(tim5,enable).定时器配置并使能后,计数器开始工作,当达到预设计数值时,产生中断信号。相关配置后,系统可以响应定时器产生的中断,中断配置功能为nvic _配置()(见附件7)。该函数首先将中断向量表的第一个地址设置为0x08000000:nvic _设置向量可转换(nvic _向量表_闪存,0x 0000);然后启用tim5中断:nvic _初始结构。nvic _ irqchannel=tim5 _ irqn;nvic _初始结构。nvic _ irqchannel抢占优先级=0;nvic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论