历史上的今天
返回首页

历史上的今天

今天是:2024年12月22日(星期日)

2020年12月22日 | STM32学习笔记(三)------GPIO口寄存器的操作与使用

2020-12-22 来源:eefocus

1、STM32 的每个 IO 端口都有 7 个寄存器来控制

(1)配置模式的 2 个 32 位的端口 配置寄存器 CRL 和 CRH

(2)2 个 32 位的数据寄存器 IDR 和 ODR

(3)1 个 32 位的置位/复位寄存器 BSRR

(4)一个 16 位的复位寄存器 BRR

(5)1 个 32 位的锁存寄存器 LCKR。


2、每个GPIO端口有两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH)分别控制每个端口的高八位和低八位,如果IO口是0-7号的话,则写CRL寄存器,如果IO口是8-15号的话,则写CRH寄存器,两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR)一个是只读作输入数据寄存器,一个是只写作输出寄存器,一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。常用的IO端口寄存器只有四个:CRH,CRL,IDR,ODR。


3、另外,STM32的每个端口使用前都要将其时钟使能,STM32的GPIO的时钟统一挂接在APB2上,具体的使能寄存器为RCC_APB2ENR,该寄存器的第2位到第8位分别控制GPIOx(x=A,B,C,D,E,F,G)端口的时钟使能,当外设时钟没有启用时,程序不能读出外设寄存器的数值,如打开PORTA时钟:


RCC->APB2ENR|=1<<2;    //使能PORTA时钟 


使能外设时钟后,GPIOA的十六位就可以按照设定的状态工作了,之后就是具体设置哪一位了以第八位为例即高位的首位,在GPIOx_CRH寄存器中进行设置,GPIOA的每一位都有该寄存器的四位来设定相应的参数,这四位中的高两位(CNF0,CNF1)设置GPIO的输入输出模式,低两位(MODE0,MODE1)是设置GPIO的输出频率,具体可以参考STM32参考手册。


GPIOA->CRH&=0XFFFFFFF0; //清掉PA8原来的设置,同时屏蔽其它端口,不影响其它端口的设置


GPIOA->CRH|=0X00000003;//PA8 推挽输出


十六进制中的3 换成二进制 00 11 前两位00表示推挽输出,11代表输出频率50Mhz,若CRH|=0x4,表示模拟输入模式(ADC用),0x3表示推挽输出模式(作输出口用,50M速率),0x8表示上/下拉输入模式(做输入口用),0xB表示复用输出(使用IO口的第二功能,50M速率)。

这是对一位的操作,当然也可以多位操作,因为STM32对GPIO操作必须是32位全字操作,设置完成后GPIOA的第8位就可以使用了之后给GPIOA->ODR=0x xxxx xxxx送数据就行了


首先介绍一下基本的GPIO相关的寄存器:

(一)GPIOX_CRL 低8位端口配置寄存器

这个寄存器主要是对配置管脚是输入还是输出:

其中1)MODEy[1:0]主要是配置是输入端口还是输出端口的。配置为输出得时候还可以配置输出的管脚速度等级。

2)CNFy[1:0] 主要是两种形式,在端口配置输入的时候,即MODEy[1:0]位00(输入),用来配置输入的模式,主要是模拟输入,浮空输入,上拉模式和下拉模式。

3)CNFy[1:0]在端口配置为输出的时候,用来控制输入的模式。具体看手册吧。

总得来说,就是MODEy[1:0] 先配置管脚是输入还是输出,是输入就继续配置CNFy[1:0]来配置输出管脚的连接模式。要是输出的话,就继续配置MODEy[1:0]的管脚速度速度等级,之后再配置管脚的连接模式。上拉,下拉,推免,开漏等等。具体运用的时候看看手册就明白了。


(二)GPIOX_CRH 高8位端口配置寄存器

和GPIOX_CRH 完全一样,只是端口换成高8位了。


(三)GPIOX_ODR 端口输出数据寄存器

一个GPIOA端口就16位,自然的32位的GPIOX_ODR 就只有低16位有效了,想输出什么就给这个寄存器赋值就OK了。

