嵌入式系统GPIO作业.docx

上传人:b****8 文档编号:27875676 上传时间:2023-07-05 格式:DOCX 页数:16 大小:1.30MB
下载 相关 举报
嵌入式系统GPIO作业.docx_第1页
第1页 / 共16页
嵌入式系统GPIO作业.docx_第2页
第2页 / 共16页
嵌入式系统GPIO作业.docx_第3页
第3页 / 共16页
嵌入式系统GPIO作业.docx_第4页
第4页 / 共16页
嵌入式系统GPIO作业.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

嵌入式系统GPIO作业.docx

《嵌入式系统GPIO作业.docx》由会员分享,可在线阅读,更多相关《嵌入式系统GPIO作业.docx(16页珍藏版)》请在冰豆网上搜索。

嵌入式系统GPIO作业.docx

嵌入式系统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位)0x0000

●CRH:

端口配置寄存器(高32位)0x0004

●IDR:

输入数据寄存器0x0008

●ODR:

输出数据寄存器0x000c

●BSRR:

端口位设置/清除寄存器0x0010

●BRR:

端口位清除寄存器0x0014

●LCKR:

端口配置锁定寄存器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分)

#include"stm32f10x.h"

#include"bsp_led.h"

#include"bsp_key.h"

intmain(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;

}

else

returnKEY_OFF;

}

else

returnKEY_OFF;

}

5.主程序:

(30分)

#include"stm32f10x.h"

#include"bsp_led.h"

#include"bsp_key.h"

intmain(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;

}

else

returnKEY_OFF;

}

else

returnKEY_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);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1