STM32单片机的GPIO端口设置

发布时间:2024-04-16  

1 寄存器问题

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

图片

图1.1 存储结构图

1.1 单片机中的寄存器

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

1.2 寄存器配置的常用方式

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

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

1.3 寄存器地址

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

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

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

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

图片

图1.2 GPIO寄存器地址

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

2 GPIO端口设置

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

图片

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

2.1 GPIO端口位基本结构

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

图片

图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 模拟输入

图片

图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 复用推挽输出(带上拉或者下拉)

图片

图2.4 输出模式电路图

2.2.3 复用模式

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

图片

图2.5 复用模式电路图

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

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

图片

图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]。

图片

图3.1GPIO寄存器简介

图片

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

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

图片

图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

图片

图3.4 寄存器IDR配置表

(2)端口输出寄存器ODR

图片

图3.5 寄存器IDR配置表

4 推挽电路与开漏电路

4.1 推挽电路

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

图片

图4.1 推挽电路原理图

4.1.1 推电路

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

图片

图4.2 推电路原理图

4.1.2 挽电路

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

图片

图4.3 挽电路原理图

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

4.2 开漏电路

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

图片

图4.4 N型场效应管

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

图片

图4.5 开漏电路原理图

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

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

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

5.1 GPIO的配置流程

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

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

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

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

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

配置输出数据寄存器;


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输出高 

}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>