历史上的今天
返回首页

历史上的今天

今天是:2025年07月01日(星期二)

正在发生

2019年07月01日 | STM32学习笔记(三) STM32的GPIO的深入学习

2019-07-01 来源:eefocus

STM32的开发学习主要涉及软硬件两个部分的实现,包含众多外设和总线的理解配置。STM32的整个学习曲线并不陡峭,但入门却相当困难,因此在学习之初,多动手实验和测试相当重要,GPIO作为整个STM32与外部连接的端口,难度不高,却十分重要。从深入解析GPIO外设开始,一步步熟悉掌握STM32各个模块,就是STM32的整个学习流程。

GPIO模块回顾

    在嵌入式软件开发中,几乎所有功能的实现都需要GPIO端口输出才能发挥作用。GPIO端口的操作包括时钟使能,寄存器配置,端口信息修改。这些基础的东西上一章已经讲过,我这里就不在细说,我这里主要讲GPIO涉及到的其它库函数。

1. 读取GPIO端口数据函数

    GPIO_ReadInputDataBit(GPIOx,GPIO_Pin_y);//读取单个输入端口的数据

    GPIO_ReadInputData(GPIOx);//读取整个输入端口的数据

    GPIO_ReadOutputDataBit(GPIOx, GPIO_Pin_y);//读取单个输出端口的数据

    GPIO_ReadOutputData (GPIOx);//读取整个输入出端口的位数据

    这4个库函数是用来直接读取端口数据的,其中x:A-G y: 0~15

    上面的函数实现的是读取当前GPIO口或位的输入输出数据,库函数没有什么可说的。

    但这几个函数涉及到下面两个寄存器:

    端口数据输入寄存器(GPIOA_IDR~GPIOG_IDR);

    端口数据输出寄存器(GPIOA_ODR~GPIOG_ODR);

    这两个寄存器都是16位的,高16位保留,读取值为0,低16位代表着对应GPIO端口位[15:0]的状态,偏移值位0cH,具体地址可参考寄存器表。上面的库函数读取Data就是读取这两个寄存器中选定那个的低16位,读取DataBit就是读取选定寄存器16位中的任意选定位。

 2 . 写入GPIO端口数据函数

   GPIO_WriteBit(GPIOx, GPIO_Pin_y,BIT_SET/BIT_RESET);//置位或者复位单个输出端口的数据

   GPIO_Write(GPIOx, 0x1111);//置位或者复位整个输出端口的数据

   其中x:A-G y: 0~15

   这两个函数是对GPIO_SetBits和GPIO_ResetBits的补充,可以满足对多个端口同时设置状态的特性。

   端口复位置位寄存器(GPIOA_BSRR~GPIOG_BSRR) ,32bit复位置位寄存器,w(只写,下同),

   [31~16]写0无效,写1对应GPIOx_ODR位置0

   [15~0]写0无效,写1对应GPIOx_ODR位置1

   端口复位寄存器(GPIOA_BRR~GPIOG_BRR),32bit复位寄存器w

  高16位保留,低16位

   [15~0]写0无效,写1对应GPIOx_ODR位置0 若GPIOx_BRR和GPIOx_BSRR同时设置,以GPIOx_BSRR为准。

 3. GPIO功能锁存函数

   GPIO_PinLockConfig(GPIOx, GPIO_Pin_y);//锁存选择端口配置寄存器的对应位

  端口锁存寄存器(GPIOA_LCKR~GPIOG_LCKR),32bit寄存器,高16位保留,低16可随时读出,1代表对应配置位被激活锁存,0代表可以被激活,激活是有固定的写入顺序的。锁存是不能乱用的,如果锁存了一个端口的功能寄存器,那么在下次系统复位前,端口的功能就不可更改,这在某些情况下是有利的,特别是在程序中如果重新定义某些GPIO口的功能时,在确定其中某一GPIO端口在整个系统运行中状态保持不变,锁存就避免误修改,但是如果锁存的GPIO在后续的代码段中有不同的功能,就会无法修改,产生错误。因此锁存和GPIO_StructInit, GPIO_DeInit,GPIO_AFIODeInit这些初始化函数一样,使用前要考虑清楚。

4.GPIO特殊功能函数

  函数GPIO_EventOutputConfig(GPIO_PortSourceGPIOx,GPIO_PinSourcey);事件输出。

  函数GPIO_EXTILineConfig(GPIO_PortSourceGPIOx, GPIO_PinSourcey); 外设端口作为中断线号输入

  这两个函数我就不多说了,在EXTI-NVIC中会有详细解释。

  函数GPIO_PinRemapConfig(u32GPIO_Remap, FunctionalState NewState);改变指定管脚的映射,很多复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变的。就是上面库函数。

函数GPIO_AFIODeInit(); 取消所有的复用功能。


推荐阅读

史海拾趣

Cooper Industries公司的发展小趣事

为了进一步拓展全球业务,Cooper Industries在2007年收购了韩国防爆电力设备制造商Hyundai Explosion-Proof Electric Co.。这一收购使公司能够更好地进入韩国市场,并充分利用韩国在造船业以及国内能源与石化基础设施方面的优势。通过这次收购,Cooper Industries不仅提升了在韩国市场的竞争力,也为其在全球防爆电力设备市场的地位打下了坚实基础。这一举措再次展现了Cooper Industries在全球化战略中的远见卓识和果断行动。

