实验一GPIO实验一、实验目的学会编程控制GPIO口二、实验设备计算机、LM3S9B92开发板、USBA型公口转MiniB型5Pin数据线1条三、实验原理LM3s9b92包含九个GPIO模块,每个模块对应一个GPIO端口(PA、PB、PC、PD、PE、PF、PG、PH)。每个GPIO端口包含8个管脚,如PA端口是PA0~PA7。GPIO模块遵循FiRM(FoundationIPforReal-TimeMicrocontrollers)规范,并且支持多达60个可编程输入/输出管脚(具体取决于与GPIO复用的外设的使用情况)。图3-1该开发板的PJ7引脚外接输入按键SW1,PF3引脚通过电阻R11可以驱动LED1,如图3-1所示。实验要求通过编程控制和配置GPIO引脚,实现按键SW1控制LED1的闪烁。四、实验步骤1、连接实验设备:使用USBminiB线缆的mini端与开发板ICDI口相连,另一端接到PC机的USB插口上。2、根据光盘内提供的blinky例程,在Keil开发环境下搭建新的工程,并进行相关配置。调试程序,运行程序,观察运行结果。五、实验结果与分析1、结合开发板电路原理图,分析程序实现两个LED灯闪烁的原理。一、调用函数SysCtlPeriEnable()使能LED所在的GPIO模块;调用函数GPIOPinTypeOut()配置LED所在的GPIO管脚为推挽输出;调用函数GPIOPinWrite()对LED所在的GPIO管脚写0和写1来控制LED的亮灭,并在中间插入函数SysCtlDelay()进行延时控制,以达到闪烁发光的效果。实验一中,PF3管脚设置为输出,当PF3置1时,LED亮,当PF3置0时,LED灭。通过改变PF3输出状态使LED闪烁。一个循环实现交替不断的闪烁。实验二中,当key按键被按下,PJ7为低电平,使能LED1控制端口PF3,置0,LED不亮,反之则亮。通过改变按键key状态使LED闪烁。2、给出程序流程图3、说明程序中调用了哪些库和库函数,并说明各库的功能。一、调用inc,driverlib库hw_types.h、hw_memmap.h、hw_sysctl.h、hw_gpio.h、sysctl.h、gpio.hhw_types.h里包含了一些重要的基本定义,如布尔类型tBoolean、硬件寄存器访问宏等hw_memmap.h里定义有全部片内外设在存储器里的基地址及第二功能选择的地址hw_sysctl.h存放定义了系统控制寄存器的地址、运行模式时钟配置寄存器地址系统初始化使能LED所在GPIO端口for循环循环对应端口置0,灭灯延时对应端口置1,亮灯延时hw_gpio.h定义了GPIO初始化函数及常用IO输入出的相关函数sysctl.h定义LDO控制、时钟控制、复位控制、片内外设控制、睡眠与深度睡眠、中断操作、时钟验证、器件标识部分及函数组成gpio.h定义GPIO控制寄存器名称,利用地址对应实现结构体内部变量操作对物理地址操作库函数:SysCtlPeripheralEnable、SysCtlPeripheralDisable、GPIOPinTypeGPIOInput、GPIOPinTypeGPIOOutput、SYSCTL_PERIPH_GPIOx、GPIO_PORTF_BASE、GPIO_PIN_x、SysCtlLDOSet、SysCtlClockSet、SysCtlDelay、GPIOPinRead、GPIOPinWrite、GPIOPinTypeIn、GPIOPinTypeOut实验一代码#includesystemInit.h//定义LED#defineLED_PERIPHSYSCTL_PERIPH_GPIOF#defineLED_PORTGPIO_PORTF_BASE#defineLED_PINGPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3//主函数(程序入口)intmain(void){//jtagWait();//防止JTAG失效,重要!clockInit();//时钟初始化:晶振,16MHzSysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端口GPIOPinTypeOut(LED_PORT,LED_PIN);//设置LED所在管脚为输出for(;;){GPIOPinWrite(LED_PORT,LED_PIN,0x00);//点亮LEDSysCtlDelay(150*(TheSysClock/3000));//延时约150msGPIOPinWrite(LED_PORT,LED_PIN,0xFF);//熄灭LEDSysCtlDelay(850*(TheSysClock/3000));//延时约850ms}}六、实验二开发参照实现LED灯闪烁的原理,实现通过开发板上按键SW1控制LED1的亮与灭,给出程序框图和源代码。实验二代码#includesystemInit.h//定义LED#defineLED_PERIPHSYSCTL_PERIPH_GPIOF#defineLED_PORTGPIO_PORTF_BASE#defineLED_PINGPIO_PIN_3#defineKEY_PERIPHSYSCTL_PERIPH_GPIOJ#defineKEY_PORTGPIO_PORTJ_BASE#defineKEY_PINGPIO_PIN_7//主函数(程序入口)intmain(void){//jtagWait();//防止JTAG失效,重要!clockInit();//时钟初始化:晶振,16MHzSysCtlPeriEnable(LED_PERIPH);//使能LED所在的GPIO端口GPIOPinTypeOut(LED_PORT,LED_PIN);//设置LED所在管脚为输出系统初始化使能LED所在GPIO端口for循环KEY按下,对应端口置0,灭灯KEY松开,对应端口置1,亮灯延时SysCtlPeriEnable(KEY_PERIPH);//使能KEY所在的GPIO端口GPIOPinTypeIn(KEY_PORT,KEY_PIN);//设置KEY所在管脚为输入for(;;){if(GPIOPinRead(KEY_PORT,KEY_PIN)==0x00)//如果按下KEYGPIOPinWrite(LED_PORT,LED_PIN,0x00);//熄灭LEDelseGPIOPinWrite(LED_PORT,LED_PIN,0xFF);//点亮LEDSysCtlDelay(10*(TheSysClock/3000));//延时约10ms}}