历史上的今天
返回首页

历史上的今天

今天是:2024年08月24日(星期六)

2019年08月24日 | STM32F103的GPIO配置方式

2019-08-24 来源:eefocus

一、GPIO的配置过程


(1)、开启外设时钟


(2)、初始化GPIO


配置成输出模式程序


void GPIO_Config(void)


{


GPIO_InitTypeDef GPIO_InitStruce;//结构体属于变量,变量的声明必须位于函数可执行的语句之前


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//开启GPIOB的时钟


GPIO_InitStruce.GPIO_Mode=GPIO_Mode_Out_PP;


GPIO_InitStruce.GPIO_Pin=GPIO_Pin_5;


GPIO_InitStruce.GPIO_Speed= GPIO_Speed_50MHz;//配置为输入模式时输出驱动电路与端口是断开,所以输出速度配置无意义。


GPIO_Init(GPIOB,&GPIO_InitStruce);


}


说明:


1.1在STM32中选用IO模式 


(1)浮空输入_IN_FLOATING ——浮空输入,可以做KEY识别,RX1 


(2)带上拉输入_IPU——IO内部上拉电阻输入 


(3)带下拉输入_IPD—— IO内部下拉电阻输入 


(4) 模拟输入_AIN ——应用ADC模拟输入,或者低功耗下省电 


(5)开漏输出_OUT_OD ——IO输出0接GND,IO输出1,悬空,需要外接上拉电阻,才能实现输出高电平。当输出为1时,IO口的状态由上拉电阻拉高电平,但由于是开漏输出模式,这样IO口也就可以由外部电路改变为低电平或不变。可以读IO输入电平变化,实现C51的IO双向功能 


(6)推挽输出_OUT_PP ——IO输出0-接GND, IO输出1 -接VCC,读输入值是未知的 


(7)复用功能的推挽输出_AF_PP ——片内外设功能(I2C的SCL,SDA) 


(8)复用功能的开漏输出_AF_OD——片内外设功能(TX1,MOSI,MISO.SCK.SS)


1.2输出速度


I/O口的输出模式下,有3种输出速度可选(2MHz、10MHz和50MHz),这个速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与程序有关(芯片内部在I/O口 的输出部分安排了多个响应速度不同的输出驱动电路,用户可以根据自己的需要选择合适的驱动电路)。通过选择速度来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。高频的驱动电路,噪声也高,当不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。当然如果要输出较高频率的信号,但却选用了较低频率的驱动模块,很可能会得到失真的输出信号。关键是: GPIO的引脚速度跟应用相匹配,速度配置越高,噪声越大,功耗越大。


带宽速度高的驱动器耗电大、噪声也大,带宽低的驱动器耗电小、噪声也小。使用合适的驱动器可以降低功耗和噪声。


GPIO的引脚速度跟应用匹配(推荐10倍以上)。比如:


1.1.1 对于串口,假如最大波特率只需115.2k,那么用2M的GPIO的引脚速度就够了,既省电也噪声小。


1.1.2 对于I2C接口,假如使用400k波特率,若想把余量留大些,那么用2M的GPIO的引脚速度或许不够,这时可以选用10M的GPIO引脚速度。


1.1.3 对于SPI接口,假如使用18M或9M波特率,用10M的GPIO的引脚速度显然不够了,需要选用50M的GPIO的引脚速度。


1.2 GPIO口设为输入时,输出驱动电路与端口是断开,所以输出速度配置无意义。


1.3 在复位期间和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式。


1.4 所有端口都有外部中断能力。为了使用外部中断线,端口必须配置成输入模式。


1.5 GPIO口的配置具有上锁功能,当配置好GPIO口后,可以通过程序锁住配置组合,直到下次芯片复位才能解锁。


二、GPIO的相关函数


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读GPIO某一位的输入


uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);//读GPIO的输入


uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读GPIO某一位的输出


uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//读GPIO的输出


void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GPIO的某个位置位


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//将GPIO的某个位复位


void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//写GPIO的某个位


void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);//写GPIO


void GPIO_PinRemapConfig(u32 GPIO_Remap, FunctionalState NewState)//GPIO管脚重映射


void GPIO_EXTILineConfig(u8 GPIO_PortSource, u8 GPIO_PinSource)//GPIO外部中断线配置


三、其他内容


位取反:GPIO_WriteBit(GPIOE,GPIO_Pin_5,(BitAction)((1-GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_5))));


推荐阅读

史海拾趣

BusBoard Prototype Systems公司的发展小趣事

在发展过程中,BusBoard Prototype Systems深知单打独斗难以取得长远的发展。因此,公司积极寻求与上下游企业的合作,共同推动电子行业的发展。通过与芯片制造商、软件开发商等建立紧密的合作伙伴关系,BusBoard不仅能够获得更优质的资源支持,还能够为客户提供更加全面的解决方案。

CAROLCABLE公司的发展小趣事

CAROLCABLE公司的创立,标志着电子线缆行业迎来了一位新的竞争者。在电子科技飞速发展的时代背景下,创始人凭借对线缆技术的深刻理解和市场需求的敏锐洞察,决定创立CAROLCABLE公司。公司初期,面临着资金短缺、技术瓶颈和市场认知度低等多重挑战。然而,创始人凭借着坚定的信念和不懈的努力,带领团队克服了一个又一个困难。他们积极研发新产品,优化生产工艺,提高产品质量,逐渐在市场上站稳了脚跟。

