当前位置:首页 > 专题范文>公文范文> 正文

gpio输出控制实验报告(5篇)

木木文档网 发表于:2022-12-23 10:20:04 来源:网友投稿

gpio输出控制实验报告(5篇)gpio输出控制实验报告  入实验  实验四GPIO输  欧阳光明(2021.03.07)实验目的1、能够使用GPIO的输入模式读取幵关信号。2、掌握GPIO相下面是小编为大家整理的gpio输出控制实验报告(5篇),供大家参考。

gpio输出控制实验报告(5篇)

篇一:gpio输出控制实验报告

  入实验

  实验四GPIO输

  欧阳光明(2021.03.07)实验目的1、能够使用GPIO的输入模式读取幵关信号。2、掌握GPIO相关寄存器的用法和设置。3、掌握用C语言编写程序控制GPIOo二.实验环境PC机一台

  ADS1.2集成开发环境一套EasyARM2131教学实验平台一套三.实验内容1•实验通过跳线JP8连接KEY1与P0.16,程序检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫。按下KEY1,蜂鸣器鸣叫,松开后停止蜂鸣。(调通实验后,改为KEY3键进行输入)。2.当检测到KEY1有按键输入时点亮发光二极管LED4并控制蜂鸣器响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键没有输入。(键输入改为键KEY4,发光管改为LED6)o

  3.结合实验三,当按下按键Keyl时,启动跑马灯程序并控制蜂鸣器

  响,软件延时后关掉发光管并停止蜂鸣,然后循环这一过程直到检测按键再次按下。四.实验原理

  当P0□用于GPIO输入时(如按键输入),内部无上拉电阻,需要加上拉电阻,电路图参见图4.2。

  进行GPIO输入实验时,先要设置IODIR使接□线成为输入方式,然后读取IOPIN的值即可。

  图4.2按键电路原理图实验通过跳线JP8连接KEY1.P0.16,程序检测按键KEY1的状态,控制蜂鸣器BEEP的鸣叫。按下KEY1,蜂鸣器鸣叫,松幵后停止蜂鸣。在这个实验中,需要将按键KEY1输入口P0.16设为输入□而蜂鸣器控制口P0.7设置为输出口。蜂鸣器电路如图4.3所示,当跳线JP6连接蜂鸣器时,P0.7控制蜂鸣器,低电平时蜂鸣器鸣叫。LED灯电路如图4.4所示,低电平时灯亮。

  图4.3蜂鸣器控制电路图4.4LED控制电路程序首先设置管脚连接寄存器PINSEL0和PINSEL1,设置P0.16为输入设置P0.7,P1.21为输出。然后检测端口卩0.16的电平,对P0.7,P1.21进行相应的控制,流程图如图4.5所示,实现程序见程序清单4.1。

  图4.5按键输入实验流程图五、实验步骤.源代码及调试结果

  内容1实验步骤

  ①启动ADS1.2IDE集成开发环境,选择ARMExecutableImageforlpc2131工程模板建立一个工程BEEP_keyo

  ②在user组里编写主程序代码main.c。③选用DebuglnFLASH生成目标,然后编译链接工程。④将EasyARM教学实验开发平台上的相应管脚跳线短接。⑤选择Project->Debug,启动AXD进行JLINK仿真调试。⑥全速运行程序,程序将会在main.c的主函数中停止。如下图所加:⑦单击ContextVariable图标按钮(或者选择Processor

  Views->Variables)打开变量观察窗口,通过此窗□可以观察局部变量和全局变量。选择SystemViews->DebuggerInternals即可打开LPC2000系列ARM7微控制器的片内外寄存器窗口。通过变量窗□可以观察变量BEEP、KEY1等的值和ARM7微控制

  器的片内外寄存器窗口。如下图所示:⑧可以单步运行程序,先按下Keyl,观察IOOPIN寄存器的值,

  然后断开Keyl,观察IOOPIN寄存器的值。可以设置/取消断点;或者

  *欧阳光明*创编

  全速运行程序,停止程序运行,观察变量的值,判断蜂鸣器控制

  是否正确。如下图所示:

  图4.6未按下Keyl时IOOPIN的值的值

  图4.7按下Keyl时IOOPIN

  由上两图可知,当按下Keyl时,IOOPIN寄存器的第16位由1变为0(F变为E),keyl与P0.16相连,按下Keyl时,P0.16管脚输出电平由1变为0,寄存器值变化,蜂鸣器响,说明控制是正确的。现象描述:按下KEY1,蜂鸣器鸣叫,松幵后停止蜂鸣。

  源代码:

  #include"config.h"constuint32BEEP=1«7;//P0.7控制蜂鸣器

  constuint32KEY1=1«16;//P0」6连接KEY1(改为KEY3时,只需“constuint32KEY1=1«16”改为“const

  uint32KEY3=1«18w,其余不变。)

  /

  ■士■士

  %•丄■■士

  ■士

  %J”•士■士

  ■丄"■士

  J.■士■士

  •土

  f

  彳・

  彳、哼.

  ■士■土

  *1*

  •土%L*

  *1*

  #7^#1%#T*

  #Tv

  #Tv

  **函数名称:main()

  糾函数功能:GPIO输入实验测试。

  糾检测按键KEY1OKEY1按下,蜂鸣器蜂鸣,松开后停止蜂鸣。糾跳线说明:把JP8的KEY1跳线短接,JP11连接蜂鸣器。

  •士

  •["■士■士■士•士■]"%■士■士

  ■["%•士•士■]"%■士■士

  叫・

  ■]"■丄.•["■士■土

  #r^彳.彳.

  ■]"•士

  #Tv

  ■[“■]“•土•土%f>%■士■”•士■士

  ■”■士

  #r%#r%

  ■]“•”•士■士!

  V#v^>

  intmain(void)

  {PINSEL0=0x00000000;//所有管脚连接GPIOPINSEL1=0x00000000;IOODIR=BEEP;//蜂鸣器控制□输出,其余输入while(1){if((IOOPIN&KEY1)==0)IOOCLR=BEEP;//如果KEY1按下,蜂鸣器鸣叫elseIOOSET=BEEP;//松幵则停止蜂鸣

篇二:gpio输出控制实验报告

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告

  嵌入式系统应用实验报告

  姓名:学号:学院:专业:班级:指导教师:

  实验1、流水灯实验

  1.1实验要求

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告编程控制实验板上LED灯轮流点亮、熄灭,中间间隔一定时间。

  1.2原理分析

  实验主要考察对STM32F10X系列单片机GPIO的输出操作。参阅数据手册可知,通过软件编程,GPIO可以配置成以下几种模式:◇输入浮空◇输入上拉◇输入下拉◇模拟输入◇开漏输出◇推挽式输出◇推挽式复用功能◇开漏式复用功能根据实验要求,应该首先将GPIO配置为推挽输出模式。

  由原理图可知,单片机GPIO输出信号经过74HC244缓冲器,连接LED灯。由于74HC244的OE1和OE2都接地,为相同电平,故A端电平与Y端电平相同且LED灯共阳,所以,如果要点亮LED,GPIO应输出低电平。反之,LED灯熄灭。

  1.3程序分析

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告软件方面,在程序启动时,调用SystemInit()函数(见附录1),对系统时钟等关键部分进行初始化,然后再对GPIO进行配置。GPIO配置函数为SZ_STM32_LEDInit()(见附录2),函数中首先使能GPIO时钟:RCC_APB2PeriphClockCmd(GPIO_CLK[Led],ENABLE);然后配置GPIO输入输出模式:GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;再配置GPIO端口翻转速度:GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;最后将配置好的参数写入寄存器,初始化完成:GPIO_Init(GPIO_PORT[Led],&GPIO_InitStructure)。初始化完成后,程序循环点亮一个LED并熄灭其他LED,中间通过Delay()函数进行延时,达到流水灯的效果(程序完整代码见附录3)。实验程序流程图如下:

  硬件方面,根据实验指南,将实验板做如下连接:

  1.3实验结果

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告

  实验二、按键实验

  2.1实验要求

  利用STM32读取外部按键状态,按键按下一次产生一次外部中断在中断处理函数中使按键所对应的灯亮起。

  2.2原理分析

  实验主要考察对STM32F10X系列单片机GPIO外部中断功能的使用。STM32F107VCT一共有5组GPIO,分别是PA[15:0]、PB[15:0]、PC[15:0]、PD[15:0]、PE[15:0]。STM32的所有GPIO都可以作为中断输入源,单片机通过复用的方式使其对处理器来说来自GPIO的一共有16个中断Px[15:0]。具体实现是PA[0]、PB[0]、PC[0]、PD[0]和PE[0]共享一个GPIO中断;PA[1]、PB[1]、PC[1]、PD[1]和PE[1]共享一个GPIO中断;……PA[15]、PB[15]、PC[15]、PD[15]和PE[15]共享一个GPIO中断。以下图片为以EXTI0为例的外部中断/事件线路映像:

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告

  要产生中断,必须先配置好并使能中断线。根据需要的边沿检测设置2个触发寄存器,同时在中断屏蔽寄存器的相应位写‘1’允许中断请求。当外部中断线上发生了期待的边沿时,将产生一个中断请求,对应的挂起位也随之被置‘1’。在挂起寄存器的对应位写’1’,将清除该中断请求。

  要把IO口作为外部中断输入,有以下几个步骤:(1)初始化IO口为输入。这一步设置要作为外部中断输入的IO口的状态,可以设置为上拉/下拉输入,也可以设置为浮空输入,但浮空的时候外部一定要带上拉,或者下拉电阻。否则可能导致中断不停的触发。在干扰较大的地方,就算使用了上拉/下拉,也建议使用外部上拉/下拉电阻,这样可以一定程度防止外部干扰带来的影响。(2)开启IO口复用时钟,设置IO口与中断线的映射关系。STM32的IO口与中断线的对应关系需要配置外部中断配置寄存器EXTICR,这样我们要先开启复用时钟,然后配置IO口与中断线的对应关系。才能把外部中断与中断线连接起来。(3)开启与该IO口相对的线上中断/事件,设置触发条件。这一步,我们要配置中断产生的条件,STM32可以配置成上升沿触发,下降沿触发,或者任意电平变化触发,但是不能配置成高电平触发和低电平触发。这里根据自己的实际情况来配置。同时要开启中断线上的中断,这里需要注意的是:如果使用外部中断,并设置该中断的EMR位的话,会引起软件仿真不能跳到中断,而硬件上是可以的。而不设置EMR,软件仿真就可以进入中断服务函数,并且硬件上也是可以的。建议不要配置EMR位。(4)配置中断分组(NVIC),并使能中断。这一步,我们就是配置中断的分组以及使能,对

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告STM32的中断来说,只有配置了NVIC的设置,并开启才能被执行,否则是不会执行到中断服务函数里面去的。

  (5)编写中断服务函数。这是中断设置的最后一步,中断服务函数,是必不可少的,如果在代码里面开启了中断,但是没编写中断服务函数,就可能引起硬件错误,从而导致程序崩溃。所以在开启了某个中断后,应为该中断编写服务函数。在中断服务函数里面编写要执行的中断后的操作,并很据情况判断是否要对中断产生的标志位进行清零。

  由原理图可知,按键未按下时,GPIO读到的为高电平,按键按下后,IO口接地,产生一个电平跳变,所以外部中断触发方式应该设置为下降沿触发。

  2.3程序分析LED灯的点亮与实验一中相同,不过多赘述。程序首先对按键进行初始化,初始化函数为

  GPIO_KEY_Config()(见附录4),配置过程与实验一中GPIO配置基本一致。由于此处GPIO需要采集外界按键信号,故GPIO模式应该为调整为内部上拉电阻输入

  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU。然后执行GPIO中断初始化函数KEY_EXIT_Init()(见附录5),首先将连接按键的IO口与EXTI线链接到一起:GPIO_EXTILineConfig(GPIO_KEY1_EXTI_PORT_SOURCE,GPIO_KEY1_EXTI_PIN_SOURCE);然后将触发方式设置为下降沿触发并写入中断配置寄存器,并使能中断:EXTI_InitStructure.EXTI_Line=GPIO_KEY1_EXTI_LINE;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure)。

  之后进行中断分组配置及中断优先级配置,函数为InterruptConfig()(见附录6)。

  配置过程较为复杂,涉及到抢占优先级和响应优先级的概念。程序首先将所有外部中断归为

  NVIC_PriorityGroup_2,即2位抢占优先级和2位响应优先级:

  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_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=GPIO_KEY2_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;NVIC_Init(&NVIC_InitStructure);NVIC_InitStructure.NVIC_IRQChannel=GPIO_KEY3_EXTI_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_Init(&NVIC_InitStructure)。

  初始化完成后,程序进入等待按键中断触发状态,一旦按键按下,则进入中断服务函数

  EXTI9_5_IRQHandler()(见附录7)中。在函数中对LED灯进行点亮、熄灭操作,并重置中断

  产生标志位。

  实验流程图如下(主函数代码见附录8):

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告硬件连接方式如下图所示:2.3实验结果

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告

  实验三、定时器实验

  3.1实验要求

  利用STM32的通用定时器TIM5产生一个1S的中断,在中断函数中实现LED1、LED2、LED3、LED4同时翻转的效果。

  3.2原理分析

  实验主要考察对STM32F10X系列单片机定时器的使用。实验中使用的STM32F107单片机有多达10个定时器,包括:◇多达4个16位定时器,每个定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入◇1个16位带死区控制和紧急刹车,用于电机控制的PWM高级控制定时器◇2个独立的看门狗定时器(独立的和窗口型的)◇系统时间定时器:24位自减型计数器◇2个16位基本定时器用于驱动DAC

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告

  根据时钟树可知,系统时钟经过分频之后,进入TIM5的时钟模块入口,在经过预分频处理,才供给TIM5作时钟使用。预分频器的系数为:TIMx_PSC,当TIMx_PSC=0时表示不分频,则TIM5定时器的时钟用CK_CNT=模块入口时钟72MHz;当TIMx_PSC=1时表示不分频,则TIM5定时器的时钟用CK_CNT=模块入口时钟36MHz;以此类推。公式为:CK_CNT=fCK_PSC/(PSC[15:0]+1),其中PSC最大为65535。其次是TIM5计数器计数值的设置,TIM5计数器以CK_CNT为时钟计数,向下计数到0或向上计数到设定值(TIMx_ARR)则产生中断。以向上计数为例,从0开始计数到设定值TIMx_ARR时产生中断。要产生一秒一次中断则要使计数器的值乘以预分频的值=系统时钟72MHz,其中计数器的值和预分频值都必须小于65535。我们使预分频值为7200,计数器值为10000,则7200*10000=72,000,000即72M。其中拆分方法很多35000*2000=72,000,000,只要注意计数器的值和预分频值都必须小于65535即可。当计数值溢出后,会改变计数溢出标志位,并产生定时器中断,实验中使用其产生中断来进行LED灯翻转。

  3.3程序分析

  LED初始化部分与实验一相同,完成初始化后,点亮所有LED灯。定时器配置函数为TIM5_Init()(见附录6)。配置函数首先使能计数器时钟:

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);然后自动装载计数值,计数从0开始:TIM_TimeBaseStructure.TIM_Period=(100-1);再对计时器进行预分频系数设置:

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告TIM_TimeBaseStructure.TIM_Prescaler=(7200-1);并将计数器设置为向上计数:

  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;最后写入计时器配置寄存器,完成配置:

  TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructure)。配置完成后,还要对计数器溢出标志位进行清零,并打开溢出中断,使能计数器以开始计数。TIM_ClearITPendingBit(TIM5,TIM_IT_Update);TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE);TIM_Cmd(TIM5,ENABLE)。定时器配置完成并使能后,计数器开始工作,当到达预设的计数值之后,产生中断信号。系

  统在进行相关配置后可以响应定时器产生的中断,中断配置函数为NVIC_Configuration()(见附录7)。函数首先将中断向量表首地址置于0x08000000:

  NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0000);然后使能TIM5中断:NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;最后将配置参数写入中断控制寄存器,完成配置:

  NVIC_Init(&NVIC_InitStructure)。一旦中断产生,系统会对中断产生响应,暂停所有正在执行的低优先级任务且将任务信息和

  数据压入对应对战区,并进入中断服务函数TIM5_IRQHandler()(见附录8)中进行处理。在中断服务函数中判断并清除了中断标志位,以便定时器下一次计数中断产生。函数中调用

  了LED_Spark()函数(见附录9),实现了LED的闪烁。程序流程图如下:

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告硬件连接方式如下图所示:

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告

  实验四、按键中断控制LED灯定时闪烁

  4.1实验要求

  综合实验一、二、三,利用STM32读取外部按键状态,按键按下一次产生一次外部中断在中断处理函数中使按键所对应的灯闪烁,闪烁间隔通过定时器定时控制。其中,SKEY1控制LED1以1S为间隔,闪烁3次,SKEY2控制LED2以2S为间隔闪烁3次,SKEY3控制LED3以3S为间隔,闪烁3次。

  4.2原理分析

  实验需要用到STM32的GPIO输入输出操作,GPIO外部中断和内部定时器中断。在以上三个实验中,对各个部分都已经进行过详尽的解释,这里不再赘述。此实验需要将以上实验做综合,并对时序进行调整。难点为,对GPIO外部中断和定时器内部中断的处理,即如何确定两种不同中断的优先级。

  这里的使用的方法是,将所有按键外部中断置于中断分组2,即NVIC_PriorityGroup_2中。将所有按键中断抢占优先级置为0,即最高级别中断,响应优先级置分别置为1、2、3,相互区别。将定时器中断抢占优先级置为1,相应优先级社会中低于按键中断,使其可以被按键信号中断计时,并刷新LED闪烁状态。

  4.3程序分析

  这在程序初始化阶段,分别对LED、按键外部中断和定时器中断进行初始化。主函数如下:intmain(void){

  (完整word版)嵌入式系统流水灯、按键、定时器实验报告/*LED初始化*/

  LED_config();/*LED闪烁¸*/

  Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();Delay(3000000);Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();Delay(3000000);Led_Turn_on_all();Delay(3000000);Led_Turn_off_all();

  /*按键初始化*/

  GPIO_KEY_Config();/*按键外部中断初始化*/

  KEY_EXIT_Init();/*外部中断向量初始化*/

  InterruptConfig();/*定时器5初始化*/

  TIM5_Init();/*定时器中断初始化*/

  NVIC_Configuration();/*等待中断触发*/

  while(1){}}初始化完成后,等待中断触发。一旦按键按下,触发外部中断,则进入外部中断服务函数,

  函数中将判断哪一个按键被按下,记录按下的按键,然后给定时器清零并开始计数,且清零外

  部中断标志位。

