历史上的今天
返回首页

历史上的今天

今天是:2025年02月06日(星期四)

正在发生

2021年02月06日 | STM8学习笔记四——STM8的GPIO基础知识

2021-02-06 来源:eefocus

一、GPIO定义

GPIO,即通用输入输出端口General Purpose Input Output的缩写。

GPIO端口可以通过程序配置成输入端口或输出端口。

二、GPIO的IO模式

STM8的GPIO口有12种模式设置,其中输入4种,输出8种:

1、GPIO_Mode_In_FL_No_IT浮空输入无中断

2、GPIO_Mode_In_PU_No_IT上拉输入无中断

3、GPIO_Mode_In_FL_IT浮空输入有中断

4、GPIO_Mode_In_PU_IT 上拉输入有中断

5、GPIO_Mode_Out_OD_Low_Fast

开漏-输出低-高速 Output open-drain, low level, 10MHz

6、GPIO_Mode_Out_PP_Low_Fast

推挽-输出低-高速 Output push-pull, low level, 10MHz

7、GPIO_Mode_Out_OD_Low_Slow

开漏-输出低-低速 Output open-drain, low level, 2MHz

8、GPIO_Mode_Out_PP_Low_Slow

推挽-输出低-低速 Output push-pull, low level, 2MHz

9、GPIO_Mode_Out_OD_HiZ_Fast

开漏-输出高阻-高速 Output open-drain, high-impedance level, 10MHz

10、GPIO_Mode_Out_PP_High_Fast

推挽-输出高-高速 Output push-pull, high level, 10MHz

11、GPIO_Mode_Out_OD_HiZ_Slow

开漏-输出高阻-低速 Output open-drain, high-impedance level, 2MHz

12、GPIO_Mode_Out_PP_High_Slow

推挽-输出高-低速 Output push-pull, high level, 2MHz

或者如下图所示:

所以我们其实要弄懂的主要是输入两种模式(上拉和浮空)以及输出的两种模式(推挽和开漏),剩下的只是在这四种模式下根据参数设置不同进一步划分。

1、上拉输入模式

所谓上拉模式,即设置输入模式时,接一个上拉电阻,大概如下图所示:

上图是STM8设置GPIO为上拉模式时的端口内部电路简图,R1经典取值范围为30k~80k,典型值为55k。(弱上拉)

注:上拉电阻R越大,上拉作用越小,则为弱上拉;反之,R越小,上拉作用越大,则为强上拉。外部上拉电阻取值经验值为4.7k~10k。

上下两个二极管起到一个保护电路的作用,防止外部输入电压太高或太低。这个保护电路可以将外部过高电压降到3.8~4.1V,也可以将外部过低电压抬升到-0.6V,从而保护内部电路。

上拉输入模式可以将不确定的浮空端口信号保持在一个高电平,是最常用的GPIO输入模式。

1、浮空输入模式

浮空模式和上拉模式最大的区别就是没有上拉电阻:

这种结构的输入阻抗较高,能最真实地反映外部输入信号,主要用于ADC(数模转化)的场合。

1、推挽输出模式

推挽(PP)输出模式如下图所示:

简单来说,MOS管Q1和Q2,在输出高低电平时分别起作用。 输出高电平的时候,Q1导通,Q2截止;输出低电平的时候,Q1截止,Q2导通。总之,Q1与Q2在工作时总是保持在一个导通和另一个截止的状态。推挽输出模式的优点是损耗小,效率高。

1、开漏输出模式

开漏(OD)输出模式,顾名思义即漏极开路的输出模式,如下图所示:

开漏输出模式和推挽输出模式最大区别在于没有Q1,只能输出低电平状态“0”,而不能直接输出高电平状态“1”。必须外接上拉电阻,才能输出“1”。这其实跟51单片机的P0口是一样的。

开漏输出模式的特点:

(1)开漏模式须外接上拉电阻才能输出高电平,驱动电流大多数是由外部电源经过上拉电阻供给,单片机内部一般只需要提供极小的栅极控制电流即可。降低单片机功耗。

(2)开漏模式可用于电平信号标准的转换。外部上拉电阻外加的电源电压可以是5V也可以是3.3V(STM8端口最高可承受5V电压),开漏结构可以灌入较大电流(20mA),间接实现TTL电平系列或CMOS电平系列的转换。

(3)开漏模式可用于I²C总线,实现“线与”功能。

(4)开漏模式使用外加上拉电阻,则上拉电阻小,上拉作用强,上升沿时间短,速度快;上拉电阻大,上拉作用小,上升沿时间长,速度缓。

注:STM8单片机“真正的”开漏输出模式内部电路:PE1/I²C_SCL与PE2/I²C_SDA(没有连接VDD的保护二极管)

三、GPIO的寄存器设置

GPIO的5个寄存器:

1.输出数据寄存器ODR;

2.引脚输入寄存器IDR;

3.数据方向寄存器DDR;

