设为首页 加入收藏

TOP

明解STM32—GPIO理论基础知识篇之寄存器原理(一)
2023-07-23 13:27:57 】 浏览:38
Tags:明解 STM32 GPIO
?  一、前言

        在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍。GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析;GPIO工作模式中主要介绍GPIO应用在不同的使用场景下,GPIO端口的静态特征配置和动态的工作模式,同时对信号的工作流进行了分析。

        这一篇主要对GPIO模块使用到的寄存器进行详细的分析介绍,适当了解GPIO寄存器的相关知识,可以对GPIO最底层的一些配置和工作原理有更好的认识,有助于加深对GPIO基本结构及工作模式的理解,同时对后续介绍到的GPIO在应用设计中有较好的帮助。


二、寄存器概述

        图1为STM32的GPIO模块中寄存器的概述,总共有5种类型的寄存器。这里需要了解的是GPIO模块的port和pin的概念。其中寄存器名称中GPIOx的x表示不同的GPIO端口port,比如STM32芯片支持的port可以从A到I,GPIOA,GPIOB就表示了不同的端口;pin就是不同的port下支持的引脚,比如GPIOA下的引脚数从pin0到pin15。因此port就是pin的集合,不同的port都有它自己的如下图列出来的寄存器。

图1 GPIO寄存器概述


三、寄存器详述

        本节对寄存器位、寄存器偏移地址、复位值、寄存器功能定义进行介绍。可通过字节(8 位)、半字(16 位)或字(32 位)对 GPIO 寄存器进行访问。

(1)端口模式寄存器GPIOx_MODER

        本寄存器的功能为设置GPIO端口的方向和模式,总共0到32位,每两位就是该port下的pin值,例如将GPIOA_MODER的MODER0[1:0]配置为00,就是将GPIOA的pin0管脚功能配置为输入类型的管脚,将GPIOA_MODER的MODER1[1:0]配置为00,就是将GPIOA的pin1管脚功能配置为输入类型的管脚,以此类推。?

图2 GPIOx_MODER寄存器定义

(2)端口输出类型寄存器GPIOx_OTYPER

        本寄存器设置GPIO端口的输出类型,前提是该端口中的pin已经配置成输出功能。该寄存器只有0到15位有效,每一位就是对应的pin值,例如将GPIOA_OTYPER的OT0设置为1,就是将GPIOA的pin0管脚设置为输出开漏的类型。

 

图3 GPIOx_OTYPER寄存器定义

(3)端口输出速度寄存器GPIOx_OSPEEDR

        本寄存器设置GPIO的输出速度频率,前提是该端口中的pin已经应用作为输出功能管脚。

        这个速度是指输出驱动电路的响应速度:(芯片内部在I/O口的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路,通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。可理解为输出驱动电路的带宽:即一个驱动电路可以不失真地通过信号的最大频率。

        速度高的IO耗电大、噪声也大,速度低的IO耗电小、噪声也小。使用合适的速度可以降低功耗和噪声。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能,也可以降低功耗。当然如果要输出较高频率的信号,但却选用了较低频率的速度,很可能会得到失真的输出信号。关键是GPIO的引脚速度跟应用匹配。

        比如:

        ①USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小。

        ②I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度。

        ③SPI接口,若使用18M或9M波特率,需要选用50M的GPIO的引脚速度。

        当为该端口下寄存器值的pin配置为11时,输出速度和电容C有关,这是指对于CMOS工艺的集成电路而言,输入阻抗是非常高的,主要功耗来自于绝缘栅等效的电容充放电效应。既然是电容的充放电,考虑信号源的内阻(基于标准CMOS电路的输出),根据RC充电常数和逻辑门限电平就能得出一个最小周期,其对应一个最高IO频率。?

图4 GPIOx_OSPEEDR寄存器定义

(4)端口上拉/下拉寄存器GPIOx_PUPDR

        该寄存器是配置端口对应的pin上是否需要配置芯片内部的上拉或者下拉电阻。

图5 GPIOx_PUPDR寄存器定义

        STM32芯片GPIO的上拉电阻和下拉电阻最小值,典型值和最大值如下:

 

(5)端口输入数据寄存器 GPIOx_IDR

        本寄存器读取GPIO端口引脚的信号电平值。该寄存器只有0到15位有效,每一位就是对应的pin值,例如GPIOA_OTYPER的IDR00值为1,就是此时读到GPIOA的pin0管脚值为1高电平信号。

图6 GPIOx_IDR寄存器定义

(6)GPIO 端口输出数据寄存器 GPIOx_ODR

        本寄存器可以设置GPIO端口引脚的信号值。前提是该引脚为普通的IO输出引脚。该寄存器只有0到15位有效,每一位就是对应的pin值,例如设置GPIOA_OTYPER的ODR0值为1,就是此时输出GPIOA的pin0管脚值为1高电平信号。

图7 GPIOx_ODR寄存器定义

(7)G

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇汇编语言复习第二章节 下一篇AIR32F103(十二) 搭载 AIR32F103C..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目