STM32单片机的GPIO端口设置

控制/MCU

1877人已加入

描述

1 寄存器问题

首先要了解什么是寄存器?寄存器是中央处理器CPU内用来暂存指令、数据和地址的存储器,在所有应用单片机来进行各种控制操作时,都是通过设置单片机的内部寄存器来操作单片机的,其思想就是根据每块内存单元所具有功能的不同,给这些地址取一个别名,这个过程也叫作寄存器地址映射。在后面的发展过程中,为了减少直接操作寄存器,又增添了库文件操作,以及后来的CubeMX中设置各种寄存器信息,但寄存器操作是单片机内部基础操作的方式,因此寄存器的操作是很有必要了解一下的。

GPIO

图1.1 存储结构图

1.1 单片机中的寄存器

单片机中有众多寄存器,在实际单片机操作中应熟练掌握的寄存器有程序状态寄存器PSW,定时器方式控制寄存器TMOD,电源控制寄存器PCON,定时器控制寄存器TCOD,中断允许寄存器IE,中断优先级寄存器IP,以及串行口控制寄存器SCON。

1.2 寄存器配置的常用方式

(1) 先将待设置位清0,再设置相应的值(常用)。

(2) 先将寄存器的值读出来,修改完成后,再写进寄存器。

1.3 寄存器地址

寄存器地址:保存当前CPU所访问的内存单元的地址。

基地址:Stm32的每个模块都包含多个寄存器,这些寄存器地址通常是连续的,而第一个寄存器的地址(地址值最低的地址)就是基地址。

偏移地址:寄存器在本模块中的地址偏移量。

绝对地址:绝对地址是寄存器的实际地址,它等于基地址+偏移地址。

GPIO

图1.2 GPIO寄存器地址

  在寄存器设置中首先会用到结构体,将操作GPIO的7个寄存器封装进一个结构体中,利用结构体的特性,结构体向内存申请连续存储空间,结构体中的32位变量正好就占据4字节,如是16位的就占据2字节。

2 GPIO端口设置

GPIO:G:通用 P:端口即通用I/O(输入/输出)端口,是Stm32可控制的引脚。Stm32芯片的GPIO引脚与外部设备连接起来,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。

GPIO

图2.1 寄存器与GPIO口的关系图

2.1 GPIO端口位基本结构

GPIO的内部电路主要由一对保护二极管、受开关控制的上下拉电阻、TTL施密特触发器 、两个MOS管、输入输出数据寄存器、复位/置位寄存器、及一些读写控制逻辑电路等组成。注:施密特触发器具有电压滞后的特性,利用它对脉冲波形进行整形,使波形的上升沿或下降沿变得陡直。

GPIO

图2.2 GPIO基本电路图

2.2 GPIO端口位的工作模式

2.2.1 输入模式

  输入模式IO引脚用于读取外部状态,如判断外部按键的状态,接收外部各种传感器的信号等。

(1)GPIO_Mode_IN_FLOATING 浮空输入(即不连接内部上下拉电阻)

(2)GPIO_Mode_IPU 上拉输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_AIN 模拟输入

GPIO

图2.3 输入模式电路图

2.2.2 输出模式

  输出模式IO引脚用于控制外部电路工作,如外部的LED的闪烁,LCD1602的显示等。

(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)

(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)

(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)