这五个故事只是Cooper Industries发展历程中的一部分,但它们足以展现出公司在电子行业中的卓越地位和不断创新的精神。通过全球扩张、收购整合、技术创新和市场拓展等方式,Cooper Industries不断壮大自身实力,为行业的发展做出了积极贡献。

Allied Wire & Cable Inc公司的发展小趣事

Allied公司成立于XXXX年,起初是一家小型电线电缆供应商。在创业初期,公司创始人凭借对电线电缆行业的深刻理解和丰富的行业经验,成功开发出了一系列质量上乘、性能稳定的电线电缆产品。通过不懈的努力和优质的客户服务,Allied公司逐渐在市场中树立起了良好的口碑,为后续的发展奠定了坚实的基础。

兵字(BingZi)公司的发展小趣事

随着公司规模的不断扩大和产品线的日益丰富,兵字公司开始注重品牌建设和市场拓展。公司注册了“BingZi兵字”商标,并通过一系列的市场推广活动,提升了品牌的知名度和美誉度。同时,兵字公司还积极开拓国内外市场,与多家知名企业建立了长期稳定的合作关系,实现了业务的快速增长。

C&K公司的发展小趣事

通过不断的努力和创新,C&K在90年代中期已经成为世界领先的开关制造商之一,也是业内最受信赖的品牌之一。这一成就的取得离不开公司对产品质量的严格把控和对技术创新的持续追求。同时,C&K还积极与全球各地的客户合作,根据他们的需求量身定制开关产品,赢得了广泛的赞誉。

ATOP_Technologies公司的发展小趣事

随着技术的不断进步,ATOP Technologies意识到要想在激烈的市场竞争中保持领先地位,必须不断进行技术创新和产品升级。因此,公司加大了在研发方面的投入,积极引进高端人才,加强与高校和研究机构的合作。经过多年的努力,ATOP Technologies成功开发出了一系列具有自主知识产权的工业自动化产品,并在市场上取得了良好的口碑。

Cretex Companies Inc公司的发展小趣事

随着环保意识的日益增强,Cretex积极响应国家绿色发展的号召,将绿色环保理念融入产品研发和生产过程中。他们采用环保材料和生产工艺,减少了对环境的污染。同时,公司还推出了一系列节能减排的电子产品,帮助客户降低能耗、减少碳排放。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实基础。

问答坊 | AI 解惑

汽车电子标准期待快速推进

技术的创新和进步使汽车从传统的机械产品逐渐呈现出高度的电 子化和智能化。不论是为改善和提高传统汽车电器性能而嵌入的多种 多样的电子装置,还是为满足安全、环保、舒适等要求而使用的各类 电子控制系统,汽车电子技术是汽车技术中发展极快的前 ...…

查看全部问答>

给做射频朋友们推荐款微型低功耗可过日本电波法认证的ASK发射模块

  工作电压:3V(2.4-3.6V) 工作电流:14mA   发射强度:10dBm   发射频率:315MHz、433MHz、390MHz 发射天线:18-25mm   工作温度:-20-- +85℃…

查看全部问答>

请问Altium Designer 6的library里面找不到intel的8031或者8051怎么办

请问Altium Designer 6的library里面找不到intel的8031或者8051怎么办,是去下载个元件库吗???能不能给个有效的链接,,谢谢了.…

查看全部问答>

请高手指教一下如何通过pwm实现DA的转化?最好有电路图

做毕业设计需要的,毕业设计的题目是基于stm32的语音播放,想要通过pwm实现DA的转换,但是不知道程序如何写,以及电路如何实现,希望高手给与帮助,谢谢!…

查看全部问答>

有用过MAX436这个滤波芯片,进来帮我解决一下问题

我用MAX436对信号进行处理 MAX436的资料看了,但实际上用的时候和理论上相反 想请教一下高手来帮助下 我是按照MAX.PDF文件里的图12那图连接方法,各个参数是与图13的那些参数一样 但出来的信号时衰减的啊 而且,我调节RL,信号的幅值在中心幅 ...…

查看全部问答>

wince 5 中的图标变为黑色的,有没有遇到过这个问题,怎么解决?

在wince 5中修改显示分辨率中,发现wince 5 中的图标变为黑色的,有没有遇到过这个问题,怎么解决? 谢谢!…

查看全部问答>

精密多圈电位器

求教:精密多圈电位器与DSP连接电路是怎么样的,怎么引出精密多圈电位器的电阻传递给DSP…

查看全部问答>

求msp430下载软件simple insidepro

如题。xdwll88@126.com.  谢谢!…

查看全部问答>

轻松玩转电源——易电源学习心得

本人在大学学习期间曾经学习过电源设计课程,但是相对于TI公司的“易电源”产品,在没有大量实践经验积累的基础上是很难设计出一款合格的电源的。TI公司所提供的该系列产品,从硬件到软件,使我们可以设计出符合电磁干扰、散热、大电流、高电压等要 ...…

查看全部问答>

芯片内部短路

前些天折腾电路时,发现stm32最小系统板上电源和地之间短路了!感叹之后,开始测查吧。令我十分意外而悲哀的是,两个小时没查出来!我还不至于垃圾到这个份上啊。后来,我终于发现是芯片内部的问题(99和100脚之间)。我把引脚悬起来,依然短路。那 ...…

查看全部问答>