或者用GPIOA->ODR |=(1<


推荐阅读

史海拾趣

Advanced Illumination Inc公司的发展小趣事

Advanced Illumination Inc公司成立于XXXX年,初创时期,公司便专注于LED照明光源的研发与生产。面对当时市场上众多的竞争对手,Ai公司凭借其对技术的深刻理解和对市场需求的敏锐洞察,选择了一条专注于机器视觉工业应用的道路。这一决策为公司后续的发展奠定了坚实的基础。

FCI [First Components International]公司的发展小趣事

在成功开发出优质产品后,Ai公司开始积极拓展市场。公司通过参加各种行业展会、举办技术研讨会等方式,与潜在客户进行深入交流,成功将产品推广至全球范围。同时,公司还注重品牌建设,通过广告宣传、媒体报道等手段提升品牌知名度和美誉度。这些举措使得Ai公司的产品在市场上获得了广泛的认可。

EEMB Co Ltd公司的发展小趣事

EEMB集团一直非常重视企业文化和团队建设。公司注重培养员工的创新意识和团队精神,为员工提供了良好的工作环境和发展机会。同时,公司也积极履行社会责任,关注环保和公益事业,为社会做出了积极贡献。这些举措不仅增强了公司的凝聚力和向心力,也为公司的可持续发展奠定了坚实基础。

请注意,以上故事是基于公开信息和一般情况下的假设而编写的,可能与EEMB Co Ltd公司的实际发展情况存在差异。

CNC Tech公司的发展小趣事

随着科技的不断发展,CNC Tech公司意识到,只有不断创新才能在行业中保持领先地位。因此,公司加大了对研发创新的投入,积极引进和培养高端人才,加强与高校和科研机构的合作。在CNC Tech的努力下,公司成功研发出一系列具有创新性的数控加工技术和产品,不仅提高了生产效率和质量,还降低了生产成本,为客户创造了更大的价值。这些创新成果也引领了行业的技术变革和发展趋势。

ETAL公司的发展小趣事

作为一家有社会责任感的企业,ETAL始终关注社会公益事业。公司积极参与各种慈善活动和社会捐赠项目,为贫困地区的教育事业、环保事业等提供了力所能及的帮助。此外,ETAL还定期组织员工参与志愿服务活动,通过实际行动传递正能量和爱心。这些公益事业不仅提升了公司的社会形象,也增强了员工的凝聚力和向心力。

Excelsys公司的发展小趣事

在市场拓展方面,Excelsys公司采取了多元化的战略。除了深耕国内市场外,公司还积极开拓国际市场,与全球多家知名企业建立了长期稳定的合作关系。这些合作伙伴不仅为Excelsys提供了广阔的市场空间,还带来了先进的技术和管理经验,推动了公司的快速发展。

问答坊 | AI 解惑

发展RFID之可能瓶颈

(一) 隐私权问题:RFID Journal和市场研究机构ABI,共同进行的一项名为「RFID Journal Live」的调查显示「采用RFID技术最大的好处是可以对企业的供应链进行透明管理,有效降低成本,但最近RFID的安全性也非常令人关注,很多公司推出了增强安全性能 ...…

查看全部问答>

功率晶体管、RF MEMS和振荡器的技术进展

微波产业尽管在持续创新,许多产品仍根植于相同技术。例如,砷化镓(GaAs)就是目前许多先进功放及其它有源器件的核心技术。但在这些现象中,孕育着可能变革许多产品制造方式方法的创新。这些“颠覆性技术”会以闻所未闻、见所未见的完全新奇的面目兴 ...…

查看全部问答>

电梯控制课程设计

设计一个电梯运行模拟控制器,其系统框图如图3所示: MCU 1位七段数码管,3个LED灯(显示当前电梯所处楼层与运行方向以及电梯门的状态) 键盘以及对应的LED灯(1-8,开门,关门)每个数字按键对应一个LED灯,按下按键灯亮,执行完命令灯灭) ...…

查看全部问答>

友善之臂最新更新信息(2010-2-5):全新WindowsCE5重装上阵

转自arm9之家论坛。 2010-2-5: 最新友善之臂更新资讯: ========================== 经过我们的稍事移植,WindowsCE6的大部分现在BSP已经在WindowsCE5上重现,下载地址: http://www.arm9.net/mini2440-windowsce5.asp 全新的WindowsCE5具有和 ...…

查看全部问答>

关于PLC技术讨论的呼吁

各位工控坛友,PLC技术在工业控制应用非常广泛,大家在PLC应用中碰到啥问题?新应用,请大家拿出给各位分享,共同提高!…

查看全部问答>

什么是FPGA远程升级?

昨天老大给的一个课题,找了半天资料也没个头绪,特此来请教各位大侠。望不吝赐教,谢谢啊…

查看全部问答>

如何用两个键控制流水灯的花样和速度(求大侠帮忙)

这是我找到的流水灯花样程序,现在希望用两个键,一个键控制流水灯的延时时间,另外一个控制流水灯的花样变换。求大侠帮忙,不胜感激啊!  #include<reg51.h>   #define uchar unsigned char #define uint unsigned int voi ...…

查看全部问答>

招聘: 高级firmware 开发工程师(高通芯片)

本公司(Novatel wireless)招聘 (高级)firmware 开发工程师(高通芯片) 工作地点:上海徐家汇,薪资范围: 高级firmware 开发工程师:15K-20K/月, firmware 开发工程师:8K-14K/月 有兴趣的可以咨询我,MSN是:shinsonyangyx@hotmail.com,简历也 ...…

查看全部问答>