(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

GPIO

图2.4 输出模式电路图

2.2.3 复用模式

  复用模式IO引脚用于如定时器的PWM信号的输入输出引脚及串口的输入输出引脚等。

GPIO

图2.5 复用模式电路图

2.2.4 AD/DA模拟信号输入输出模式

  模拟信号输出输出模式IO引脚应用于输入模拟信号便于进行模数转换的电路。

GPIO

图2.6 高阻抗模拟输入模式

3 GPIO端口工作模式设置

3.1 端口配置数据设置

IO引脚的工作模式的设置通过模式选择寄存器GPIOx_MODER来完成,GPIO中的每一个引脚的功能都由两个位控制,CNF0[1:0]与MODE0[1:0]配置序号为0的引脚,后面的引脚依次类推,一组IO口有16个引脚,故需要64bit来配置一组端口,在Stm32中利用两个32位寄存器高位CRH与低位CRL寄存器控制GPIO。其中每一个IO口都是由7个寄存器来控制(CRH、CRL、IDR、ODR、BRR、BSRR、LCKR)[1]。

GPIO

图3.1GPIO寄存器简介

GPIO

图3.2 GPIO端口配置低位寄存器表

  通过软件来设置相应的端口时,就需要参考GPIO配置寄存器表,如在输入模式(MODE[1:0]=00), 输出模式(MODE[1:0]>00),输入输出确定后在CNF[1:0]中确定输出输入的模式(8种)。

GPIO

图3.3 输入输出配置图

例:
//使能PORTA时钟
   RCC- >APB2ENR|=1< < 2;    
//将GPIOA的PA13位清零
    GPIOA- >CRH&=0XFF0FFFFF;   
//首先PA13位为8(二进制1000)MODE位为00,因此是输入,
//CNF位为10,即为上拉/下拉输入
    GPIOA- >CRH|=0X00800000; //PA13设置成上拉/下拉输入 
//PA13输出为高    
    GPIOA- >ODR|=1< < 13;

3.2 输入输出端口设置

  控制GPIO的寄存器已经在3.1介绍过了,现主要介绍一下输入输出的端口寄存器。

(1)端口输入寄存器IDR

GPIO

图3.4 寄存器IDR配置表

(2)端口输出寄存器ODR

GPIO

图3.5 寄存器IDR配置表

4 推挽电路与开漏电路

4.1 推挽电路

推挽电路由输入部分、输出部分、NPN型三极管及PNP型三极管组成,通过输入电压的正负来控制电路中的三极管来达到推挽的效果[2]。

GPIO

图4.1 推挽电路原理图

4.1.1 推电路

当Vin端电压为V+时,上面的N型三极管Q3导通,下面的P型三极管阻塞,电流通过Q3给负载供电,这样的电路就叫推push电路。

GPIO

图4.2 推电路原理图

4.1.2 挽电路

挽电路同理,即当Vin端电压为V-时,P型三极管Q4导通,电流通过负载从下往上流去,这就叫挽pull。

GPIO

图4.3 挽电路原理图

推挽电路的优缺点:由于电路在工作时,两个对称开关三极管每次只有一个导通,所以导通时的损耗较小,且效率高。输出即可以向负载灌电流,也可从负载抽取电流,推拉式输出级即提高电路的负载能力,又提高开关速度。

4.2 开漏电路

场效应管是电压控制型元器件,当对场效应管的栅极施加电压时,漏极与源极会导通。结型场效应管有一个特性就是它的输入阻抗非常大,这意味着:没有电流从控制电路流出,也没有电流进入控制电路。没有电流流入或流出,就不会烧坏控制电路。

GPIO

图4.4 N型场效应管

开漏电路(Open-Drain)就是将图4.5中的三极管换为场效应管,利用栅极的输入来达到控制LED灯的亮灭,即当栅极有电流时,Q5导通及电流不会流入LED灯,所以LED灯灭,当栅极无电流时,Q5断开,LED灯亮。

GPIO

图4.5 开漏电路原理图

开漏电路可以利用外部电路的驱动能力,减少cpu内部的驱动,且开漏输出提供了灵活的输出方式,但当上升沿通过外接上拉无源电阻对负载充电,即当电阻选择小时延时小,但功耗大,反之亦然。

5 GPIO端口输出功能配置步骤及涉及的寄存器

在Stm32单片机由内核和各种电路模块组成,如通用模块中的GPIO模块、串行外设接口SPI、同步/异步串口接口、定时器等电路模块,Stm32单片机通过对各种外设的寄存器进行操作达到操作外设的目的。

5.1 GPIO的配置流程

使能端口时钟,使用前先使能对应模块的时钟;

配置端口位的工作模式寄存器;

配置电路驱动类型寄存器,如推挽还是开漏;

配置引脚响应速度寄存器;

配置上下拉电阻设置寄存器;

配置输出数据寄存器;

5.2 GPIO点亮LED灯的配置流程

void LED_init9(void)
{
//我的stm32板中的两个LED灯在GPIO的A和D组中,在USART1中.
//首先先使能端口APB2,USART1挂载在APB2通道上

  RCC- >APB2ENR|=1< < 2;    //使能PORTA时钟        
  RCC- >APB2ENR|=1< < 5;    //使能PORTD时钟  

//设置GPIOA的8号引脚,8号引脚属于高位因此对CRH寄存器进行操作
//再设置ODR寄存器,对端口的输出电压高低进行设置

  GPIOA- >CRH&=0XFFFFFFF0; //清除bit位
  GPIOA- >CRH|=0X00000003;//PA8 推挽输出  最大输出速度    
    GPIOA- >ODR|=1< < 8;      //PA8 输出高,即将端口的输出电平设置高电平

//与GPIOA同理                        
  GPIOD- >CRL&=0XFFFFF0FF;
  GPIOD- >CRL|=0X00000300;//PD.2推挽输出
  GPIOD- >ODR|=1< < 2;      //PD.2输出高 
}

  

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分