端口的复用——基于STM32F767IGT6

30人阅读 评论(0) 收藏 举报
分类:

基本概念:

在STM32中有很多内置外设,这些内置外设的操作也是通过140根GPIO引脚的,如果一个GPIO引脚复用为内置外设的功能,那么此时就叫做GPIO的功能复用:

例:串口1的发送和接收引脚可选PA9和PA10复用,当我们不把这两个引脚用作GPIO时,而复用为串口1的收发引脚时,这时就叫做端口的杜复用;

STM32(M4内核以上)的端口复用映射原理

IO引脚通过复用器连接到外设或模块,复用器一次仅允许一个外设的复用功能(AF)连接到IO引脚,确保共用一个IO引脚的外设之间不会发生冲突;(一个IO引脚一次只能复用一个外设功能,那么多个IO可以同时复用一个功能吗?)
这里写图片描述
这里写图片描述
我们通过复用关系表可以看见,一个IO往往可能复用很多功能,当一个IO可能复用的功能外设都开启了,会不会造成干扰呢?对于STM32F1来说,可能会造成混乱,而F7仅连接到特定外设,不存在互相干扰的情况;
一个功能可以被多个IO复用,当一个IO复用了一个功能之后,其他可复用这个功能的IO还可作GPIO或复用其他功能使用;

功能复用相关的寄存器(AFRL和AFRH)

引脚复用功能选择通过AFRL和AFRH来控制,其中AFRL控制0~7这八个IO口,AFRH控制8~15这八个IO口,在MDK中,AFRL和AFRH被定义成了数组AFR[2]进行配置,其中AFR[0]代表AFRL,AFR[1]代表AFRH,AFR是一个unsigned int类型的数组,即AFRL/AFRH寄存器4bit表示一个IO,一个IO最多可能复用16种外设功能;

例1:将PA9和PA10复用成USART1_TX和USART1_RX功能

RCC->AHB1ENR|=1<<0;         //使能PORTA口时钟  
RCC->APB2ENR|=1<<4;         //使能串口1时钟
GPIO_Set(GPIOA,PIN9|PIN10,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_50M,GPIO_PUPD_PU);              //PA9,PA10,复用功能,上拉输出
GPIO_AF_Set(GPIOA,9,7);     //PA9,AF7
GPIO_AF_Set(GPIOA,10,7);    //PA10,AF7 
//GPIOx:GPIOA~GPIOI.       端口
//BITx:0~15                代表IO引脚编号.
//AFx:0~15                 代表AF0~AF15.功能编号
void GPIO_AF_Set(GPIO_TypeDef* GPIOx,u8 BITx,u8 AFx)
{  
    GPIOx->AFR[BITx>>3]&=~(0X0F<<((BITx&0X07)*4));
    GPIOx->AFR[BITx>>3]|=(u32)AFx<<((BITx&0X07)*4);
}
/**************************************************************
 *1、BITx>>3  在前面我们说了,AFRL和AFRH分别控制8个IO口,这样AFR[2]
 *            刚好可以表示一个端口,二进制3bit可以表示八种状态,即如
 *            果超过7则bit4肯定为1,这样就可以用一个函数直接判断使用
 *            AFR[0]还是AFR[1]了;
 * 2、(BITx&0X07)*4  一个IO用4个bit表示,故乘4;BITx&0X07 是为了防
 *                   止误操作,一个AFR只能设置8个IO,故3个bit就可以
 *                   表示,超过3bit的部分自动清零;
 **************************************************************
 * 总结:
 *     1、想要使用某个外设,先使能他的时钟(对于复用来说,要使能端口+
 * 功能外设);
 *     2、时钟使能完毕后,要对其进行初始化操作,进行相关配置;
 *     3、注意:设置寄存器,先清零,再设置;
 **************************************************************/

常用复用功能引脚总结:

