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

下载本文档

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

文档简介

1、(威海)UNIVERSITY , WEIHAI嵌入式系统应用实验报告姓名:学号:学院:专业:班级:指导教师:实验1、流水灯实验1.1 实验要求编程控制实验板上LED灯轮流点亮、熄灭,中间问隔一定时间。1.2 原理分析实验主要考察对STM32F10X系列单片机GPIO的输出操作。参阅数据手册可知,通过软件编程,GPIO可以配置成以下几种模式:输入浮空输入上拉输入下拉模拟输入开漏输出推挽式输出推挽式复用功能开漏式复用功能根据实验要求,应该首先将GPIO配置为推挽输出模式。吧开关量指示电路K 2345678J4DJD山DJEMIMkDl 薄舒奈专坦型辑空率II.未兴由原理图可知,单片机 GPIO输出

2、信号经过74HC244g冲器,连接LED灯。 由于74HC2446勺OE1和OE潴B接地,为相同电平,故A端电平与Y端电平相同且 LED灯共阳,所以,如果要点亮 LER GPIO应输出低电平。反之,LED灯熄灭。1.3程序分析软件方面,在程序启动时,调用 SystemInit()函数(见附录1),对系统时钟 等关键部分进行初始化,然后再对 GPIO进行配置。GPIO配置函数为SZ_STM32_LEDInit()(见附录2),函数中首先使能 GPIO 时钟:RCC_APB2PeriphClockCmd(GPIO_CLKLed, ENABLE);然后位置GPIO输入输出模式:GPIO_InitSt

3、ructure.GPIO_Mode = GPIO_Mode_Out_PP;再配mGPIO端口翻转速正GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz最后行配置好的参数写入温存器,初始化完成:GPIO_Init(GPIO_PORTLed, &GPIO_InitStructure)。初始花完成后,程序循环点亮一个 LED并熄灭其他LER中间通过Delay() 函数进行延时,达到流水灯的效果(程序完整代码见附录3)。实验程序流程图如下:硬件方面,根据实验指南,将实验板做如下连接:杜邦然连线关系般序线端A插接位置线*B插接位号开发板听开发板朽S1

4、MAIN_BOARDJ48: LED1STM32P4: D2S2MAINBOARDJ48; LED2STM32P4i D3S3MAIN_BOARDJ48; LED3STM32P4i D4S4MAIN_BOARDJ4flf LED4STM32P4: D51.3实验结果实验二、按键实验2.1 实验要求利用STM32实取外部按键状态,按键按下一次产生一次外部中断在中断处理 函数中使按键所对应的灯亮起。2.2 原理分析实验主要考察对STM32F10X系列单片机GPIO外部中断功能的使用。STM32F107VCT一共有 5 组 GPIO,分别是 PA15:0、PB15:0、PC15:0、 PD15:0、

