您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 嵌入式系统GPIO作业
《嵌入式开发技术》作业2题目GPIO综述院系电子工程学院专业电子信息工程班级A1332学号10姓名曾志勇作业内容:1.以图文方式介绍GPIO模块结构,工作原理(参考STM32中文参考手册.pdf)2.介绍GPIO相关库函数(参考STM32F10xxx固件函数库说明V2.pdf)。3.根据键盘和LED连接电路设计GPIO初始化配置函数,使键盘和LED能正常工作(程序要加注释)。4.介绍LED和按键的工作原理,并设计程序由按键控制LED灯的亮灭,控制逻辑自定义,不能雷同。1.GPIO结构(20分)每组GPIO端口都有如下7个寄存器:偏移地址CRL:端口配置寄存器(低32位)0x0000CRH:端口配置寄存器(高32位)0x0004IDR:输入数据寄存器0x0008ODR:输出数据寄存器0x000cBSRR:端口位设置/清除寄存器0x0010BRR:端口位清除寄存器0x0014LCKR:端口配置锁定寄存器0x0018工作原理:●输出缓冲器被禁止●施密特触发输入被激活●根据输入配置的不同,弱上拉和下拉电阻被连接●出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器●对输入数据寄存器的读访问可得到I/O状态●输出缓冲器被激活─开漏模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将端口置于高阻状态(P-MOS从不被激活)。─推挽模式:输出寄存器上的’0’激活N-MOS,而输出寄存器上的’1’将激活P-MOS。●施密特触发输入被激活●弱上拉和下拉电阻被禁止●出现在I/O脚上的数据在每个APB2时钟被采样到输入数据寄存器●在开漏模式时,对输入数据寄存器的读访问可得到I/O状态●在推挽式模式时,对输出数据寄存器的读访问得到最后一次写的值。2.GPIO相关库函数介绍(10分)3.GPIO初始化函数:(20分)voidLED_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;/开启时钟/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;/定义引脚/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽输出/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/设置频率/GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_5;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_5|GPIO_Pin_1);}4.按键识别函数:(20分)#includestm32f10x.h#includebsp_led.h#includebsp_key.hintmain(void){/*configtheled*/LED_GPIO_Config();LED1_ON;/*configkey*/Key_GPIO_Config();while(1){Scan();}}staticvoidKey_Delay(__IOu32nCount){for(;nCount!=0;nCount--);}voidKey1_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStructure);}voidKey2_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOC,&GPIO_InitStructure);}voidKey_GPIO_Config(void){Key1_GPIO_Config();Key2_GPIO_Config();}voidScan(void){if(Key_Scan(GPIOA,GPIO_Pin_0,1)==KEY_ON){LED1_TOGGLE;/*LED1反转*/}if(Key_Scan(GPIOC,GPIO_Pin_13,1)==KEY_ON){LED2_TOGGLE;/*LED1反转*/}}uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin,uint8_tDown_state){if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==Down_state){Key_Delay(10000);if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==Down_state){while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==Down_state);returnKEY_ON;}elsereturnKEY_OFF;}elsereturnKEY_OFF;}5.主程序:(30分)#includestm32f10x.h#includebsp_led.h#includebsp_key.hintmain(void){/*configtheled*/LED_GPIO_Config();LED1_ON;/*configkey*/Key_GPIO_Config();while(1){Scan();}}staticvoidKey_Delay(__IOu32nCount){for(;nCount!=0;nCount--);}voidKey1_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOA,&GPIO_InitStructure);}voidKey2_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOC,&GPIO_InitStructure);}voidKey_GPIO_Config(void){Key1_GPIO_Config();Key2_GPIO_Config();}voidScan(void){if(Key_Scan(GPIOA,GPIO_Pin_0,1)==KEY_ON){LED1_TOGGLE;/*LED1反转*/}if(Key_Scan(GPIOC,GPIO_Pin_13,1)==KEY_ON){LED2_TOGGLE;/*LED1反转*/}}uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin,uint8_tDown_state){if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==Down_state){Key_Delay(10000);if(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==Down_state){while(GPIO_ReadInputDataBit(GPIOx,GPIO_Pin)==Down_state);returnKEY_ON;}elsereturnKEY_OFF;}elsereturnKEY_OFF;}voidKey_Test(void){LED_GPIO_Config();LED1_ON;LED2_ON;Key1_GPIO_Config();Key2_GPIO_Config();while(1){if(Key_Scan(GPIOA,GPIO_Pin_0,1)==KEY_ON)//KEY1{/*LED1反转*/LED1_TOGGLE;}if(Key_Scan(GPIOC,GPIO_Pin_13,0)==KEY_ON)//KEY2{/*LED2反转*/LED2_TOGGLE;}}}voidLED_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_5;GPIO_Init(GPIOC,&GPIO_InitStructure);GPIO_SetBits(GPIOB,GPIO_Pin_0);GPIO_SetBits(GPIOC,GPIO_Pin_5|GPIO_Pin_1);}
本文标题:嵌入式系统GPIO作业
链接地址:https://www.777doc.com/doc-1781248 .html