4.控制寄存器CR1;

5.控制寄存器CR2;

模式配置图,如下图所示

STM8通过DDR、CR1和CR2三个寄存器来配置不同的输入输出模式。用ODR存储要输出的信号,用IDR来读取对应端口的信号。以上5种寄存器都是8位,对应值STM8每组GPIO对应的8个端口(7:0)。

通过寄存器操作GPIO的示例:

int main(void)

{

/*设置内部高速时钟16M为主时钟*/

CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);

GPIOB->DDR = 0x20;//配置GPIOB的方向寄存器,设置pin5为输出模式

GPIOB->CR1 = 0x20;//配置GPIOB_5为推挽输出

GPIOB->CR2 = 0x00;

while(1)

{

GPIOB->DDR = 0x20;//GPIOB_5输出高电平,亮

delay();

GPIOB->DDR = 0x00;//GPIOB_5输出低电平,暗

delay();

}

}

四、GPIO的库函数实现。

所谓库函数,其实就是官方做的驱动程序库,将对寄存器用结构图一一对应并封装起来,并提供了基本的配置函数。我们只要使用官方的库函数就就可以了,不用再花大力气研究寄存器的配置。

简单举例说明:

GPIO_Init(LED1_PORT,LED1_PIN,GPIO_MODE_OUT_PP_HIGH_FAST );

GPIO_Init这个命令是设置或者说定义管教模式的,上面这条命令的意思就是LED1代表的管教设置为推挽输出模式,初始高电平,高速模式。

注:LED1_PORT和LED1_PIN应该在相关的头文件或者别处已注释,如

#define LED1_PIN GPIO_PIN_5

#define LED1_PORT GPIOB

GPIO_WriteLow(LED1_PORT,LED1_PIN);

在LED1这个管脚输出低电平;

GPIO_WriteHigh(LED1_PORT,LED1_PIN);

在LED1这个管脚输出高电平;

GPIO_WriteReverse(LED1_PORT,LED1_PIN);

翻转LED1这个管脚的电平状态;


推荐阅读

史海拾趣

福斯特半导体(Foster)公司的发展小趣事

对于能判断障碍物的机器人电路,网友可能还有以下几个问题及其相应回答:

问题一:机器人通常使用哪些传感器来判断障碍物?

回答
机器人通常使用多种传感器来判断障碍物,主要包括但不限于以下几种:

  1. 超声波传感器:这是最常见的一种传感器,通过发射超声波并接收其反射回来的信号,根据信号的时间差和波速计算障碍物的距离。超声波传感器在检测大范围、非接触式的障碍物时非常有效。

  2. 红外传感器:红外传感器通过发射红外光并接收其反射光来判断障碍物的存在和距离。红外传感器在近距离和快速检测中表现优异,且成本相对较低。

  3. 激光传感器:激光传感器利用激光束进行测距,具有高精度、长距离测量的特点。但相比超声波和红外传感器,激光传感器的成本更高,适用于对精度要求极高的应用场景。

  4. 视觉传感器:一些高级的机器人还配备了视觉传感器,如摄像头,通过图像处理技术来识别并判断障碍物。这种方法可以实现更复杂的场景理解和避障策略。

问题二:如何设计能判断障碍物的机器人电路?

回答
设计能判断障碍物的机器人电路需要考虑以下几个关键步骤:

  1. 选择合适的传感器:根据机器人的应用场景、成本预算和精度要求选择合适的传感器。

  2. 设计信号处理电路:将传感器采集到的原始信号(如电压、电流等)进行放大、滤波等处理,以便于后续的数字处理或微控制器读取。

  3. 微控制器编程:根据传感器的输出信号编写微控制器的程序,实现障碍物的判断、避障策略的制定和执行。

  4. 执行机构控制:通过微控制器控制机器人的执行机构(如电机、舵机等),实现机器人的移动和避障动作。

  5. 整体调试与优化:对整个电路进行调试和优化,确保机器人能够准确、稳定地判断障碍物并执行避障动作。

问题三:如何提高机器人判断障碍物的准确性和稳定性?

回答
提高机器人判断障碍物的准确性和稳定性可以从以下几个方面入手:

  1. 选用高质量的传感器:高质量的传感器具有更高的精度和稳定性,能够减少误判和漏判的情况。

  2. 优化信号处理电路:通过合理的电路设计和元器件选择,减少信号噪声和干扰,提高信号的信噪比和可靠性。

  3. 算法优化:对微控制器的算法进行优化,采用更先进的算法或策略来提高障碍物的判断精度和避障效果。

  4. 多传感器融合:利用多种传感器进行融合处理,可以弥补单一传感器的不足,提高整个系统的鲁棒性和可靠性。

  5. 实验验证与迭代优化:通过大量的实验验证和迭代优化,不断调整和优化机器人的参数和算法,以提高其判断障碍物的准确性和稳定性。