随着公司业务的不断拓展,CAROLCABLE开始与一些知名的电子企业建立合作关系,为其提供高质量的线缆产品。这些合作不仅为公司带来了稳定的订单和收入,也进一步提升了CAROLCABLE在行业内的知名度和影响力。

Coors Components Inc公司的发展小趣事

在某个关键项目的研发过程中,Coors Components Inc公司遇到了前所未有的技术难题。然而,公司的研发团队并没有因此而气馁,他们通过加强内部沟通、分享经验以及相互支持,最终成功攻克了难关。这一经历不仅增强了团队的凝聚力,也为公司培养了一批忠诚且能力出众的员工。

Cofan Usa Inc公司的发展小趣事

在追求经济效益的同时,Cofan Usa Inc公司也注重可持续发展和社会责任。公司积极推广环保理念,采用环保材料和节能技术,减少生产过程中的环境污染。同时,公司还积极参与社会公益事业,为社会发展和环境保护贡献自己的力量。

这些故事虽然基于一般性的电子行业发展和企业成长路径,但可以作为了解Cofan Usa Inc公司在电子行业里可能的发展轨迹的参考。如果需要更具体和详细的故事,建议查阅该公司的官方资料、行业报告或相关新闻报道。

DS-IMP公司的发展小趣事

DS-IMP公司非常重视人才培养和团队建设。公司建立了完善的人才培养机制,为员工提供丰富的培训和学习机会。同时,公司还注重团队建设和文化建设,通过组织各种团队活动和文化建设活动,增强员工的凝聚力和归属感。这些努力使得公司拥有一支高素质、专业化的团队,为公司的发展提供了坚实的人才保障。

Discera公司的发展小趣事

Discera公司的产品在性能和稳定性上表现出色,很快就引起了美国军方的关注。经过严格的测试和评估,Discera的CMOS MEMS谐振器成功通过了美国军方的质量可靠性测试,并获得了军方的认证。这一成就不仅证明了Discera产品的卓越性能,也为公司进一步拓展军用市场打下了坚实的基础。

问答坊 | AI 解惑

深入理解低功耗无线传感器网络标准

  蓝牙、Wi-Fi和ZigBee在无线通信领域都有一席之地。但基于不同原因,上述几种技术都不太适合无线传感器网络应用。用于传感和控制应用的无线产品和技术正迅速变为现实。无线技术的大规模普及只是时间早晚的问题,但标准化组织和技术供应商在解决 ...…

查看全部问答>

5分钟学会使用CPLD.doc

5分钟学会使用CPLD.doc…

查看全部问答>

Wince系统应用程序下拉列表框

请问在WINCE中,怎么用WIN API弄个下拉列表框 求代码:…

查看全部问答>

开发板启动后就一直停在触摸屏校准程序

我使用的是蓝海微芯的板子,LJD-2410-II开发板,bsp是重新烧入的,启动后就一直停在触摸屏校准程序,点十字光标一点反应都没有。请问是怎么回事?大家有遇到这种情况吗?是不是触摸屏坏了,照理说触摸屏没这样脆弱吧,…

查看全部问答>

windows CE中20ms内被动接收数据

我现在做的是一个windows CE下传感器的项目,其中有一个过程,是给传感器发一个读指令(16进制),然后传感器会自动返回一组数据(16进制);传感器的数据刷新是50次每秒,所以在20ms内必须主动接受数据并进行处理。这里的主动是细节上的,文章题目 ...…

查看全部问答>

EVC位图旋转

谁做过位图旋转啊?我的怎么老不实现啊?也不知道代码哪里有问题。 谁有方法啊?源代码更好啊。 我已经知道bmp图片旋转应该问题不大啊?         CClientDC  hDC(this);           ...…

查看全部问答>

加速度传感器MMA7260的proteus仿真

想用加速度传感器MMA7260做一个跌倒的检测装置,proteus元件库中找不到MMA7260元件,哪位高手帮忙解决一下,小弟谢过~~~我的QQ:501292878~~…

查看全部问答>

为什么频率越高 功耗越大?

瞬时功耗 p = v *I tav; V越小 P也小 所以低功耗处理器采用低压方式 ,I tav为单位时间的平均电流,与上升时间 和下降时间 重复频率有关 所以频率 越高功耗越大 ; 动态功耗=瞬时功耗+ 电容冲放电消耗的功耗 ;充放电功耗也与重复频率有关 所以 ...…

查看全部问答>

【TI文献】智能能源规范 (Smart Energy Profile) 解决方案

智能能源规范 (SEP) 是一种公共应用规范,在诸如计量和家庭区域网等智能电网应用中使用。Smart Energy Profile支持的设备类型包括能源服务接口 (ESI)、计量设备、家庭能源显示器 (IHD)、可编程通信型温控器 (PCT)、负载控制设备等等。德州仪器提供 ...…

查看全部问答>

如何用bdata定义一个变量使led1闪烁

#include<reg52.h>#define uint unsigned intsbit led1=P1^0;void delay(uint z){ uint x,y; for(x=z;x>0;x--)   for(y=110;y>0;y--);}void main(){  while(1) {  led1=0;  d ...…

查看全部问答>