历史上的今天
返回首页

历史上的今天

今天是:2025年02月12日(星期三)

正在发生

2019年02月12日 | 【stm32f407】IO引脚复用和映射

2019-02-12 来源:eefocus

一.  什么叫管脚复用


STM32F4有很多的内置外设,这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。


STM32F4系列微控制器IO引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的IO口。这样可以确保共用同一个IO引脚的外设之间不会发生冲突。每个IO引脚都有一个复用器,该复用器采用16路复用功能输入(AF0到AF15),可通过GPIOx_AFRL(针对引脚0-7)和GPIOx_AFRH(针对引脚8-15)寄存器对这些输入进行配置,每四位控制一路复用:


1)完成复位后,所有IO都会连接到系统的复用功能0(AF0)。


2)外设的复用功能映射到AF1到AF13。


3)Cortex-M4EVENTOUT映射到AF15。


如图:



上图是针对引脚0-7,对 于引脚8-15,控制寄存器为GPIOx_AFRH。从图中可以看出。当需要使用复用功能的时候,我们配置相应的寄存器GPIOx_AFRL或者GPIOx_AFRH,让对应引脚通过复用器连接到对应的复用功能外设。这里我们列出GPIOx_AFRL寄存器的描述,


GPIOx_AFRH的作用跟GPIOx_AFRL类似,只不过GPIOx_AFRH控制的是一组IO口的高八位,GPIOx_AFRL控制的是一组IO口的低八位


寄存器分别如下:



二.  USART实例讲解

以usart2的TX,RX为例



USART2的TX,RX对应的PIN脚分别为:PD5,PD6


1) 首先,我们要使用IO复用功能外设,必须先打开对应的IO时钟和复用功能外设时钟。


/*使能GPIOD时钟*/

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE);

USART2在APB1总线上



/*使能USART2时钟*/

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);

这里需要说明一下,官方库提供了五个打开GPIO和外设时钟的函数分别为:


void  RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph,FunctionalState NewState);

void  RCC_AHB2PeriphClockCmd(uint32_tRCC_AHB2Periph, FunctionalState NewState);

void  RCC_AHB3PeriphClockCmd(uint32_tRCC_AHB3Periph, FunctionalState NewState);

void   RCC_APB1PeriphClockCmd(uint32_tRCC_APB1Periph, FunctionalState NewState);

void  RCC_APB2PeriphClockCmd(uint32_tRCC_APB2Periph, FunctionalState NewState);

这五个函数分别用来打开相应的总线下GPIO和外设时钟。比如我们的串口2是挂载在APB1总线之下,所以我们调用对应的APB1总线下外设时钟使能函数RCC_APB1PeriphClockCmd来使能串口2时钟。对于其他外设我们调用相应的函数即可。


2) 其次,我们在GIPOx_MODER寄存器中将所需IO(对于串口2是PD5,PD6)配置为复用功能(ADC和DAC设置为模拟通道)。


3)再次,我们还需要对IO口的其他参数,例如类型,上拉/下拉以及输出速度。


上面两步,在我们库函数中是通过GPIO_Init函数来实现的,参考代码如下:



/*GPIOD5与GPIOD6初始化*/

GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5 | GPIO_Pin_6; 

GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//复用功能

GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//速度50MHz

GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽复用输出

GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉

GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化PD5,PD6

      4)最后,我们配置GPIOx_AFRL或者GPIOx_AFRH寄存器,将IO连接到所需的AFx。这些步骤对于我们使用库函数来操作的话,是调用的


      


GPIO_PinAFConfig函数来实现的。具体操作代码如下:

/*PD5连接AF7,复用为USART2_TX */

GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_USART2);

/* PD6连接AF7,复用为USART2_RX*/

GPIO_PinAFConfig(GPIOD,GPIO_PinSource6,GPIO_AF_USART2);


对于函数GPIO_PinAFConfig函数,入口第一个第二个参数很好理解,可以确定是哪个IO,


对于第三个参数,实际上我们确定了这个IO到底是复用为哪种功能之后,这个参数也很好选择,因为可选的参数在stm32f4xx_gpio.h列出来非常详细,如下


推荐阅读

史海拾趣

Frequency Electronics Inc公司的发展小趣事

高频电子的业务范围广泛且多元化,主要包括FEI-NY、Gillam-FEI和FEI-Zyfer三个部门。FEI-NY部门主要负责纽约总部设施和子公司FEI-Asia与FEI-Elcom的运营;Gillam-FEI部门则负责比利时与法国的业务,并专注于电缆网络同步产品的设计、研发和生产;FEI-Zyfer部门则主要经营公司加州业务,并设计生产附带GPS技术的产品。这种多元化业务布局不仅降低了公司的经营风险,还实现了各业务之间的战略协同和资源共享。

DLP Design公司的发展小趣事

DLP科技,一家以DLP技术为核心的创新设计公司,在电子行业的快速发展中崭露头角。公司创始人李博士,凭借对DLP技术的深入研究和独到见解,带领团队开发出了一系列具有革命性的产品。从最初的DLP投影机到后来的无屏电视,DLP科技不断突破技术瓶颈,引领市场潮流。通过持续的创新和研发,DLP科技在电子行业树立了技术领先的地位。

Adaptive Networks Inc公司的发展小趣事