5、PE15:0。STM32的所有GPIO都可以作为中断输入源,单片机通过 复用的方式使其对处理器来说来自GPIO的一共有16个中断Px15:0。具体实现是 PA0、PB0、PC0、PD和 PE0共享一个 GPIO 中断;PA1、PB1、 PC1、PD1和 PE1共享一个 GPIO 中断;PA15、PB15、PC15、PD15 和PE15共享一个GPIO中断。以下图片为以EXTI0为例的外部中断/事件线路 映像:iAFIlO_EXTICRl 寄存器的 EXTl03:O(i要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写1'允许中断请

6、求。当外部中断 线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置1'。 在挂起寄存器的对应位写1',将清除该中断请求。要把IO 口作为外部中断输入,有以下几个步骤:(1)初始化IO 口为输入。这一步设置要作为外部中断输入的IO 口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要 带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就 算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外 部干扰带来的影响。(2)开启IO 口复用时钟,设置IO 口与中断线的映射关系。STM32勺IO 口与 中断线的

7、对应关系需要配置外部中断配置寄存器EXTICR这样我们要先开启复用时钟,然后配置IO 口与中断线的对应关系。才能把外部中断与中断线连接起(3)开启与该IO 口相对的线上中断/事件,设置触发条件。这一步,我们要 配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意 电平变化触发,但是不能配置成高电平触发和低电平触发。 这里根据自己的实际 情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中 断,并设置该中断的EM戏的话,会引起软件仿真不能跳到中断, 而硬件上是可 以的。而不设置EMR软件仿真就可以进入中断服务函数,并且硬件上也是可以 的。建议不要配置EM戏。

8、(4)配置中断分组(NVIC),并使能中断。这一步,我们就是配置中断的分 组以及使能,对STM32勺中断来说,只有配置了 NVIC的设置,并开启才能被执 行,否则是不会执行到中断服务函数里面去的。(5)编写中断服务函数。这是中断设置的最后一步,中断服务函数,是必不 可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬 件错误,从而导致程序崩溃。所以在开启了某个中断后,应为该中断编写服务函 数。在中断服务函数里面编写要执行的中断后的操作,并很据情况判断是否要对中断产生的标志位进行清零。由原理图可知,按键未按下时,GPIO读到的为高电平,按键按下后,IO 口 接地,产生一个电平跳

9、变,所以外部中断触发方式应该设置为下降沿触发。2.3 程序分析LED灯的点亮与实验一中相同,不过多赘述。程序首先对按键进行初始化, 初始化函数为GPIO_KEY_Co"ig()(见附录4),配置过程与实验一中GPIO配置 基本一致。由于此处GPIO需要采集外界按键信号,故GPIO模式应该为调整为内 部上拉电阻输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU。然后正行GPIO中断初始在函数KEY_EXIT_Init()(见附录5),首先将连接 按键的IO 口与EXTI线链接到一起:GPIO_EXTILineConfig(GPIO_KEY1_E

10、XTI_PORT_SOURCE,GPIO_KEY1_EXTI_PIN _SOURCE)然后将触发方式设置为下降沿触发并写入中断配置寄存器,并使能中断:EXTI_InitStructure.EXTI_Line = GPIO_KEY1_EXTI_LINE;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStr

11、ucture) 。之后进行中断分组配置及中断优先级配置,函数为InterruptConfig() (见 附录6)配置过程较为复杂,涉及到抢占优先级和响应优先级的概念。程序首先将所有外部中断归为NVIC_PriorityGroup_2,即2位抢占优先级和2位响应优先级:NVIC_PriorityGroupConfig(NVIC_PriohtyGroup_2);然后和所有外部中断信号的抢占正先级规定为-0、1、2,使其可以相互区别, 并将配置好的参数写入对应寄存器中,完成配置:NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY1_EXTI_IRQn;NVIC

12、_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY2_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;N

13、VIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY3_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_Init(&NVIC_InitStructure) 。初始自完成后,程序进入等待按键中断触发状态,一旦按键按下,则进入中 断服务函数EXTI9_5_IRQHandler()(见附录7)中。在函数中对LED灯进行点亮、 熄灭操作,并重置后正产生标志位。实验流程图如下(主函数代码见附录8)

14、:硬件连接方式如下图所示:杜邦线蚪关第a# 号A插接位置开发板开发板TS1IMAIN_BOARDJ26: SKEY1STM32P4: D5S2MAIN_BOARDJ26: SKEY2STM32P4: D6S3MAIN_BOARDJ26: SKEY3STM32P4: D7S4MAIN_BOARDJ48: LED1STM32P4: D2S5MAIN_BOARDJ48: LED2STM32P4: D3S6MAIN_BOARDJ48: LED3STM32P4t D42.3实验结果实验三、定时器实验3.1 实验要求利用STM32的通用定时器TIM5产生一个1S的中断,在中断函数中实现LED1 LED2

15、LED3 LED4同时翻转的效果。3.2 原理分析实验主要考察对STM32F10X系列单片机定时器的使用。实验中使用的STM32F107单片机有多达10个定时器,包括:多达4个16位定时器,每个定时器有多达 4个用于输入捕获/输出比较 /PWM或脉冲计数的通道和增量编码器输入 1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时 2个独立的看门狗定时器(独立的和窗口型的) 系统时间定时器:24位自减型计数器 2个16位基本定时器用于驱动DAC)最大 72MHzAHB预分频器1.2.512APB1他分频器林2 4.8, 16脑大36MH工PCLK1至APB1外设 外设时钟使能kTAP

