嵌入式系统实验报告.docx

上传人:b****5 文档编号:14695546 上传时间:2023-06-26 格式:DOCX 页数:14 大小:305.16KB
下载 相关 举报
嵌入式系统实验报告.docx_第1页
第1页 / 共14页
嵌入式系统实验报告.docx_第2页
第2页 / 共14页
嵌入式系统实验报告.docx_第3页
第3页 / 共14页
嵌入式系统实验报告.docx_第4页
第4页 / 共14页
嵌入式系统实验报告.docx_第5页
第5页 / 共14页
嵌入式系统实验报告.docx_第6页
第6页 / 共14页
嵌入式系统实验报告.docx_第7页
第7页 / 共14页
嵌入式系统实验报告.docx_第8页
第8页 / 共14页
嵌入式系统实验报告.docx_第9页
第9页 / 共14页
嵌入式系统实验报告.docx_第10页
第10页 / 共14页
嵌入式系统实验报告.docx_第11页
第11页 / 共14页
嵌入式系统实验报告.docx_第12页
第12页 / 共14页
嵌入式系统实验报告.docx_第13页
第13页 / 共14页
嵌入式系统实验报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

嵌入式系统实验报告.docx

《嵌入式系统实验报告.docx》由会员分享,可在线阅读,更多相关《嵌入式系统实验报告.docx(14页珍藏版)》请在冰点文库上搜索。

嵌入式系统实验报告.docx

嵌入式系统实验报告

 

嵌入式系统实验报告

 

学号:

姓名:

班级:

13电子信息工程

指导老师:

 

大学电子信息学院

2016年12月

实验一:

一个灯的闪烁

1、实验要求

实现PF6-10端口所连接的任意一个LED灯点亮

2、电路原理图

图1LED灯硬件连接图

3、软件分析

RCC_Configuration();/*配置系统时钟*/

GPIO_Configuration();/*配置GPIOIO口初始化*/

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、软件分析

intmain(void)

{

RCC_Configuration();/*配置系统时钟*/

GPIO_Configuration();/*配置GPIOIO口初始化*/

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、电路原理图

图3SW1硬件原理图

3、软件分析

intmain()

{

RCC_Configuration();/*配置系统时钟*/

GPIO_Configuration();/*IO口初始化*/

GPIO_Write(GPIOF,0xffff);/*全灭*/

Delay(5000);

while

(1)

{

if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)==0)/*如果SW1PA8=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、电路原理图

图4SW1,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

voidEXTI0_IRQHandler(void)

{

inti=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);

}}}

 

voidEXTI3_IRQHandler(void)

{

inti=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熄灭*/

Delay(0x5fFFFF);

EXTI_ClearITPendingBit(EXTI_Line3);

}

}

}

voidEXTI9_5_IRQHandler(void)

{

inti=0;

if(EXTI_GetITStatus(EXTI_Line8)!

=RESET)

{

for(i=0;i<10;i++)

{

GPIO_Write(GPIOF,0xffff);

GPIO_SetBits(GPIOF,GPIO_Pin_8);/*LED3点亮*/

Delay(0x5fFFFF);

GPIO_ResetBits(GPIOF,GPIO_Pin_8);/*LED3熄灭*/

Delay(0x5fFFFF);

EXTI_ClearITPendingBit(EXTI_Line8);

}

}

}

4、实验现象

中断优先级从高到低依次为:

SW3,SW2,SW1

原来5个LED灯都处于熄灭状态,按下SW1,LED3应该闪烁10次,当其闪烁5次后按下SW2,LED2也应该闪烁10次,当其闪烁4次后按下SW3,LED1也应该闪烁10次,则当LED1闪烁完10次后,LED2继续闪烁6次,之后LED1继续闪烁5次。

5、实验总结

通过本次实验,可以对LED状态实行中断嵌套,由以上实验现象,得出以下结论:

高中断优先级可以打断低优先级,中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的服务程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务程序继续执行,反之,低中断优先级不可以打断高优先级。

 

