基于STM32的嵌入式单片机简明教程 课件 第3章 输入及输出(GPIO)_第1页
基于STM32的嵌入式单片机简明教程 课件 第3章 输入及输出(GPIO)_第2页
基于STM32的嵌入式单片机简明教程 课件 第3章 输入及输出(GPIO)_第3页
基于STM32的嵌入式单片机简明教程 课件 第3章 输入及输出(GPIO)_第4页
基于STM32的嵌入式单片机简明教程 课件 第3章 输入及输出(GPIO)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习单片机就是学习外设的使用!第三章 通用输入及输出(GPIO)1.GPIO简介2.GPIO输出实验3.GPIO输入实验第三章 通用输入及输出(GPIO)1.GPIO简介通用输入输出——GPIO(General-purposeinput/output)输出:控制引脚输出高电平还是低电平,代表逻辑1和逻辑0输入:检测引脚的电平是低还是高STM32F103RCT6单片机STM32F103RCT6单片机通过分组命名进行区分,从A到G分组:每组0至15共16个引脚,即PA0-PA15、PB0-PB15……1) 输入浮空(GPIO_Mode_IN_FLOATING):该模式下输入电平必须有外部电路确定,根据具体电路,需加外部上拉电阻或下拉电阻2) 输入上拉(GPIO_Mode_IPU):打开IO内部的上拉电阻3) 输入下拉(GPIO_Mode_IPD):打开IO内部的下拉电阻4) 模拟输入(GPIO_Mode_AIN):输入传统的模拟量信号5) 开漏输出(GPIO_Mode_Out_OD):输出端相当于三极管的集电极.要得到高电平状态需要上拉电阻才行.适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。6) 推挽输出(GPIO_Mode_Out_PP):可以提高输出功率,能更好驱动外部的设备,该模式下输出电阻小,带负载能力强7) 复用推挽输出(GPIO_Mode_AF_OD)8) 复用开漏输出(GPIO_Mode_AF_PP)GPIO八种模式不用记!2.GPIO输出实验演示。。。实验原理电路原理图软件原理#include

"stm32f10x.h"//标准外设库头文件

int

main(void)

{

/*********************

LED配置开始*******************************/

//配置GPIO

GPIO_InitTypeDef

GPIO_Initstructure;

//定义GPIO结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

//使能GPIOC时钟

GPIO_Initstructure.GPIO_Mode

=

GPIO_Mode_Out_PP;

//配置为输出模式

GPIO_Initstructure.GPIO_Pin

=

GPIO_Pin_11;

//灯LED2对应引脚为PC11

GPIO_Initstructure.GPIO_Speed

=

GPIO_Speed_50MHz;

//GPIO速度50MHz

GPIO_Init(GPIOC,&GPIO_Initstructure);//用GPIO_InITstructure结构体参数,初始化GPIO

/**********************LED配置结束******************************/

while

(1)//死循环,让程序持续运行

{

GPIO_SetBits(GPIOC,GPIO_Pin_11);

}

}软件原理定义变量GPIO_Initstructure,类型为GPIO_InitTypeDef软件原理STM32单片机的外设默认关闭以降低功耗本实验中使用了组别C的GPIO引脚PC11,所以要通过开启GPIOC的时钟来激活C组GPIO如何使能D组GPIO?TIM2呢?软件原理成员变量1:GPIO_Mode定义工作在推挽输出模式成员变量2:GPIO_Pin定义引脚号,本实验中使用的是PC11,属于组别C的GPIO第11号引脚成员变量3:GPIO_Speed,它配置的是GPIO引脚电平最快的切换速度,一般可以配置为50MHz、20MHz等。软件原理第9-11行程序虽然对GPIO_Initstructure成员变量进行了赋值,但其实并没有正在发挥作用。函数GPIO_Init负责初始化GPIO相关的寄存器。第一个参数GPIOC,确定了第二个参数是对C组GPIO相应寄存器进行设置。第二个参数“&GPIO_Initstructure”前面的“&”表示取结构体变量GPIO_Initstructure的地址。指针指针复习指针变量可以被赋予不同的指针值,可以通过指针变量改变指向(即保存了谁的地址)和间接操作。比如:1.inti;

