历史上的今天
返回首页

历史上的今天

今天是:2024年11月20日(星期三)

正在发生

2018年11月20日 | STM32学习之GPIO详解

2018-11-20 来源:eefocus

GPIO:


STM32的(64引脚的)IO口一共有3个,分别是PA、PB、PC.


STM32的IO端口可以由软件配置成8种模式:


1,输入浮空


2,输入上拉


3,输入下拉


4,模拟输入


5,开漏输出


6,推挽输出


7,推挽复用功能


8,开漏复用功能


STM32的每个IO端口都有7个寄存器来控制。他们分别是:配置模式的2个32位的端口配置寄存器CRL和CRH;2个32位的数据寄存器IDR和ODR;1个32位的置位/复位寄存器BSRR;一个16位的复位寄存器BRR;1个32位的锁存寄存器LCKR;我们常用的IO端口寄存器只有4个:CRL、CRH、IDR、ODR。


注意(在配置STM32外设的时候,任何时候都要先使能该外设的时钟!APB2ENR是APB2总线上的外设时钟使能寄存器)


1.CRL和CRH寄存器-->控制IO口输出还是输入。


STM32的CRL控制着每个IO端口(A~G)的低8位的模式(例如PA0-PA7)。每个IO端口的位占用CRL的4个位,高两位为CNF,低两位为MODE。这里我们可以记住几个常用的配置,比如0X4表示模拟输入模式(ADC用)、0X3表示推挽输出模式(做输出口用,50M速率)、0X8表示上/下拉输入模式(做输入口用)、0XB表示复用输出(使用IO口的第二功能,50M速率)。


STM32的CRH控制着每个IO端口(A~G)的高8位的模式(例如PA8-PA15)。每个IO端口的位占用CRH的4个位,高两位为CNF,低两位为MODE。


2.IDR寄存器和ODR寄存器--》读取引脚输入的内容(是高电平还是低电平)以及控制你输出的内容(是高电平还是低电平)


IDR是一个端口输入数据寄存器,只用了低16位。该寄存器为只读寄存器,并且只能以16位的形式读出。读出的值为对应IO口的状态。


ODR是一个端口输出数据寄存器,也只用了低16位。该寄存器虽然为可读写,但是从该寄存器读出来的数据都是0。只有写是有效的。其作用就是控制端口的输出。


3. BSRR 端口位设置/清除寄存器和BRR端口复位寄存器


BSRR这个寄存器我用了一些,别的也不会。就感觉超级好用。用起来很方便。比如你端口配置好了。想PA5输出“1”。就GPIOA->BSRR |=(1<<5);5是对应的哦。输出“0”,一样的。


GPIO->BSRR |=(1<<(5+16));为什么加16,你明白的。


而BRR与BSRR操作一样。


使用ODR操作PC端口,由于主程序和中断同时有对IO口的操作(主程序设置PC3,中断设置PC6),使用的是ODR进行设置,这样的话会出现意想不到的情况。在线调试观察GPIO寄存器的值二者都是对的,实际输出不正确。如果不用ODR,全部改用BRR和BSRR来实现IO口的设置,则不会出现这个问题,一切正确。


参考手册说明BRR和BSRR的时候,发现有几句话(在GPIO那一章里):


“每个I/O端口位可以自由编程,然而I/0端口寄存器必须按32位字被访问(不允许半字或字节访问)。GPIOx_BSRR和GPIOx_BRR寄存器允许对任何GPIO寄存器的读/更改的独立访问;这样,在读和更改访问之间产生IRQ时不会发生危险。”


“当对GPIOx_ODR的个别位编程时,软件不需要禁止中断:在单次APB2写操作里,可以只更改一个或多个位。这是通过对“置位/复位寄存器”(GPIOx_BSRR,复位是 GPIOx_BRR)中想要更改的位写’1’来实现的。没被选择的位将不被更改。”


最终结论就是如果中断中要对IO口设置,最好使用BSRR和BRR操作,而不要用ODR.


推荐阅读

史海拾趣

宇阳科技(EYANG)公司的发展小趣事

随着公司业务的不断发展,宇阳科技在产能扩张和全球布局方面也取得了显著进展。公司在深圳、东莞、安徽等地建立了多个生产基地,引进了先进的生产线和检测设备,确保了产品的高品质和稳定供应。同时,宇阳科技还积极拓展海外市场,与全球多家知名企业建立了长期稳定的合作关系。

Avalon Photonics公司的发展小趣事

随着Avalon Photonics的不断发展壮大,公司开始更加关注社会责任和可持续发展。公司积极参与公益活动,支持教育事业和科技创新。同时,Avalon也致力于研发更加环保、节能的产品,为推动电子行业的可持续发展贡献力量。通过积极履行社会责任,Avalon Photonics不仅赢得了社会各界的认可,也为公司的长远发展奠定了坚实的基础。


