嵌入式系统-流水灯、按键、定时器实验报告.pdf
《嵌入式系统-流水灯、按键、定时器实验报告.pdf》由会员分享,可在线阅读,更多相关《嵌入式系统-流水灯、按键、定时器实验报告.pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式系统应用嵌入式系统应用实验报告实验报告姓姓名:名:学学号:号:学学院:院:专专业:业:班班级:级:指导教师:指导教师:学习文档 仅供参考实验实验 1 1、流水灯实验、流水灯实验编程控制实验板上 LED 灯轮流点亮、熄灭,中间间隔一定时间。实验主要考察对 STM32F10X 系列单片机 GPIO 的输出操作。参阅数据手册可知,通过软件编程,GPIO 可以配置成以下几种模式:输入浮空输入上拉输入下拉模拟输入开漏输出推挽式输出推挽式复用功能开漏式复用功能根据实验要求,应该首先将 GPIO 配置为推挽输出模式。由原理图可知,单片机 GPIO 输出信号经过 74HC244 缓冲器,连接 LED 灯
2、。由于 74HC244 的 OE1 和 OE2 都接地,为相同电平,故 A 端电平与 Y 端电平相同且LED 灯共阳,所以,如果要点亮 LED,GPIO 应输出低电平。反之,LED 灯熄灭。软件方面,在程序启动时,调用SystemInit()函数见附录见附录 1 1,对系统时钟等关键部分进行初始化,然后再对 GPIO 进行配置。GPIO 配置函数为 SZ_STM32_LEDInit()见附录见附录 2 2,函数中首先使能 GPIO时钟:RCC_APB2PeriphClockCmd(GPIO_CLKLed, ENABLE);然后配置 GPIO 输入输出模式:GPIO_InitStructure.
3、GPIO_Mode = GPIO_Mode_Out_PP;再配置 GPIO 端口翻转速度:学习文档 仅供参考GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;最后将配置好的参数写入寄存器,初始化完成:GPIO_Init(GPIO_PORTLed, &GPIO_InitStructure)。初始化完成后,程序循环点亮一个 LED 并熄灭其他 LED,中间通过 Delay()函数进行延时,到达流水灯的效果程序完整代码见附录程序完整代码见附录 3 3。实验程序流程图如下:硬件方面,根据实验指南,将实验板做如下连接:学习文档 仅供参考实验二、按键实验实验
4、二、按键实验利用 STM32 读取外部按键状态,按键按下一次产生一次外部中断在中断处理函数中使按键所对应的灯亮起。实验主要考察对 STM32F10X 系列单片机 GPIO 外部中断功能的使用。STM32F107VCT 一共有 5 组 GPIO,分别是 PA15:0、PB15:0、PC15:0、PD15:0、PE15:0。STM32 的所有 GPIO 都可以作为中断输入源,单片机通过复用的方式使其对处理器来说来自 GPIO 的一共有 16 个中断 Px15:0。 具体实现是 PA0、PB0、PC0、PD0和 PE0共享一个 GPIO 中断;PA1、PB1、PC1、 PD1和 PE1共享一个 GP
5、IO 中断; PA15、 PB15、 PC15、 PD15和 PE15共享一个 GPIO 中断。以下列图片为以 EXTI0 为例的外部中断/事件线路映像:要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2 个触发寄存器,同时在中断屏蔽寄存器的相应位写1允许中断请求。当外部中断线上发生了期待的边沿时, 将产生一个中断请求, 对应的挂起位也随之被置 1 。在挂起寄存器的对应位写1,将清除该中断请求。要把 IO 口作为外部中断输入,有以下几个步骤:(1)初始化 IO 口为输入。这一步设置要作为外部中断输入的 IO 口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部
6、一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉, 也建议使用外部上拉/下拉电阻, 这样可以一定程度防止外部干扰带来的影响。(2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。STM32 的 IO 口与中断线的对应关系需要配置外部中断配置寄存器 EXTICR,这样我们要先开启复用时钟,然后配置 IO 口与中断线的对应关系。才能把外部中断与中断线连接起来。(3)开启与该 IO 口相对的线上中断/事件,设置触发条件。这一步,我们要配置中断产生的条件,STM32 可以配置成上升沿触发,下降沿触发, 或者任意学习文档 仅供参考电平变化触发, 但
7、是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的 EMR 位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置 EMR 位。(4) 配置中断分组NVIC,并使能中断。这一步,我们就是配置中断的分组以及使能,对 STM32 的中断来说,只有配置了 NVIC 的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。(5)编写中断服务函数。这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,
8、但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃。所以在开启了某个中断后,应为该中断编写服务函数。 在中断服务函数里面编写要执行的中断后的操作,并很据情况判断是否要对中断产生的标志位进行清零 。由原理图可知,按键未按下时,GPIO 读到的为高电平,按键按下后,IO 口接地,产生一个电平跳变,所以外部中断触发方式应该设置为下降沿触发。LED 灯的点亮与实验一中相同,不过多赘述。程序首先对按键进行初始化,初始化函数为 GPIO_KEY_Config()见附录见附录 4 4,配置过程与实验一中 GPIO 配置基本一致。 由于此处 GPIO 需要采集外界按键信号,故 GPIO 模式应该为调
9、整为内部上拉电阻输入GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU。然后执行 GPIO 中断初始化函数 KEY_EXIT_Init()见附录见附录 5 5,首先将连接按键的 IO 口与 EXTI 线链接到一起:GPIO_EXTILineConfig(GPIO_KEY1_EXTI_PORT_SOURCE,GPIO_KEY1_EXTI_PIN_SOURCE);然后将触发方式设置为下降沿触发并写入中断配置寄存器,并使能中断:EXTI_InitStructure.EXTI_Line = GPIO_KEY1_EXTI_LINE;EXTI_InitStructur
10、e.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure)。之后进行中断分组配置及中断优先级配置,函数为 InterruptConfig()见见附录附录 6 6。学习文档 仅供参考配置过程较为复杂,涉及到抢占优先级和响应优先级的概念。程序首先将所有外部中断归为 NVIC_PriorityGroup_2,即 2 位抢占优先级和 2 位响应
11、优先级:NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);然后将所有外部中断信号的抢占优先级规定为 0、1、2,使其可以相互区别,并将配置好的参数写入对应寄存器中,完成配置:NVIC_InitStructure.NVIC_IRQChannel = GPIO_KEY1_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 流水 按键 定时器 实验 报告
限制150内