篇三:gpio输出控制实验报告

  GPIO实验报告一、实验步骤1、先把板子连到电脑上,然后打开设备管理器,查看EMULATOR是否连接完毕,若连接上了,设置仿真目标板。2、打开CCS的软件,点击Debug中的connect,然后将点开菜单栏project的open,选择所要打开的工程文件,在.c格式的文档中修改程序,程序修改完毕后点击菜单栏的“编译文件”,在下边的方框里查看编译结果,若有错误,双击错误项,指针会自动跳回程序中的错误行进行修改。若编译没有错误,再点击“增量构建”。3、点击File中的“loadprogramme”,跳出一个窗口,选择以.out结尾的文件,编辑的程序输出到板子上。4、测“CLOCKOUT”输出波形。先根据原理图找出CLOCKOUT的管脚,然后将示波器连到此管脚,同时另一个夹子接地。观察示波器上的波形。二、实验程序/*ThisisanexampleforgpioofC5509/*----------------------------------------------------------------------------*/#include<csl.h>#include<csl_pll.h>#include<csl_chip.h>#include<csl_gpio.h>*/

  voiddelay();/*锁相环的设置*/PLL_ConfigmyConfig={0,//IAI:thePLLlocksusingthesameprocessthatwasunderway//beforetheidlemodewasentered1,//IOB:IfthePLLindicatesabreakinthephaselock,//itswitchestoitsbypassmodeandrestartsthePLLphase-locking//sequence1,//PLLmultiplyvalue;multiply24times倍频数,用于设置仿真器CPU的工作频率。1//Divideby2PLLdividevalue;itcanbeeitherPLLdividevalue//(whenPLLisenabled),orBypass-modedividevalue//(PLLinbypassmode,ifPLLmultiplyvalueissetto1)};main(){/*初始化CSL库*/CSL_init();/*设置系统的运行速度为144MHz*///PLL_config(&myConfig);/*确定方向为输出*///ioportunsignedint*IODIR;//IODIR=(unsignedint*)0x3400;

  //////

  ioportunsignedint*IODATA;IODATA=(unsignedint*)0x3401;*clkmd=0x21f3;//晶振12Hz,9Hz=0x21f3;//144MHz=0x2613GPIO_RSET(IODIR,0xFF);while(1){GPIO_RSET(IODATA,0x0c0);delay();GPIO_RSET(IODATA,0x80);delay();}

  }voiddelay()//设置延迟程序,修改j,k的循环次数,可改变延迟时间{Uint32j=0,k=0;for(j=0;j<0x30;j++){for(k=0;k<0xfff;k++){}}}/******************************************************************************\*Endofgpio.c\******************************************************************************/三、实验结果

  四、实验收获在此次试验中,我学会了怎么设置CPU的工作频率以及修改延迟时间。但对老师后来讲得设置断点不是很清楚,老师也对我们组进行了批评。我们组在老师检查以后,重新认识并学习了断点的相关知识和如何设置断点,实现单步程序运行。断点设置步骤如下:断点设置要求:不要设在跳转语句上不要设在块重复语句的倒数1、2条语句上若断点设置在for循环语句上,双击语句左边灰色区域,出现一个红色圆圈,然后点击左边工具栏的第一个图标,实现单步执行。点击菜单栏View中的WatchWindow,可在下方的方框里查看变量变化。