3.charc;2.int*pi=&i; 4.char*pc=&c;*就表示是指针变量,而&是取地址运算符,&i表示取变量i的地址。int*pi=&i;表示定义指针变量pi,并用i的地址来初始化pi,也就是pi指向了i。软件原理第9-11行程序虽然对GPIO_Initstructure成员变量进行了赋值,但其实并没有正在发挥作用。函数GPIO_Init负责初始化GPIO相关的寄存器。第一个参数GPIOC,确定了第二个参数是对C组GPIO相应寄存器进行设置。第二个参数“&GPIO_Initstructure”前面的“&”表示取结构体变量GPIO_Initstructure的地址。配置程序小结#include

"stm32f10x.h"//标准外设库头文件

int

main(void)

{

/*********************

LED配置开始*******************************/

//配置GPIO

GPIO_InitTypeDef

GPIO_Initstructure;

//定义GPIO结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

//使能GPIOC时钟

GPIO_Initstructure.GPIO_Mode

=

GPIO_Mode_Out_PP;

//配置为输出模式

GPIO_Initstructure.GPIO_Pin

=

GPIO_Pin_11;

//灯LED2对应引脚为PC11

GPIO_Initstructure.GPIO_Speed

=

GPIO_Speed_50MHz;

//GPIO速度50MHz

GPIO_Init(GPIOC,&GPIO_Initstructure);//用GPIO_InITstructure结构体参数,初始化GPIO

上述配置部分程序:开启C组GPIO时钟,使能GPIOC;并将C组第11号GPIO引脚指定为GPIO_Mode_Out_PP工作方式,速度为GPIO_Speed_50MHz。控制部分软件原理while(1)无限循环避免单片机程序跑飞GPIO_SetBits(GPIOC,GPIO_Pin_11)使对应端口输出高电平输出低电平:GPIO_ResetBits函数软件原理#include

"stm32f10x.h"//标准外设库头文件

int

main(void)

{

/*********************

LED配置开始*******************************/

//配置GPIO

GPIO_InitTypeDef

GPIO_Initstructure;

//定义GPIO结构体

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

//使能GPIOC时钟

GPIO_Initstructure.GPIO_Mode

=

GPIO_Mode_Out_PP;

//配置为输出模式

GPIO_Initstructure.GPIO_Pin

=

GPIO_Pin_11;

//灯LED2对应引脚为PC11

GPIO_Initstructure.GPIO_Speed

=

GPIO_Speed_50MHz;

//GPIO速度50MHz

GPIO_Init(GPIOC,&GPIO_Initstructure);//用GPIO_InITstructure结构体参数,初始化GPIO

/**********************LED配置结束******************************/

while

(1)//死循环,让程序持续运行

{

GPIO_SetBits(GPIOC,GPIO_Pin_11);

}

}程序考核任务提示:使GPIO输出低电平的库函数为GPIO_ResetBits在理解开发板原理图基础上,修改程序点亮灯LED4(更进一步:流水灯)3.GPIO输入实验演示输出:控制引脚输出高电平还是低电平,代表逻辑1和逻辑0输入:检测引脚的电平是低还是高按下USER1按键时,开发板上LED2点亮了再次按下USER2按键后,LED2又熄灭实验原理电路原理图当按键没被按下时,PC12引脚电平为高电平(3.3V)当按键按下后,PC12引脚电平为低电平(0V)软件原理#include

"stm32f10x.h"//标准外设库头文件

int

main(void)

{

GPIO_InitTypeDef

GPIO_InitStructure;

//定义GPIO结构体

/*********************

LED2配置*******************************/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_Out_PP;

//配置为输出模式

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;

GPIO_InitStructure.GPIO_Speed

=

GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure);

//调用库函数GPIO_Init()初始化GPIO

/**********************按键USER1配置******************************/

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_IPU;//配置为上拉输入

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_12;

GPIO_Init(GPIOC,

&GPIO_InitStructure);

/**********************按键USER2配置******************************/

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,

ENABLE);

GPIO_InitStructure.GPIO_Mode

=

GPIO_Mode_IPU;

GPIO_InitStructure.GPIO_Pin

=

GPIO_Pin_9;

GPIO_Init(GPIOB,

&GPIO_InitStructure);

while(1)

{

if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)==0)//如果USER1按下,即判断PC12输入电平是否为低电平

{

GPIO_SetBits(GPIOC,GPI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论