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

下载本文档

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

文档简介

1、嵌入式系统应用实验报告姓名:学号:学院:专业:班级指导教师:实验 1、流水灯实验实验要求编程控制实验板上 LED 灯轮流点亮、熄灭,中间间隔一定时间。原理分析实验主要考察对 STM32F10X 系列单片机 GPIO 的输出操作。参阅数据手册可知,通过软件编程,GPIO 可以配置成以下几种模式:输入浮空输入上拉输入下拉模拟输入开漏输出推挽式输出推挽式复用功能开漏式复用功能根据实验要求,应该首先将 GPIO 配置为推挽输出模式。由原理图可知,单片机 GPIO 输出信号经过 74HC244 缓冲器,连接 LED 灯。由于 74HC244 的 OE1 和 OE2 都接地,为相同电平,故 A 端电平与

2、Y 端电平相同且 LED 灯共阳,所以,如果要点亮 LED,GPIO 应输出低电平。反之,LED 灯熄灭。程序分析SystemInit()函数(1),对系统时钟GPIO 进行配置。GPIO 配置函数为 SZ_STM32_LEDInit()(见附录 2),函数中首先使能 GPIO 时钟:RCC_APB2PeriphClockCmd(GPIO_CLKLed, ENABLE); 然 后 配 置 GPIO 输 入 输 出 模 式 : GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 再 配 置 GPIO 端 口 翻 转 速 度 : GPIO_InitSt

3、ructure.GPIO_Speed = GPIO_Speed_50MHz; 最后将配置好的参数写入寄存器,初始化完成: GPIO_Init(GPIO_PORTLed&GPIO_InitStructure)。初始化完成后,程序循环点亮一个 LED 并熄灭其他 LED,中间通过 Delay() 函数进行延时,达到流水灯的效果(程序完整代码见附录 3)。实验程序流程图如下:硬件方面,根据实验指南,将实验板做如下连接:1.3 实验结果实验二、按键实验实验要求STM32函数中使按键所对应的灯亮起。原理分析实验主要考察对 STM32F10XGPIO 外部中断功能的使用。STM32F107VCT 一共有

4、5 组 GPIO,分别是 PA15:0、PB15:0、PC15:0、PD15:0PE15:0STM32GPIO用的方式使其对处理器来说来自 GPIO 的一共有 16 个中断 Px15:0。具体实现PA0PB0PC0PD0PE0GPIOPB1PC1、PD1PE1共享一个 GPIOPB15PC15PD15PE15共享一个 GPIO 中断。以下图片为以 EXTI0 为例的外部中断/事件线路映像:要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2 个触发寄存器,同时在中断屏蔽寄存器的相应位写1允许中断请求。当外部中断在挂起寄存器的对应位写1,将清除该中断请求。IO 口作为外部中断输入,有以

5、下几个步骤:初始化 IO 口为输入。这一步设置要作为外部中断输入的 IO 口的状态, 可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。STM32 的 IO 口与中断线的对应关系需要配置外部中断配置寄存器 EXTICR,这样我们要先开启复用时钟,然后配置 IO来。开启与该 IO/置中断产生的条件,STM32并设置该中断的 EMR 位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置 EMR,软件仿真就可以进入中断服务函

6、数,并且硬件上也是可以的。建议不要配置 EMR 位。配置中断分组(NVIC),并使能中断。这一步,我们就是配置中断的分组以及使能,对 STM32 的中断来说,只有配置了 NVIC 的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。编写中断服务函数。这是中断设置的最后一步,中断服务函数,是必不可由原理图可知,按键未按下时,GPIO 读到的为高电平,按键按下后,IO 口接地,产生一个电平跳变,所以外部中断触发方式应该设置为下降沿触发。程序分析LED 灯的点亮与实验一中相同,不过多赘述。程序首先对按键进行初始化, 初始化函数为 GPIO_KEY_Config()(见附录 4),配置过程

7、与实验一中 GPIO 配置GPIOGPIOGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU。然后执行 GPIO 中断初始化函数 KEY_EXIT_Init()(见附录 5),首先将连接按键的 IO 口与 EXTI 线到一起:GPIO_EXTILineConfig(GPIO_KEY1_EXTI_PORT_SOURCE,GPIO_KEY1_EXTI_PIN_ SOURCE);然后将触发方式设置为下降沿触发并写入中断配置寄存器,并使能中断: EXTI_InitStructure.EXTI_Line = GPIO_KEY1_EXTI_LINE; EXTI_Ini

8、tStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure)。之后进行中断分组配置及中断优先级配置,函数为 InterruptConfig()(见附录6)。配置过程较为复杂,涉及到抢占优先级和响应优先级的概念。程序首先将所有外部中断归为 NVIC_PriorityGroup_2,即 2 位抢占优先级和 2 位响应优先