篇四:gpio输出控制实验报告

  每个片上外设的api相互独立增加新的api对其他片上外设没有影响实验所用到的硬件资源和在片外围电路硬件资源cpuled蜂鸣器电阻电容等在片外围电路时钟发生器通用输入输出口等参数设置cpu时钟

  实验一GPIO控制

  一.实验基本原理1.程序功能:通过对GPIO的设置来实现对实验板上LED(3D0)的亮灭的控制具体可分为对DPLL和GPIO的控制.

  (1)时钟电路

  a)C5509的时钟电路由一个DPLL和一个时钟模式寄存器CLKMD组成b)在CLKMD的控制下,DPLL对外部输入时钟进行分频、倍频和锁相,为CPU及外设提供工作时钟

  CLKINpin

  DPLLCLKOUTpin

  CLKMDCLKMDpin

  (2)时钟模式寄存器CLKMD

  相关控制字含义:IAI:退出省电状态后如何进行跟踪,是继续省电状态之前的设定还是重新进行整个跟踪锁定IOB:发生失锁时时钟电路的动作,是继续输出时钟信号还是切换到旁路模式

  PLLMULT:锁定模式下的倍频次数PLLDIV:锁定模式下的分频次数

  (3)GPIO

  -C5509有8个相互独立的可编程GPIO管脚(IO0~IO7)构成-各个GPIO管脚的方向控制(输入或输出)由方向寄存器IODIR设定-各个GPIO管脚上的输入/输出电平由寄存器IODATA控制2.芯片支持库(1)DSP片上外设种类及其应用日趋复杂(2)提供一组标准的方法(APIs:函数、数据类型、宏)用于配置、控制和管理DSP片上外设(3)免除用户编写配置和控制片上外设所必需的定义和代码(4)CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了优化(5)CSL库是可裁剪的:即只有被使用的CSL模块才会包含进应用程序中(6)CSL库是可扩展的:每个片上外设的API相互独立,增加新的API,对其他片上外设没有影响二.实验所用到的硬件资源和在片外围电路硬件资源CPU、LED、蜂鸣器、电阻、电容等在片外围电路

  时钟发生器、通用输入/输出口等三.参数设置CPU时钟:PLLmultiplyvalue=24;PLLdividevalue=1;CLKOUT=PLLMULT/(PLLDIV+1)*CLKIN=24/2*12M=144MHZ小灯亮或灭的时间:N*13*16*65536/(144*10^6)=1.1s(N为指令周期)四.实验流程图

  五.程序#include<csl_pll.h>#include<csl_chip.h>

  #include<csl_gpio.h>voiddelay();/*锁相环的设置*/PLL_ConfigmyConfig0,={

  //IAI:thePLLlocksusingthesameprocessthatwasunderway//beforetheidlemodewasentered

  1,

  //IOB:IfthePLLindicatesabreakinthephaselock,//itswitchestoitsbypassmodeandrestartsthePLL

  phase-locking//sequence24,1dividevalue//(whenPLLisenabled),orBypass-modedividevalue//(PLLinbypassmode,ifPLLmultiplyvalueissetto1)};main(){/*初始化CSL库*/CSL_init();/*设置系统的运行速度为144MHz*///PLLmultiplyvalue;multiply24times//Divideby2PLLdividevalue;itcanbeeitherPLL

  PLL_config(&myConfig);/*确定方向为输出*///////////ioportunsignedint*IODIR;IODIR=(unsignedint*)0x3400;ioportunsignedint*IODATA;IODATA=(unsignedint*)0x3401;*clkmd=0x21f3;//晶振12Hz,9Hz=0x21f3;//144MHz=0x2613GPIO_RSET(IODIR,0xFF);while(1){GPIO_RSET(IODATA,0x0c0);delay();GPIO_RSET(IODATA,0x000);delay();}}voiddelay(){Uint32j=0,k=0;for(j=0;j<0xc0;j++){for(k=0;k<0xffff;k++)

  {}}}

