历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2020年10月28日 | STM32F10x芯片GPIO/AFIO端口配置总结

2020-10-28 来源:eefocus

1、介绍

STM32F10x芯片的GPIO/AFIO配置主要包括以下几方面知识:在时钟控制模块中配置好相应总线时钟,并在总线上使能对应的GPIO口(AFIO口,需要的话)时钟后:根据需求配置相应GPIO端口为对应的输入/输出模式,按需求更改/读取端口的数据;端口功能重映射;若用外部中断,则将中断线与对应引脚链接起来。


STM32F10x芯片的每个GPIO端口都有7个相关的寄存器:2个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。每个I/O端口都可以设置成如下模式:

输入浮空 :GPIO_Mode_IN_FLOATING

输入上拉 :GPIO_Mode_IPU

输入下拉 :GPIO_Mode_IPD

模拟输入 :GPIO_Mode_AIN

开漏输出 :GPIO_Mode_Out_OD

推免式输出 :GPIO_Mode_Out_PP

推免式复用功能 :GPIO_Mode_AF_PP

开漏复用功能 :GPIO_Mode_AF_OD


2、GPIO寄存器描述

端口配置低寄存器(GPIOx_CRL)(x=A…E)

端口配置高寄存器(GPIOx_CRH)(x=A…E)

端口输入数据寄存器(GPIOx_IDR)(x=A…E)

端口输出数据寄存器(GPIOx_ODR)(x=A…E)

端口位设置/清除寄存器(GPIOx_BSRR)(x=A…E)

端口位清除寄存器(GPIOx_BRR)(x=A…E)

端口配置锁定寄存器(GPIOx_LCKR)(x=A…E)

2、AFIO寄存器描述

事件控制寄存器(AFIO_EVCR):控制内部时间输出到相应引脚

复用重映射和调试I/O配置寄存器(AFIO_MAPR)

外部中断配置寄存器(AFIO_EXTICRx)(x=1…4):设置端口为中断线(将端口与中端线连接)


注意:对寄存器AFIO_EVCR、AFIO_MAPR、AFIO_EXTICRX进行读写操作前,应当首先打开AFIO的时钟。

3、GPIO操作流程

首先定义GPIO_InitTypeDef类型变量;

然后调用RCC_APB2PeriphClockCmd()函数使能相应的GPIOx端口(所有GPIO端口都挂载到APB2总线上的)时钟。注意使能GPIOx端口时钟的函数必须在GPIO端口配置函数之前调用,否则GPIO端口会初始化不成功:;

调用GPIO_DeInit()初始化要使用的GPIOx端口对应寄存器为默认值;

调用GPIO_StructInit()函数初始化前面定义的GPIO_InitTypeDef类型变量到缺省值;

按需求初始化GPIO_InitTypeDef类型变量,然后调用GPIO_Init()函数实现初始化;

然后就可以对相应的端口进行操作了:读/写,或配置为复用功能(相应函数查看固件库)。

注意:

1、系统复位和刚复位后,复用功能未开启,I/O端口被配置成浮空输入模式(CNFx[1:0]=01b,MODEx[1:0]=00b)。复位后,JTAG引脚被置于输入上拉或下拉模式:

PA15:JTDI置于上拉模式;

PA14:JTCK置于下拉模式;

PA13:JTMS置于上拉模式;

PB4:JNTRST置于上拉模式;


因此要使用JTAG调试接口作为通用GPIO口使用,则必须屏蔽JTAG复用功能。具体实现为先调用RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE)使能AFIO时钟,然后调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_XXXX,ENABLE)关闭JTAG的调试复用功能;

2、当把端口配置成复用输出功能时,则引脚和输出寄存器断开,并和片上外设的输出信号连接;但如果没有激活对应外设,则其输出将不确定;

3、当使用外部中断或事件事,首先按照上面几步配置GPIO端口(输入),然后调用函数:GPIO_EXTILineConfig()将引脚与对应的中断线链接起来,然后在配置NVIC使能对应的中断通道,最后编写中断处理函数。


4、GPIO操作例子

例子1:

u16 Val = 1;

GPIO_InitTypeDef GPIO_InitStructure;

RCC_Configuration();

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);

GPIO_Write(GPIOB,0xffff);

while(1)

{

    GPIO_Write(GPIOB, ~Val);

    Delay(0x2FFFFF);

    if(Val == 0x8000) Val = 1;

    else Val<<=1;

}


推荐阅读

史海拾趣

Alpha Semiconductor公司的发展小趣事

经过多年的发展,Alpha Semiconductor已经成为一家高性能标准、半标准模拟和混合信号IC制造商。公司在这一领域的制造实力得到了业界的广泛认可。Alpha Semiconductor的产品广泛应用于通信、计算机、消费电子等领域,为电子行业的发展做出了重要贡献。

CyOptics Inc公司的发展小趣事

随着Avago的进一步发展和演变,CyOptics作为其子品牌也迎来了新的发展机遇。如今,Avago已经演变为Broadcom公司,而CyOptics则继续以其在光学领域的专业技术和丰富经验为Broadcom的产品线增添光彩。展望未来,CyOptics将继续秉承其技术领先和创新驱动的理念,为全球客户提供更加优质的光学产品和服务。