9、级:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);然后将所有外部中断信号的抢占优先级规定为 01并将配置好的参数写入对应寄存器中,完成配置:NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY1_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd =

10、ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY2_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY3_EXTI_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =

11、 2;NVIC_Init(&NVIC_InitStructure)。初始化完成后,程序进入等待按键中断触发状态,一旦按键按下,则进入中断服务函数 EXTI9_5_IRQHandler()(见附录 7)中。在函数中对LED 灯进行点亮、熄灭操作,并重置中断产生标志位。实验流程图如下(主函数代码见附录 8):硬件连接方式如下图所示:2.3 实验结果实验三、定时器实验实验要求利用 STM32 的通用定时器 TIM5 产生一个 1S 的中断,在中断函数中实现LED1、LED2、LED3、LED4 同时翻转的效果。原理分析实验主要考察对 STM32F10X 系列单片机定时器的使用。实验中使用的 STM3

12、2F107 单片机有多达 10 个定时器,包括:多达 4 个 16 位定时器,每个定时器有多达 4 个用于输入捕获/输出比较/PWM 或脉冲计数的通道和增量编码器输入1 个 16 位带死区控制和紧急刹车,用于电机控制的 PWM 高级控制定时器2 个独立的看门狗定时器(独立的和窗口型的)系统时间定时器:24 位自减型计数器216 位基本定时器用于驱动 DAC根据时钟树可知,系统时钟经过分频之后,进入 TIM5 的时钟模块入口,在经过预分频处理,才供给TIM5 作时钟使用。预分频器的系数为:TIMx_PSC,当TIMx_PSC = 0 时表示不分频,则 TIM5 定时器的时钟用CK_T=模块入口时

13、钟 当TIMx_PSC= 1时表示不分频,则TIM5 定时器的 时 钟 用CK_T= 模 块 入 口 时 钟36MHz ; 以 此 类 推 。 公 式 为 : CK_T=fCK_PSC/(PSC15:0+1),其中 PSC 最大为 65535。其次是 TIM5 计数器计数值的设置,TIM5 计数器以 CK_T 为时钟计数,向下计数到0或向上计数到设定值(TIMx_ARR)则产生中断。以向上计数为例,从 0 始计数到设定值TIMx_ARR 时产生中断要产生一秒一次中断则要使计数器的乘以预分频的值 =系统时钟72MHz,其中计数器的值和预分频值都必须小于65535我们使预分频值为计数器值为则720

14、0*10000=72,000,00072M。其中拆分方法很多35000*2000 = 72,000,000,分频值都必须小于 65535LED 灯翻转。程序分析LED 初始化部分与实验一相同,完成初始化后,点亮所有LED 灯。定时器配置函数为 TIM5_Init()(见附录 6)。配置函数首先使能计数器时钟:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE); 然 后 自 动 装 载 计 数 值 , 计 数 从 0 开 始 : TIM_TimeBaseStructure.TIM_Period = (100 - 1);再 对 计 时 器 进 行

15、 预 分 频 系 数 设 置 : TIM_TimeBaseStructure.TIM_Prescaler = (7200 - 1); 并将计数器设置为向上计数:TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; 最后写入计时器配置寄存器,完成配置:TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure)。配置完成后,还要对计数器溢出标志位进行清零,并打开溢出中断,使能计数器以开始计数。TIM_ClearITPendingBit(TIM5, TIM_IT_Update); TIM_ITConf

16、ig(TIM5, TIM_IT_Update, ENABLE);TIM_Cmd(TIM5, ENABLE)。为 NVIC_Configuration()(见附录7)。函数首先将中断向量表首地址置0 x08000000:NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0 x0000); 然 后 使 能 TIM5 中 断 : NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure

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

18、流程图如下:硬件连接方式如下图所示:实验四、按键中断控制 LED 灯定时闪烁实验要求STM32LED1 以 1S3LED2 以 2S 3 次,SKEY3 控制 LED3 以 3S3 次。原理分析2OOGPIO 外部中断和定时器部中断的处理,即如何确定两种不同中断的优先级。这里的使用的方法是, 将所有按键外部中断置于中断分组 2 , 即NVIC_PriorityGroup_2 中。将所有按键中断抢占优先级置为 0,即最高级别中断, 响应优先级置分别置为 1、2、3,相互区别。将定时器中断抢占优先级置为 1, 相应优先级社会中低于按键中断,使其可以被按键信号中断计时,并刷新 LED 闪烁状态。程序分析LED主函数如下:int main(void)/* LED 初始化 */ LED_config();/* LED 闪烁 */ Led_Turn_on_all(); Delay(3000000);Led_Turn_off_all();Delay(3000000);Led_Tur

温馨提示

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

评论

0/150

提交评论