STM32
直播中

那些年儿ing

11年用户 1263经验值
擅长:84784
私信 关注
[问答]

如何去使用STM32的端口复用呢

STM32的端口复用映射原理是什么?
如何去使用STM32的端口复用呢?

回帖(1)

陈丽

2021-11-1 10:46:12
  基本概念:
  在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配置为模拟通道,对于其他外设,只需要配置为复用功能。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分