嵌入式系统实验报告(优选.)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改
赠人玫瑰,手留余香。
嵌入式系统实验报告
学号:
姓名:
班级:13电子信息工程
指导老师:
苏州大学电子信息学院
2016年12月
实验一:一个灯的闪烁
1、实验要求
实现PF6-10端口所连接的任意一个LED灯点亮
2、电路原理图
图1 LED灯硬件连接图
3、软件分析
RCC_Configuration(); /* 配置系统时钟 */
GPIO_Configuration(); /* 配置GPIO IO口初始化 */ for(;;)
{
GPIOF->ODR = 0xfcff; /* PF8=0 --> 点亮D3 */
Delay(1000000);
GPIOF->ODR = 0xffff; /* PF8=1 --> 熄灭D3 */
Delay(1000000);
4、实验现象
通过对GPIOF8的操作,可以使LED3闪烁
5、实验总结
这是第一次使用STM32开发板,主要内容是对IO端口进行配置,点亮与IO端口相连接的LED灯,闪烁周期为2S。通过本实验对STM32开发板的硬件原理有了初步了解。
实验二:流水灯
1、实验要求
实现PF6-10端口所连接的5个LED灯顺次亮灭
2、电路原理图
图1 流水灯硬件连接图3、软件分析
int main(void)
{
RCC_Configuration();/* 配置系统时钟 */
GPIO_Configuration();/* 配置GPIO IO口初始化 */
for(;;)
{
GPIOF->ODR = 0xffbf;
/* PF6=0 --> 点亮LED1 */
Delay(5000000);
GPIOF->ODR = 0xff7f;
/* PF7=0 --> 点亮LED2 */
Delay(5000000);
GPIOF->ODR = 0xfeff;
/* PF8=0 --> 点亮LED3 */
Delay(5000000);
GPIOF->ODR = 0xfdff;
/* PF9=0 --> 点亮LED4 */
Delay(5000000);
GPIOF->ODR = 0xfbff;
/* PF10=0 --> 点亮LED5 */
}
}
4、实验现象
LED1~LED5依次点亮,亮灭的时间间隔都为1S。
5、实验总结
本次实验对STM32开发板的GPIO端口进行进一步学习,通过程序可以实现流水灯的闪烁。
实验三:单级外部中断
1、实验要求
按下某个按键,触发中断,中断服务程序改变LED灯状态
2、电路原理图
图3 SW1硬件原理图
3、软件分析
int main()
{
RCC_Configuration(); /* 配置系统时钟*/
GPIO_Configuration(); /* IO口初始化*/
GPIO_Write(GPIOF,0xffff); /* 全灭 */
Delay(5000);
while(1)
{
if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_8)==0) /* 如果SW1 PA8=0 */
{
GPIO_SetBits(GPIOF, GPIO_Pin_6); /* LED1点亮 */
Delay(0x1FFFFF);
GPIO_ResetBits(GPIOF, GPIO_Pin_6); /* LED1 熄灭*/
Delay(0x1FFFFF);
}
}
}
4、实验现象
原来5个LED灯都处于熄灭状态,按下SW1,触发中断程序,LED1点亮。
5、实验总结
通过本次实验,可以对某一状态通过外部中断,改变其当前状态。
实验四:多中断嵌套
1、实验要求
按下某个按键,触发中断,中断服务程序改变LED灯状态
2、电路原理图
图4 SW1,SW2,SW3硬件原理图
3、软件分析
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel; //设定中断源为PA0 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //中断占优先级为0 NVIC_InitStructure.NVIC_IRQChannel = EXTI3_IRQChannel; //设定中断源为PD3 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断占优先级为1 NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; //设定中断源为PA8 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //中断占优先级为2 void EXTI0_IRQHandler(void)
{
int i=0;
if(EXTI_GetITStatus(EXTI_Line0) != RESET)
{
for(i=0;i<10;i++)
{
GPIO_Write(GPIOF,0xffff);
GPIO_SetBits(GPIOF, GPIO_Pin_6); /* LED1 点亮 */
Delay(0x5fFFFF);
GPIO_ResetBits(GPIOF, GPIO_Pin_6);/* LED1 熄灭 */
Delay(0x5fFFFF);
EXTI_ClearITPendingBit(EXTI_Line0);
} } }
void EXTI3_IRQHandler(void)
{
int i=0;
if(EXTI_GetITStatus(EXTI_Line3) != RESET) {
for(i=0;i<10;i++) {
GPIO_Write(GPIOF,0xffff);
GPIO_SetBits(GPIOF, GPIO_Pin_7); /* LED2 点亮 */
Delay(0x5fFFFF);
GPIO_ResetBits(GPIOF, GPIO_Pin_7);/* LED2 熄灭 */