嵌入式系统实验报告

  • 格式:doc
  • 大小:597.33 KB
  • 文档页数:11

嵌入式系统实验报告学号:姓名:班级: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 熄灭*/Delay(0x5fFFFF);EXTI_ClearITPendingBit(EXTI_Line3);}}}void EXTI9_5_IRQHandler(void){int i=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); /* TIM2 enable counter */TIM_TimeBaseStructure.TIM_Period = 1999;TIM_TimeBaseStructure.TIM_Prescaler = 35999; //定时时间为1svoid TIM2_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 的96 bit ID2、电路原理图图开发板USART原理图3、软件分析void Get_ChipID(void) /* 获取芯片ID */{ChipUniqueID[0] = *( u32 *)(0X1FFFF7F0); /* 高字节*/ChipUniqueID[1] = *( u32 *)(0X1FFFF7EC);ChipUniqueID[2] = *( u32 *)(0X1FFFF7E8); /* 低字节*/}void USART_Configuration(void){USART_InitTypeDef USART_InitStructure;USART_ART_BaudRate = 115200;USART_ART_WordLength = USART_WordLength_8b;USART_ART_StopBits = USART_StopBits_1;USART_ART_Parity = USART_Parity_No;USART_ART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_ART_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); /* Enable USART1 */}4、实验现象PA9连接的是USART1 Tx,PA10连接的是USART1 Rx,再通过串口调试助手就可以在电脑上面显示出CPU的ID以及flash容量大小。