DLP创新设计公司,一家专注于DLP技术应用的企业,通过精准的市场定位和灵活的市场策略,成功在电子行业中脱颖而出。公司深入了解消费者需求,针对不同市场推出差异化产品。同时,DLP创新积极寻求合作伙伴,通过渠道拓展和品牌建设,逐渐提高了市场占有率。其独特的商业模式和敏锐的市场洞察力,使DLP创新在激烈的市场竞争中保持了稳健的发展。

Eurotechnique公司的发展小趣事

在XXXX年,Eurotechnique迎来了一次重要的技术突破。公司成功研发出了一种新型的微控制器,具有更高的性能和更低的能耗。这一技术的突破不仅为公司带来了大量的订单,也进一步巩固了公司在微控制器领域的领先地位。随着技术的不断进步,Eurotechnique开始逐步扩展产品线,将业务范围拓展到数字信号处理、无线通信等多个领域。

Coil-Q Corporation公司的发展小趣事

随着全球环保意识的提高,Coil-Q积极响应绿色发展的号召,将环保理念融入公司的生产和经营中。公司投入大量资金研发环保材料和技术,优化生产工艺,降低能耗和排放。同时,Coil-Q还积极参与环保公益活动,推动行业的绿色转型。

Elcoma公司的发展小趣事

随着公司业务的不断发展,Elcoma意识到要进一步拓展市场,必须与国际同行建立合作关系。他们积极寻求与全球知名电子企业的合作机会,通过技术交流和合作研发,不断提升自身的技术水平和市场竞争力。同时,Elcoma还积极参与国际电子展会和论坛,展示公司的最新技术和产品,吸引了众多国际客户的关注。这些国际合作不仅为Elcoma带来了更多的商业机会,也进一步提升了公司的国际影响力。

问答坊 | AI 解惑

采用IGBT的正弦波中频逆变电源

  摘要:介绍了用IGBT作功率器件的中频逆变电源,对电路的工作原理进行了详尽的分析。     关键词:绝缘栅双极晶体管;中频逆变电源;驱动;正弦波脉宽调制…

查看全部问答>

电力行业的发展与商机(电气安装公司寻求合作)

在网站上逛了好几天,感叹大家智慧的同时,我发现论坛上对电力市场的关注却很少。电力市场是个大的概念,所涉及的面太广,电力体制改革的深化,到底能给我们普通人带来什么样的商机?本人通过对电力产业链中配电电气设备安装这个环节进行分析,把这几年的 ...…

查看全部问答>

为什么ccs调试时单步运功会调到汇编程序?

为什么ccs调试时单步运功会调到汇编程序?源代码都是用c写的,编译通过并装载后开始运行,为什么有的程序只能在汇编中单步运行,却不能在c中单步运行,连那个单步运行的按钮都是灰色的…

查看全部问答>

关于交流电量的测量的问题

各位好,我现在刚接触电力测量方面的东西,很多都要一点点学习,还需要各位大侠多指点,呵呵~     现在我做的是使用微型互感器测量电压和电流,互感器二次侧的电流是交流量,通过取样电阻来将电流转换为电压送至ADC。但是我使用的单片 ...…

查看全部问答>

彻底摆脱nxp p89lpc936单片机isp烦恼

用过nxp lpc900系列单片机的同志都知道,其出厂自带的isp程序极其难用,一旦烧写失败,即使神仙下凡,想再进isp几乎都不大可能。按其所说的三种方法,不论是三个脉冲还是帧间隔的方法都无济于事。我已经被它折磨了不止一次了,于是打算要找到一个方 ...…

查看全部问答>

基于凌阳单片机的语音控制小车

文摘  本文主要介绍了凌阳单片机SPCE061A的性能、硬件结构及其各个部分的功能和它的应用领域。针对凌阳公司的语音小车,进行了改进,自行设计了控制电路,详细介绍了小车外围电路各部分的功能。我们根据自己录制的语音命令通过程序来远程 ...…

查看全部问答>

ListCtrl如何禁用滚动条并且支持滚动,或者隐藏滚动条不让重绘后出现滚动条

禁用滚动条我知道是LVS_NOSCROLL 我禁用了后就没有滚动的功能了。。 我现在要做的是不显示滚动条,并且要有滚动的功能。。望高手能帮忙。。 只有20分了。有高手回答的好我再追加分…

查看全部问答>

485通讯最多能有多少站?

最近碰上一个叫“倍捻机”的纺机,总共有96或154锭,每一锭都需要计算产量在人机上显示,请问这样的话通过485通讯怎样进行处理?我看过直捻机上是通过传感器给一个电子板信号,然后电子板通过485传给PLC的一个通讯模块,最后传给PLC进行处理。请问 ...…

查看全部问答>

看LaunchPad大学堂作品之有感

看LaunchPad大学堂作品之有感早就看到过关于Msp430的介绍和赞美之词,一直没机会接触,也没开发工具呀,要银子呀。当初看到LaunchPad,这么价廉物美,立刻毫不犹豫地决定要买,好在论坛我好像很早就注册过了,立刻在淘宝下了订单。又看到大学堂还有 ...…

查看全部问答>

哪里有CCS5.3的下载?申请下载没回复呀

哪里有最新的CCS5.3的下载?申请下载没回复呀…

查看全部问答>