篇五:gpio输出控制实验报告

  GPIO实验报告

  齐鲁理工学院实验报告课程名称:微型计算机控制技术时间:20XX年.10.22地点:D203班级:20XX年级机制3班姓名:杨帆学号:*****4实验项目名称:GPIO端口实验实验指导教师:赵保华实验成绩评定:一、实验目的ü通过实验掌握ARM芯片使用GPIO端口。ü掌握GPIO端口控制LED显示。ü掌握系统时钟的配置。ü掌握库开发原理及方法。二、实验设备ü通过实验掌握ARM芯片使用GPIO端口。ü掌握GPIO端口控制LED显示。ü掌握系统时钟的配置。ü掌握库开发原理及方法。三、实验内容控制信盈达Cotex-M3实验平台的发光二极

  1/6

  管LED1、LED2、LED3、LED4,使它们有规律的点亮,具体顺序如下:LED1亮-LED2亮-LED3亮-LED4亮,如此反复。

  四、实验原理如图所示,LED1-4分别与PB5PE5PA5PA6相连,通过PB5PE5PA5PA6引脚的高低电平来控制发光二极管的亮与灭。当这几个管脚输出高电平的时候发光二极管熄灭,反之,发光二极管点亮。

  GPIO管脚的每个位可以由软件配置成如下几种模式:1.输入浮空:浮空输入状态下,IO的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。做按键,是要读取电平状态,这种配置抗干扰性差,但是是处理信号方面一般是配置这个功能。如测试一个波形,这时候可以配置这个功能。2.输入上拉:经过电阻连接到VCC,能让IO口在没有连接信号时候有一个确定的高电平,并且也能从VCC处获得比较大的驱动电流。3.输入下拉:经过电阻连接到GND,能让IO口在没有连接信号时候有一个确定的低电平。4.模拟输入:芯片内部外设专用功能(ADC,DAC对应的IO口功能)5.开漏输出:IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。6.推挽式输出:IO输出0接GND,IO输出1接VCC,

  2/6

  拥有比较强的驱动能力,如接led,或三极管。7.推挽式复用功能:GPIO口被用作第二功能时的配置情况

  (即并非作为通用IO口使用),比如像片上外设的的UART,SPI模块对应的输出数据线。UART发送线就是复用功能,并且是输出方向。

  8.开漏复用功能:GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用),比如像片上外设的的IIC模块对应的数据线和时钟线,使用时候要外接上拉电阻。如IIC总线的数据线和时钟线就要配置这种模式。

  我们使用IO口输出一个电压值来控制LED灯亮灭,因此选择推挽输出工作模式。

  五、软件程序设计1)配置系统时钟RCC,打开PB、PE、PA端时钟。

  2)配置GPIO口PB5、PE5、PA5、PA6为推挽输出工作模式。3)IO口输出低电平控制灯亮,输出高电平控制灯灭。参考程序:main.c参考程序:#include“stm32f10x.h“//芯片寄存器映射头文件#include“led.h“//自己写的led头文件staticvoidDelay(u32i);//延时函数的声明/*主函数*/intmain(void){GPIO_LED_Init();//LED灯初

  3/6

  始化while(1){GPIO_ResetBits(GPIOB,GPIO_Pin_5);//PB5管脚置

  0,LED1亮Delay(*****);//延时GPIO_SetBits(GPIOB,GPIO_Pin_5);

  //PB5管脚置1,LED1灭Delay(*****);//延时

  GPIO_ResetBits(GPIOE,GPIO_Pin_5);//PE5管脚置0,LED2亮

  Delay(*****);//延时GPIO_SetBits(GPIOE,GPIO_Pin_5);//PE5管脚

  置1,LED2灭Delay(*****);GPIO_ResetBits(GPIOA,GPIO_Pin_5);

  Delay(*****);GPIO_SetBits(GPIOA,GPIO_Pin_5);Delay(*****);

  GPIO_ResetBits(GPIOA,GPIO_Pin_6);

  Delay(*****);

  GPIO_SetBits(GPIOA,GPIO_Pin_6);Delay(*****);}}/*延时函数*/

  staticvoidDelay(u32i){for(;ii--);}led.c参考程序:

  /****************************************************函数名:

  GPIO_LED_Init形参:无返回值:无函数功能:对4个LED灯

  进行初始化,并且关闭所有的led灯

  ****************************************************/#include

  “stm32f10x_gpio.h“voidGPIO_LED_Init(void){GPIO_InitTypeDef

  GPIO_InitStructure;//对GPIOB口的时钟打开

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2P

  eriph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//把IO口配置为

  输出模式,输出速度50MhzGPIO_InitStructure.GPIO_Mode=

推荐访问:gpio输出控制实验报告 输出 实验 控制