Diodes公司的发展小趣事

在竞争激烈的电子行业中,合作共赢是企业发展的重要途径。Diodes公司始终坚持合作共赢的理念,与众多上下游企业建立了紧密的合作关系。例如,在供应链方面,Diodes与多家原材料供应商建立了长期稳定的合作关系,确保原材料的稳定供应和质量保障;在销售方面,Diodes与多家分销商建立了战略合作伙伴关系,共同开拓市场、推广产品。这些合作关系不仅为Diodes带来了更多的商业机会和市场份额,也促进了整个产业链的健康发展。

DUBILIER公司的发展小趣事

在电子行业的早期,DUBILIER公司以其卓越的技术创新能力脱颖而出。当时,市场上对高可靠性电子元件的需求日益增长,而DUBILIER公司凭借其独特的生产工艺和材料科学,成功研发出了一系列高性能的电阻器和电容器。这些产品不仅满足了市场的需求,还为公司赢得了良好的声誉。通过不断的技术创新,DUBILIER公司逐渐在电子行业中确立了其领导地位。

爱普特微(aptchip)公司的发展小趣事

随着产品的广泛应用和市场的不断拓展,爱普特微电子逐渐获得了业界的广泛认可。公司屡获殊荣,包括“国家级专精特新小巨人”、“中国IC独角兽”、“中国TOP 50国产MCU厂商”等。这些荣誉的获得,不仅是对公司技术实力和市场表现的肯定,更是对公司未来发展的鼓励和期待。

Echelon_Corporation公司的发展小趣事

Echelon Corporation于1988年在美国加州成立,其初衷是开发和推广先进的通信和控制技术。在成立初期,Echelon便推出了其标志性的LonWorks控制网络平台。该平台采用了开放的通信协议,使得不同厂商的设备可以无缝连接和通信,为工业自动化、建筑自动化等领域带来了革命性的变化。LonWorks平台的成功推出,为Echelon在电子行业奠定了坚实的基础。

Belkin公司的发展小趣事

在发展过程中,贝尔金也通过收购其他公司来增强自身实力。例如,2013年贝尔金正式完成对Linksys的收购,这一举措进一步丰富了其产品线,并加强了在网络设备领域的竞争力。此外,贝尔金还通过不断整合内部资源,优化生产流程,提高产品质量和效率。

问答坊 | AI 解惑

问下路过的高手哈,DXP中编整合库,原理图和PCB怎么对上的

我想了两天没整,明白就是如果原理图多一张或PCB多一张怎么办…

查看全部问答>

【藏书阁】电子技术常用数据手册

目录: 第一章 常用基本数据 第二章 常用数学公式 第三章 电路基本原理、 第四章 常用电子元器件 第五章 模拟电子电路 第六章 数字电路基础 第七章 电力电子基础 第八章 常用电子测量仪器 详细信息: 书名:电子技术常用数据手册 & ...…

查看全部问答>

国家IP核标准符合性评测与认证指南

目录 一、 IP 核评测与认证流程......................................................................................................3 二、 IP 核评测与认证类别....................................................................... ...…

查看全部问答>

proteus7.4问题

大家来帮忙看看这是怎么回事…

查看全部问答>

英文系统下的FAT盘符建立中文文件的问题

默认语言为中文的系统,已添加了中文语言的支持,在FAT盘符中建立相同文件名长度的文件就会报已有相同文件名的文件,并无法创建。 比如:已建立一个文件夹“已有文件”,再建立“新建文件”,同为四个字符,在建立“新建文件”就会报错,无法创建 ...…

查看全部问答>

这个语句什么意思?"con ? DEV_CON : 0"

在用ARM Cortex-M3 的内核时遇到这个问题: 如果有: #define DEV_CON             0x01 #define DAT_WR_BYTE(x)     (0x00000100 | ((x) …

查看全部问答>

FPGA IO定义与使用

在VHDL 语言中,定义IO   就是定义该管脚为输入或输出或输入输出。   用语法表示如下:            A: IN  STD_LOGIC;        -------- ...…

查看全部问答>

protel 99se中导入AUTO CAD.doc

 protel 99se中导入AUTO CAD.doc…

查看全部问答>

freescale MCF51JM128 USB 主口

谁用freescale 的MCF51JM128成功开发过USB主机,用于数据下载,保存到USB存储设备?我们正在为某汽车公司研发一款汽车行驶记录仪,要用到USB主口,虽然freescale提供了USB的协议栈,但我们时间较紧,可能来不及自己开发,现在就想谁知道哪家公司有 ...…

查看全部问答>

关于使用STM32F103定时器比较匹配问题

本人想使用STM32F103输出占空比50%的方波用于控制步进电机,共需四路.看STM32资料上说有4路定时器,每路定时器又有四路独立的比较匹配通道.如果我用一个定时器的四路通道输出4路频率不同的占空比50%的方波行不行呢, ...…

查看全部问答>