AF0:MCO/SWD/SWCLK/RTC;
AF1:TIM1/TIM2;
AF2:TIM3~5;
AF3:TIM8~11;
AF4:I2C1~I2C4;
AF5:SPI1~SPI6;
AF6:SPI3/SAI1;
AF7:SPI2/3/USART1~3/UART5/SPDIFRX;
AF8:USART4~8/SPDIFRX/SAI2;
AF9:CAN1~2/TIM12~14/LCD/QSPI;
AF10:USB_OTG/USB_HS/SAI2/QSPI;
AF11:ETH;
AF12:FMC/SDMMC/OTG/HS;
AF13:DCIM;
AF14:LCD;
AF15:EVENTOUT;

AF0为系统功能,有三种需要特别注意:
1. JTAG/SWD:在器件复位后,会将这些引脚制定为专用引脚,可供片上调试模块使用(不受GPIO控制器控制);
2. RTC_REFIN:此引脚应配置为输入浮空模式;
3. MCO1/MCO2:这些引脚必须配置为复用功能模式;

对于ADC和DAC,在GPIOx_MODER寄存器中将所需IO配置为模拟通道,对于其他外设,只需要配置为复用功能;

查看评论

stm32f767igt6引脚功能规划

  • 2017年10月11日 21:49
  • 16KB
  • 下载

端口复用突破防火墙(图)

端口复用突破防火墙(图) 时间:2009-08-03 10:50 来源:bitsCN.com 字体:[大 中 小] 评论:0  如何在溢出后得到安全的、隐蔽的Shell是大家一直都在讨论的问题,因为现...
  • liujiayu2
  • liujiayu2
  • 2014-10-25 10:55:12
  • 1331

(VC代码) 端口复用的思路与实现

端口复用在黑客后门程序中十分重要,当你侵入一台服务器时,这台服务器如果安装了防火墙,则使用一般的后门程序时,后门程序使用的是防火墙禁止的端口,则可以通过复用防火墙允许的端口来与后门程序进行数据交流,比...
  • minaiyi
  • minaiyi
  • 2014-05-08 18:54:28
  • 1639

C++端口复用代码

主要用到的函数: int setsockopt( SOCKET s, int level, int optname, const char FAR *optval, int optlen ); s:标...
  • liujiayu2
  • liujiayu2
  • 2014-10-25 10:55:51
  • 1379

WebServer端口复用后门

0x00 有朋友问到了我一个关于“无端口可用”的问题。说在如下图所示的内网环境中,firewall只允许Web Server的80端口建立网络连接,并且Web Server上的80端口已经被II...
  • weicool8886
  • weicool8886
  • 2016-03-11 17:16:22
  • 1128

SOCKET端口复用

在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是:  s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); saddr.sin_family...
  • menghaibin2009
  • menghaibin2009
  • 2013-10-09 16:47:13
  • 1363

socket端口复用

当我们使用socket通信时,有时需要关闭服务器,再重新开启 需要绑定的是同一个端口号 那么问题来了:当迅速关闭再重新创建socket之后bind会出错 根据网上资料,socket关闭后释放端口...
  • fzs333
  • fzs333
  • 2015-03-04 11:13:20
  • 934

[摘抄-Socket-学习中]TCP&UDP通信中socket端口的复用

网络编程socket深入探索中,前期已经了解过基础的网络编程,但太过浅显,只知道基础的几次握手和数据传输而已,但其中的明细和规则不是特别了解,故进一步探索,继续记录归档。...
  • junk1357
  • junk1357
  • 2017-04-27 14:52:44
  • 453

Linux网络编程——端口复用(多个套接字绑定同一个端口)

在《绑定( bind )端口需要注意的问题》提到:一个网络应用程序只能绑定一个端口( 一个套接字只能绑定一个端口 )。 实际上,默认的情况下,如果一个网络应用程序的一个套接字 绑定了一个端口( 占用了...
  • tennysonsky
  • tennysonsky
  • 2015-03-04 18:07:02
  • 14386

Linux网络编程:端口复用

  • 2015年03月04日 18:11
  • 3KB
  • 下载
    个人资料
    持之以恒
    等级:
    访问量: 1万+
    积分: 314
    排名: 25万+
    文章分类