历史上的今天
返回首页

历史上的今天

今天是:2025年08月08日(星期五)

正在发生

2019年08月08日 | 学习STM32(1)-IO-GPIO

2019-08-08 来源: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.


推荐阅读

史海拾趣

American Power Design Inc公司的发展小趣事

为了进一步增强自身实力,APDI积极寻求与其他公司的并购与合作机会。它成功收购了一家在半导体制造领域具有领先技术的公司,从而完善了自身的产品线和技术体系。同时,APDI还与多家行业巨头建立了战略合作关系,共同研发新技术和新产品,实现了资源共享和优势互补。

EMMICRO公司的发展小趣事

EMMICRO公司非常注重国际化战略的实施。公司积极参加国际展览和交流活动,与全球范围内的合作伙伴建立了良好的合作关系。同时,公司还通过引进国际先进的生产技术和管理经验,不断提升自身的核心竞争力和国际化水平。在海外市场拓展方面,EMMICRO公司也取得了显著的成果,为公司的长期发展奠定了坚实的基础。

CETC公司的发展小趣事

为了进一步提升公司的国际影响力,CETC开始积极布局海外市场。公司先后在美国、欧洲等地设立了研发中心和分支机构,与当地企业开展深度合作,共同研发适应市场需求的产品。同时,CETC还积极参加国际电子展会和论坛,展示公司的最新技术和产品,吸引了众多国际客户的关注。通过这些努力,CETC成功打开了海外市场的大门,为公司的长远发展注入了新的动力。

Connect-Tech Products Corp公司的发展小趣事

Connect-Tech Products Corp公司在追求经济效益的同时,也积极履行社会责任。公司注重环保和可持续发展,采用环保材料和节能技术,减少生产过程中的环境污染。此外,公司还积极参与公益事业,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为其赢得了社会各界的广泛赞誉和支持。

请注意,以上故事是基于电子行业和公司发展的一般模式虚构的,并不代表Connect-Tech Products Corp公司的实际发展历程。如需了解该公司的真实情况,建议查阅相关新闻报道、公司年报或行业分析报告等资料。

Electron Products Inc公司的发展小趣事

EPI一直非常重视产品的品质管理。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测、包装等各个环节都进行严格把控。此外,EPI还注重持续改进,不断引入先进的生产技术和设备,提升产品的质量和性能。这些举措使得EPI的产品在市场上享有很高的声誉和口碑。

High Energy Corp公司的发展小趣事

EPI一直非常重视产品的品质管理。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测、包装等各个环节都进行严格把控。此外,EPI还注重持续改进,不断引入先进的生产技术和设备,提升产品的质量和性能。这些举措使得EPI的产品在市场上享有很高的声誉和口碑。

问答坊 | AI 解惑

喷气式甲克虫汽车

喷气式战斗机看到过,可经过改装的喷气式甲克虫汽车必定没看到过吧,看着这样的车必定有飞的感到。想看看发动引擎后的效果?请看下面的图片…

查看全部问答>

有没有开发过【软plc】的朋友

有没有开发过【软plc】的朋友 麻烦留下联系方式,谢谢~…

查看全部问答>

请教怎样实现路径选择界面

E:\\mobile.bmp 如图,请教高手怎么实现这样的文件打开时的路径选择界面, 最上面一行显示当前路径, 下面可以点选,进入或返回上一级路径, 多谢高手指教。 …

查看全部问答>

有个问题,能帮我解决的现金酬谢

有哪位兄台知道如果利用AT命令控制短信猫设备拨打USSD号码:如:*111*222×NNN#这样的号码。 如果有成功实现过的请和我联系。QQ:61238333.如果能帮我解决问题。现金200元酬谢。…

查看全部问答>

如何在窗口最下面那条(输入法旁边)上添加按钮?

Wince对话框程序 需要在最下面的蓝色条上添加个按钮 我加了ToolBar却显示在了窗口里面 高手快来啊 …

查看全部问答>

真的没人用upsd了吗

                                  …

查看全部问答>

基于单片机的音乐喷泉设计

求一个基于单片机的音乐喷泉设计程序,如果有硬件设计就更好了。 这个头一次做,根本不知道咋下手,菜鸟一名,大大们先帮帮忙吧~谢谢…

查看全部问答>

TI的M3/M4能用作工业控制用么

请问TI的M3/M4能用作工业控制用么?…

查看全部问答>

幸福的烦恼

纠结于学什么,fpga,arm,dsp?实验室板子都有,叫我怎么去抉择,什么都想学,怕什么都没学好,现在学了段时间的fpga感觉还行,源于大学的梦想,想学arm,又怕没什么精力,怕学不好,真不知道什么办,望各位给我些指导,亲们  谢谢你们! ...…

查看全部问答>

keil4的头文件有点迷糊~

#include \"inc/hw_ints.h\"和#include \"hw_ints.h\"有什么区别吗?为什么我的Keil的头文件里有#include \"inc/hw_ints.h\"但是在文件里没有找到#include \"inc/hw_ints.h\"。只有#include \"hw_ints.h\"。还有就是#include \"hw_ints.h\"和#inclu ...…

查看全部问答>