16、B1故分粮p数=1a则相率不明后则赖率乂2、至定时尚2?TIMXCLK *外设时钟使能根据时钟树可知,系统时钟经过分频之后,进入 TIM5的时钟模块入口,在 经过预分频处理,才供给 TIM5作时钟使用。预分频器的系数为:TIMx_PSC, 当TIMx_PSC = 0时表示不分频,则TIM5定时器的时钟用CK_CNT =模块入口时钟72MHz;当TIMx_PSC = 1时表示不分频,则 TIM5 定时器的时钟用CK_CNTEItfe入口时钟36MHz;以此类推。公式为:CK_CNT =fCK_PSC/(PSC15:0+1),其中 PSC最大为 65535c其次是TIM5计数器计数值的设置,TIM

17、5计数器以CK_CNT为时钟计数,向下 计数到0或向上计数到设定值(TIMx_ARR)则产生中麻。以向上计数为例,从0开始计数到设定值TIMx_ARR时产生中断。要产生一秒一次中断则要使计数 器的值乘以预分频的值=系统时钟72MHz,其中计数器的值和预分频值都必须小 于65535。我们使预分频值为 7200,计数器值为 10000,则7200 * 10000 = 72,000,000即72M。其中拆分方法很多 35000*2000 = 72,000,000,只要注意计数 器的值和预分频值都必须小于65535即可。当计数值溢出后,会改变计数溢出标 志位,并产生定时器中断,实验中使用其产生中断来进

18、行LED灯翻转。3.3 程序分析LED初始化部分与实验一相同,完成初始化后,点亮所有LED灯。定时器配置函数为TIM5_Init()(见附录6)。配置函数首先使能计数器时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);然后自动装载计数值,计数从0开始:TIM_TimeBaseStructure.TIM_Period = (100 - 1);再氏时器进行预分频系数设设:TIM_TimeBaseStructure.TIM_Prescaler = (7200 - 1);并行小数器设置为向上计数:一TIM_TimeBaseStructure.

19、TIM_CounterMode = TIM_CounterMode_Up;最点写入计时器配置寄存器,康成配置:一一TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure)。配归I成后,还要对计数器溢启志位进行清零,并打开溢出中断,使能计 数器以开始计数。TIM_ClearITPendingBit(TIM5, TIM_IT_Update);TIM_ITConfig(TIM5, TIM_IT_Update, ENABLE);TIM_Cmd(TIM5, ENABLE)。定时器配置完成并使能后,计数器开始工作,当到达预设的计数值之后,产生中断信号。系统在进行

20、相关配置后可以响应定时器产生的中断,中断配置函数为NVIC_Configuration()(见附录7)。函数首先将中断向量表首地址置于 0x08000000:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0000);然后但能TIM5中断:NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_Ini

21、tStructure.NVIC_IRQChannelCmd = ENABLE;最后而配置参数写入中断良制寄存器,完成配置:NVIC_Init(&NVIC_InitStructure)。一旦断产生,系统会对中断产生响应,暂停所有正在执行的低优先级任务且将任务信息和数据压入对应对战区,并进入中断服务函数 TIM5_IRQHandler() (见附录8)中进行处理。在中断服务函数中判断并清除了中断标志位,以便定时器下一次计数中断产生。函数中调用了 LED_Spark()函数(见附录9),实现了 LED的闪烁。程序流程图如下:(开始)初始化LED对应的GPIO初始状态点亮全部LED定时器5参数

22、配置中断参数配置硬件连接方式如下图所示:杜邦线连线关系线序 号线端A插接位置线端B插接位置开发板端子开发板端子S1MAIN_BOARDJ48i LED1STM32P4: D2S2MAIN_BOARDJ48: LED2STM32P4: D3S3MAI 忖一 BOARDJ48: LED3STM32P4i D4S4MAIN_BOARDJ48: LED4STM32P4: D7实验四、按键中断控制 LED灯定时闪烁4.1 实验要求综合实验一、二、三,利用STM32实取外部按键状态,按键按下一次产生一 次外部中断在中断处理函数中使按键所对应的灯闪烁,闪烁间隔通过定时器定时控制。其中,SKEY1®制LED1以1S为间隔,闪烁3次,SKEY2空制LED2以2s 为间隔闪烁3次,SKEY3空制LED3以3s为间隔,闪烁3次。4.2 原理分析实验需要用到STM32勺GPIO输入输出操作,GPIO外部中断和内部定时器中 断。在以上三个实验中,对各个部分都已经进行过详尽的解释,这里不再赘述。此实验需要将以上实验

温馨提示

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

评论

0/150

提交评论