流水灯实验报告
ARM系统体系结构及接口技术
实验名称:实验一 GPIO的应用
专业班级:电子114姓名:沈拓学号:2011013906实验日期:2014.3.4
一、 实验目的
1. 了解STM32的GPIO的寄存器配置方法;
2. 熟练应用库函数GPIO的操作;
3. 学会在实验平台中对代码的识别、分析、修改和调试。
4、掌握STM32处理器的基本原理和调试程序,并且能够编写简单的程序
二、 实验内容
1、 验证流水灯。
2、 将实验结果用库函数调用方法实现
3、 用按键Key改变流水灯的流水速度,按键按下流水灯在经过一轮流水之后改变流水速度
4、 用按键Key改变流水灯的流水速度,按键按下流水灯立刻改变流水速度
三、 实验结果
1)按键按下流水灯在经过一轮流水之后改变流水速度
1、 主要源代码
主程序:
#include \"stm32f10x_lib.h\"
extern char i;
extern u16 t;
int main(void)
{
#ifdef DEBUG
debug();
#endif
RCC_Configuration();
SysTick_Configuration();
NVIC_Configuration();
GPIO_Configuration();
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
EXTI_InitStructure.EXTI_Line = EXTI_Line9;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
for(;;)
{
if (i)
{
t=800;
}
else
{
t=200;
}
GPIO_Write(GPIOC,0x0040);
Delay(t);
GPIO_Write(GPIOC,0x0080);
Delay(t);
GPIO_Write(GPIOC,0x0100);
Delay(t);
GPIO_Write(GPIOC,0x0200);
Delay(t);
}
}
按键部分
#include \"stm32f10x_it.h\"
vu32 TimingDelay = 0;
extern void Delay(vu32 nTime);
char i=0;
u16 t;
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line9) != RESET)//中断部分
{
i=~i;
EXTI_ClearITPendingBit(EXTI_Line9);
}
}
2)按键按下流水灯立刻改变流水速度
1、部分主要源程序
主程序
#include \"stm32f10x_lib.h\"
extern char i;
extern u16 t;
int main(void)
{
#ifdef DEBUG
debug();
#endif
RCC_Configuration();
SysTick_Configuration();
NVIC_Configuration();
GPIO_Configuration();
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource9);
EXTI_InitStructure.EXTI_Line = EXTI_Line9;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);
for(;;)
{
if (i)
{
t=800;
}
else
{
t=200;
}
GPIO_Write(GPIOC,0x0040);
Delay(t);
GPIO_Write(GPIOC,0x0080);
Delay(t);
GPIO_Write(GPIOC,0x0100);
Delay(t);
GPIO_Write(GPIOC,0x0200);
Delay(t);
}
}
按键部分
#include \"stm32f10x_it.h\"
vu32 TimingDelay = 0;
extern void Delay(vu32 nTime);
char i=0;
u16 t;
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line9) != RESET)//中断部分
{
for(;;)
{
if (i)
{
t=800;
}
else
{
t=200;
}
i=~i;
EXTI_ClearITPendingBit(EXTI_Line9);
}
}
2、 运行结果
验证符合实验要求,当按键按下时,流水灯速度立即改变。
四、 实验总结
这是本门课本学期的第一次实验,一开始虽然老师讲了很多理论知识,但是等自己动起手了就不知道该如何下手,只能靠自己不断摸索中找感觉,加上老师的提醒,最终顺利完成了实验。
总结本次实验,我认为学习只要还是得靠自己自学,老师讲的东西毕竟有限,有些东西还是靠自己不断实践研究出来的,总之,这次实验中我还是收获了不少东西。