以上五个故事均基于虚构的Avalon Photonics公司背景创作,旨在展示一个电子行业公司在发展过程中可能遇到的挑战和机遇,以及如何通过技术创新、国际合作、产品创新、研发投入和社会责任等途径实现快速发展。这些故事均遵循了只描述事实、不做褒贬的原则。

HBControls公司的发展小趣事
如果电源正常,检查压缩机是否运行。压缩机是冰箱制冷的核心部件,如果压缩机不工作,可能是电机故障或压缩机过热保护启动。
EVER-WAY公司的发展小趣事

在电子行业,技术创新是企业发展的关键。EVER-WAY公司深知这一点,因此在技术研发方面投入了大量资源。公司成立了专门的研发团队,不断引进先进的生产设备和技术人才,致力于开发具有自主知识产权的电子产品。经过多年的努力,EVER-WAY公司成功推出了一系列高性能、高可靠性的电子元器件产品,获得了国内外客户的广泛认可。这些技术创新的突破不仅提升了公司的核心竞争力,也为公司带来了丰厚的经济回报。

方向电子公司的发展小趣事

在电子行业,技术创新是企业发展的关键。EVER-WAY公司深知这一点,因此在技术研发方面投入了大量资源。公司成立了专门的研发团队,不断引进先进的生产设备和技术人才,致力于开发具有自主知识产权的电子产品。经过多年的努力,EVER-WAY公司成功推出了一系列高性能、高可靠性的电子元器件产品,获得了国内外客户的广泛认可。这些技术创新的突破不仅提升了公司的核心竞争力,也为公司带来了丰厚的经济回报。

Compensated Devices Inc公司的发展小趣事

在电子行业竞争激烈的年代,CDI始终坚持品质至上的原则。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到成品检验,每一个环节都严格把关。正是这种对品质的执着追求,使得CDI的产品在客户中赢得了良好的口碑。随着口碑的积累,CDI逐渐发展成为电子元件领域的知名品牌。

问答坊 | AI 解惑

高频直流脉冲环节静止变流器研究

 静止变流器是应用功率半导体器件,将主电源直流电变换成恒压恒频交流电的电气装置。对于交流用电负载与主直流电源共地的场合,静止变流器输出与输入之间必须有变压器电气隔离。本文提出了新颖的高频直流脉冲环节静止变流器电路结构,如图1所示。 ...…

查看全部问答>

利用LED指示电流幅度的电路设计

利用LED指示电流幅度的电路设计 图中LED的发光强度与负载电流成正比,该电路的设计目的是提供一个非常紧凑的电路来替代某些天文学设备中12V电源线上的电表。这种设备包含工作状况不可视的小功率加热元件(防露元件)。不过,当加热器接通时,LED就 ...…

查看全部问答>

正负电源 自己做的

本帖最后由 paulhyde 于 2014-9-15 03:05 编辑 可输出正负12和正负5伏的电源,自己做的电路图  …

查看全部问答>

第4/15原创:独立按键

事无巨细,独立键盘 经过多天的等待,元器件终于补齐了,虽然焊接的过程中出现了非常悲剧的事情,但最终我的板子得以“残”貌示人,就傻傻的高兴一下好了。 言归正传,今天写写独立按键的原理及编程方法。 按键是什么东西,我想这个就不必由我向 ...…

查看全部问答>

CDB文件丢失或损坏

请教: 在打开DSP/BIOS菜单下的工具时,弹出这样的错误,说是CDB文件丢失或损坏。请问如何解决? PS:重新载入不行。…

查看全部问答>

寻求帮助简易超声波测距

学了一点超声波知识,现在想做个来看看效果,可资料有缺乏,哪位高手能给小弟指导一下吗?谢了 要求51单片机主控,用四位数码管显示被测距离,能测5-10米的距离,有效显示4位数。大家能提供点图图和C程序吗?本人将不胜感激。先谢谢了 。。…

查看全部问答>

关于嵌入式设备支持snmp的agent的开发

我现在正准备开发一套网管系统,包括nms和设备上的agent,采用snmp协议,现在看了很多资料,有些看不懂,就像狗咬刺猬,没出下手。 哪位开发过这方面的朋友是否可以提供一个可以参考的版本,主要是agent的程序架构和具体的mib库(这2个问题很困扰 ...…

查看全部问答>

急!求助STM32时钟设置

开发环境IAR + JLINK原来程序中设置HCLK为SYSCLK的4分频,SYSCLK为72MHz,程序正常运行!后来将HCLK设置为SYSCLK的16分频,SYSCLK为72MHz,程序正常运行!再后来将HCLK设置为SYSCLK的64分频,SYSCLK为72MHz,程序不能下载到芯片中! ...…

查看全部问答>

有没有人试过Raisonance的Ride7来对STM8S进行编程下载

网上关于这个软件的设置的内容比较少,尝试了下,始终有error存在。而且在Ride7中也没有具体的STM8S的型号,只有一个STM8-TEST可以选择。RLink真的可以作为STM8S的编译器和下载器来用吗?…

查看全部问答>