爱特姆(ATOM)公司的发展小趣事

在快速发展的同时,爱特姆也积极履行企业社会责任。公司始终坚持绿色生产、环保经营的理念,通过采用环保材料和节能技术,降低生产过程中的能耗和排放。此外,爱特姆还积极参与社会公益事业,为社会的可持续发展贡献自己的力量。

这五个故事从不同角度展现了爱特姆(ATOM)在电子行业发展的历程和成就。通过持续创新、市场拓展、人才引进和社会责任等方面的努力,爱特姆逐渐成长为一家具有全球影响力的电子企业。

CalAmp公司的发展小趣事

在某年第一季度,CalAmp公司发布了其财报数据。根据财报,该季度公司实现营收7089.1万美元,虽然比市场预期的7566万美元略低6.30%,但仍然展现了稳健的增长态势。同时,公司的每股收益为-0.11美元,低于预期的0.04美元,这可能与公司在研发和市场拓展方面的持续投入有关。尽管如此,CalAmp公司在无线通信解决方案应用领域的广泛布局和深厚的客户基础,使得其整体业绩依然保持稳健。

Esterline Technologies Corporation公司的发展小趣事

随着物联网技术的快速发展,车队管理成为了一个重要的应用领域。CalAmp公司凭借其深厚的技术积累和市场洞察力,成功推出了一款车队管理新解决方案。该方案通过直观的用户界面(UI)设计,为企业、政府和建筑机构提供了更为便捷、高效的车队管理工具。用户可以通过该界面轻松获取关键业务数据,如资产位置、驾驶行为和车辆状态等,从而加快智能决策,提高车队运营效率,降低成本并增强安全性。这一创新解决方案的推出,进一步巩固了CalAmp在车队管理领域的领先地位。

登丰微(GSTEK)公司的发展小趣事

歌普电子不仅注重产品的品质和技术创新,还非常重视客户服务。公司始终秉承“用心服务”的理念,为客户提供全方位的售前、售中和售后服务。无论是产品咨询、技术支持还是售后保障,歌普都能迅速响应并满足客户的需求。这种高效、专业的服务赢得了客户的高度评价和信赖,也为公司的持续发展奠定了坚实的基础。

问答坊 | AI 解惑

技术论坛规矩,请大家遵守

1、在自己得到了别人的帮助以后,一定在最后总结一下,请不要一声不吭的走人。 总结的内容包括:1、问题到底出在哪里。2、通过第几楼的方法解决的。 这种总结,对其他人很有用,通过看总结他们可以知道第几楼的方法是对的。 在自己的求助帖最后 ...…

查看全部问答>

反激式开关电源:我的RCD吸收电路的设计

对于一位开关电源工程师来说,在一对或多对相互对立的条件面前做出选择,那是常有的事。而我们今天讨论的这个话题就是一对相互对立的条件。(即要限制主MOS管最大反峰,又要RCD吸收回路功耗最小) 在讨论前我们先做几个假设, ① 开关电源的工作 ...…

查看全部问答>

一本关于光耦的书

一本关于光耦的书…

查看全部问答>

wince 5.0 sdk 支持vs2005

pb 5.0 中自带的.net compact framework是1.0的。vs2005用的是2.0的。 因此我想生成印象时将2.0的.net framework包含进去。 于是安装了WinCEPB50-071231-Product-Update-Rollup-Armv4I.msi这个补丁。 在**catalog items中的Applications and Ser ...…

查看全部问答>

单片机开发

请各位高手建议下:本人刚学单片机,希望做一个小项目,拿去找工作,成本在150元以下的…

查看全部问答>

我想在日历控件上(MFC的DateTimePicker控件)上弹出TAH(上下文菜单,类似pc上的右键弹出菜单),请问该如何实现,能给个例子吗?

网上的例子都千篇一律的出自codeproject上一位葡萄牙工程师的论文,看了几遍都没看懂,里面很多函数参数不知从何而来.不知大哥能否给小弟指导一下?感激不尽…

查看全部问答>

51单片机寄存器详解

网上搜来的,不知道论坛里有没有!貌似没见过。…

查看全部问答>

cosmic对Heap的处理效率怎么样啊?(malloc/free)

最近项目中打算使用malloc这个函数(IC:STM8A)有点担心编译器对Heap操作的效率问题 有哪位朋友知道cosmic对Heap处理效率怎么样啊? PS:本人分数很少,望谅解!…

查看全部问答>

PCB和电磁兼容设计

PCB和电磁兼容设计 比较基础的一本书,对PCB的EMC理解有帮助,希望大家仔细看。…

查看全部问答>

SPI read data via DMA fail?

各位高手大家好~有個SPI DMA的問題請大家。小弟使用開發平台為STM32F103ZE。目前若不用DMA的SPI是正常可以使用的。但目前SPI傳的速度不夠快,若照SPI 6Mbps傳送4kB data應該約花5.3 ms,但是目前我從波形上量到的時間約是12~13ms, 因為我的應用上需 ...…

查看全部问答>