您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > GPIO输出智能小车实验指导手册
实验一小车方向控制【实验目的】●熟悉Keil开发环境的使用;●熟悉STM32F107v实验板;●学习通过GPIO的置位/复位寄存器来控制相应的GPIO口的电平;【实验设备】●硬件:基于STM32F107v单片机的智能小车,PC机;●软件:KEILuVision4集成开发环境,Windows98/NT/2000/XP;【实验内容】熟练使用C语言对I/O口进行正确配置;使用C语言实现对I/O口进行读写访问;实现对小车方向的控制;【实验原理】1,GPIO特性每个通用输入/输出端口有2个32位的配置寄存器(GPIOx_CRL,GPIOx_CRH),2个32位的上数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位的置位/复位寄存器(GPIOx_BSRR),一个16位的复位寄存器(GPIOx_BRR)和一个32位的锁定寄存器(GPIOx_LCKR)。通用输入/输出的每个端口位可以由软件单独的配置成以下几种模式:输入浮动(GPIO_Mode_IN_FLOATING)输入上拉(GPIO_Mode_IPU)输入下拉(GPIO_Mode_IPD)模拟输入(GPIO_Mode_AIN)输出开漏(GPIO_Mode_Out_OD)输出推拉模式(GPIO_Mode_Out_PP)备用功能推拉(GPIO_Mode_AF_PP)备用功能开漏(GPIO_Mode_AF_OD)每个I/O端口位可以自由的编程,尽管I/O端口寄存器必须以32位字的方式访问(不允许以半字或者字节的方式访问)。GPIOx_BSRR和GPIOx_BRR寄存器的目的就是用来允许对GPIO寄存器进行原子的读/修改操作。在这种方式下,当IRQ(中断请求)发生在读和修改操作之间时就不会带来风险。107中新增加了G、F这两个口的GPIO,即GPIO由原来103的80个增加到112个。2,电机驱动模块图一,电机驱动模块如图所示,通过对X(A,B,C,D)的两个端口X1,X2的输入电平控制,可以控制电机的运转方向,同时也就实现了小车的方向控制。3,电路连接图LED显示屏右前右后左前左后STM32F107v小车电机图二,小车电机方位图STM32F107v驱动模块小车PA1PA2PA3PD11PD12PA4PC2PC3PC1PD10PD9PC0A2A1ENAB2B1ENBC2C1ENCD2D1ENDa1a2b1b2c1c2d1d2右后左后右前左前图三,系统电路连接图【实验步骤】1,编写实验程序,并编译成功;2,连接仿真器,打开目标板电源,将编译成功程序烧入目标板;3,实验结果为;当运行方向控制函数(Forward(),Backward()…)时,LED显示屏上会闪烁显示相应方向信息,同时小车向相应方向运行。【部分参考代码】…配置所用的I/O口voidGPIO_Configuration(void){GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOD,&GPIO_InitStructure);}前进控制voidForward(void){LCD_DisplayStringLine(Line4,FORWARD);/*使能驱动模块*/GPIO_SetBits(GPIOC,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_4);/*小车前进时,I/O口电平配置*/GPIO_ResetBits(GPIOC,GPIO_Pin_3);GPIO_SetBits(GPIOC,GPIO_Pin_2);GPIO_ResetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOD,GPIO_Pin_9);GPIO_ResetBits(GPIOD,GPIO_Pin_10);GPIO_SetBits(GPIOD,GPIO_Pin_12);GPIO_ResetBits(GPIOD,GPIO_Pin_11);STM_EVAL_LEDToggle(LED1);Delay_ms(100);LCD_ClearLine(Line4);}后退控制voidBackward(void){LCD_DisplayStringLine(Line4,BACKWARD);/*使能驱动模块*/GPIO_SetBits(GPIOC,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_4);/*小车后退时,I/O口电平配置*/GPIO_ResetBits(GPIOC,GPIO_Pin_2);GPIO_SetBits(GPIOC,GPIO_Pin_3);GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOD,GPIO_Pin_10);GPIO_ResetBits(GPIOD,GPIO_Pin_9);GPIO_SetBits(GPIOD,GPIO_Pin_11);GPIO_ResetBits(GPIOD,GPIO_Pin_12);STM_EVAL_LEDToggle(LED2);Delay_ms(100);LCD_ClearLine(Line4);}左转控制voidLeft_turn(void){STM_EVAL_LEDToggle(LED4);LCD_DisplayStringLine(Line4,TURN__LEFT);/*使能驱动模块*/GPIO_SetBits(GPIOC,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOC,GPIO_Pin_3);GPIO_SetBits(GPIOC,GPIO_Pin_2);GPIO_ResetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOD,GPIO_Pin_10);GPIO_ResetBits(GPIOD,GPIO_Pin_9);GPIO_SetBits(GPIOD,GPIO_Pin_11);GPIO_ResetBits(GPIOD,GPIO_Pin_12);Delay_ms(100);LCD_ClearLine(Line4);}右转控制voidRight_turn(void){STM_EVAL_LEDToggle(LED3);LCD_DisplayStringLine(Line4,TURN__RIGHT);/*使能驱动模块*/GPIO_SetBits(GPIOC,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_4);GPIO_ResetBits(GPIOC,GPIO_Pin_2);GPIO_SetBits(GPIOC,GPIO_Pin_3);GPIO_ResetBits(GPIOA,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_2);GPIO_SetBits(GPIOD,GPIO_Pin_9);GPIO_ResetBits(GPIOD,GPIO_Pin_10);GPIO_SetBits(GPIOD,GPIO_Pin_12);GPIO_ResetBits(GPIOD,GPIO_Pin_11);Delay_ms(100);LCD_ClearLine(Line4);}…注:小车电动机正负端口无法确定,由于接线的原因,上述代码的运行结果可能不正确,此时,只需根据各电机运行结果与期望结果的对比,更改电机接线或者直接在代码中更改相应I/O口电平配置即可。实验二小车速度控制【实验目的】●熟悉Keil开发环境的使用;●熟悉STM32F107v实验板;●学习通过脉冲控制进行小车速度控制;【实验设备】●硬件:基于STM32F107v单片机的智能小车,PC机;●软件:KEILuVision4集成开发环境,Windows98/NT/2000/XP;【实验内容】熟练使用C语言对I/O口进行正确配置;使用C语言实现对I/O口进行读写访问;通过对I/O的配置产生脉冲序列(PWM);实现对小车速度的控制;【实验原理】控制小车伺服电机以不同速度运动是通过让单片机的I/O端口输出不同的脉冲序列来实现的。本实验单片机对小车速度的控制需要通过驱动模块来实现,单片机向驱动模块输出脉冲,驱动模块根据脉冲占空比,向小车输出相应放大后的电流,达到控制小车速度的目的。图一驱动模块根据图一驱动模块的端口说明所示,单片机通过对ENX(X为A,B,C,D)的输入脉冲控制,可以实现对相应电机的输入电流的控制,即实现了小车速度的控制。【实验步骤与现象】1,编写实验程序,并编译成功;2,连接仿真器,打开目标板电源,将编译成功程序烧入目标板;3,实验结果为:不同的velocity值,产生不同的速度,并且速度随velocity值增大而变小。【部分参考代码】…u16velocity;…voidForward(u16velocity){LCD_DisplayStringLine(Line4,FORWARD);GPIO_ResetBits(GPIOC,GPIO_Pin_0);GPIO_ResetBits(GPIOC,GPIO_Pin_1);GPIO_ResetBits(GPIOC,GPIO_Pin_3);GPIO_ResetBits(GPIOC,GPIO_Pin_4);Delay_ms(velocity);GPIO_SetBits(GPIOC,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_1);GPIO_SetBits(GPIOA,GPIO_Pin_3);GPIO_SetBits(GPIOA,GPIO_Pin_4);/*小车前进时,I/O口电平配置*/GPIO_ResetBits(GPIOC,GPIO_Pin_3);GPIO_SetBits(GPIOC,GPIO_Pin_2);GPIO
本文标题:GPIO输出智能小车实验指导手册
链接地址:https://www.777doc.com/doc-2875131 .html