实验五:

TIM2的基本应用

1、实验要求

TIM2定时器将LED灯定时点亮和熄灭一定的时间

2、电路原理图

3、软件分析

TIM_Cmd(TIM2,ENABLE);/*TIM2enablecounter*/

TIM_TimeBaseStructure.TIM_Period=1999;

TIM_TimeBaseStructure.TIM_Prescaler=35999;//定时时间为1s

voidTIM2_IRQHandler(void)

{

TIM_ClearITPendingBit(TIM2,TIM_IT_Update);

GPIO_WriteBit(GPIOF,GPIO_Pin_6,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOF,GPIO_Pin_6)));

}

4、实验现象

LED1灯按照1S的定时时间不断闪烁

5、实验总结

通过本次实验,可以实现对LED灯进行定时控制其闪烁,而不需要延时函数控制了,定时时间较为精准。

 

实验六:

TIM2,TIM3,TIM4多定时器的应用

1、实验要求

利用TIM2,TIM3,TIM4定时器使LED灯以不同的频率闪烁

2、电路原理图

3、软件分析

NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;

NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;

NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQChannel;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;

此处比上一个实验增加了2个定时器,同时又增加了一个优先级

4、实验现象

中断优先级从高到低依次为:

TIM2,TIM3,TIM4

首先LED1以1S的定时时间闪烁5次,之后LED2以2S的定时时间闪烁5次,

最后LED3以3S的定时时间闪烁5次

5、实验总结

利用定时器可以同时使LED灯按照不同的频率闪烁,但是为了现象明显,可以加一个优先级,分别观察现象。

实验七:

串口USART1读取CPU的ID号

1、实验要求

通过USART1读取CPU的96bitID

2、电路原理图

图开发板USART原理图

3、软件分析

voidGet_ChipID(void)/*获取芯片ID*/

{

ChipUniqueID[0]=*(u32*)(0X1FFFF7F0);/*高字节*/

ChipUniqueID[1]=*(u32*)(0X1FFFF7EC);

ChipUniqueID[2]=*(u32*)(0X1FFFF7E8);/*低字节*/

}

voidUSART_Configuration(void)

{

USART_InitTypeDefUSART_InitStructure;

USART_InitStructure.USART_BaudRate=115200;

USART_InitStructure.USART_WordLength=USART_WordLength_8b;

USART_InitStructure.USART_StopBits=USART_StopBits_1;

USART_InitStructure.USART_Parity=USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;

USART_Init(USART1,&USART_InitStructure);

USART_ITConfig(USART1,USART_IT_TXE,ENABLE);

USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);

USART_ClearFlag(USART1,USART_FLAG_TC);

USART_Cmd(USART1,ENABLE);/*EnableUSART1*/

}

4、实验现象

PA9连接的是USART1Tx,PA10连接的是USART1Rx,再通过串口调试助手就可以在电脑上面显示出CPU的ID以及flash容量大小。

5、实验总结

本次实验实现了串口和PC机的传输,可以通过USART1将CPU的ID在电脑上显示出来。

 

实验八:

异步通信USART2的重映射

1、实验要求

实现异步通信USART2的重映射,将数据传送到PC机上

2、电路原理图

图开发板USART原理图

3、软件分析

voidGPIO_Configuration()/*IO口初始化*/

{

GPIO_InitTypeDefGPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;/*USART2Tx-->PD05*/

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;/*PD05-->JP7WR*/

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;/*USART2Rx-->PD06*/

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOD,&GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);

}

该程序将USART2重映射到PD05,PD06引脚

4、实验现象

PD05连接的是USART2Tx,PD06连接的是USART2Rx,通过串口调试助手就可以在电脑上面显示ProgramRunning!

5、实验总结

通过本次实验,可以实现对异步通信USART2的重映射,再通过串口调试助手在电脑上显示出来。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 临时分类 > 批量上传

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2