IO引脚复用器和映射原理与配置
-
什么是端口复用,STM32引脚怎么复用?
STM32有很多的内置外设(把RTC,ADC,看门狗等外设都集中在芯片里面了),这些外设的外部引脚都是与GPIO复用的。也就是说,一个GPIO如果可以复用为内置外设的功能引脚,那么当这个GPIO作为内置外设使用的时候,就叫做复用。
例如串口1的发送接收引脚是PA9,PA10,当我们把PA9,PA10不用作GPIO,而用做复用功能串口1的发送接收引脚的时候,叫端口复用。
-
STM32(M4内核以上)的端口复用映射原理
STM32系列微控制器IO引脚通过一个复用器连接到内置外设或模块。该复用器一次只允许一个外设的复用功能(AF)连接到对应的IO口。这样可以确保共用同一个1O引脚的外设之间不会发生冲突。
每个I0引脚都有一个复用器,该复用器采用16路复用功能输入(AFO到AF15),可通过GPIOx_AFRL(针对引脚0-7)和GPIOxAFRH(针对引脚8-15)寄存器对这些输入进行配置,每四位控制一路复用。
比如我们要配置PA9,我们把它连接到AF7。相应寄存器位的配置如下:
AFRH9 |
|||
rw |
rw |
rw |
rw |
0 |
1 |
1 |
1 |
PORTA部分端口AF映射表如下:
|
PA0 |
PA5 |
PA8 |
PA9 |
PA10 |
AF7 |
USART2_CTS |
SPI1_SCK |
USART1_CK |
USART1_TX |
USART1_RX |
对于系统复用功能AF0,我们将I0口连接到AFO之后,还要根据所用功能进行配置:
(1)JTAG/SWD:在器件复位之后,会将这些功能引脚指定为专用引脚。也就是说,这些引脚在复位后默认就是JTAG/SWD功能。如果我们要作为GPI0来使用,就需要对对应的I0口复用器进行配置。
(2)RTC_REFIN:此引脚在系统复位之后要使用的话要配置为浮空输入模式。
(3)MCO1和MCO2:这些引脚在系统复位之后要使用的话要配置为复用功能模式。
外设复用功能:
对于ADC和DAC,在GPIOX_MODER寄存器中将所需I/0配置为模拟通道。
对于其它外设:
(1)在GPIOX_MODER寄存器中将所需I/O配置为复用功能
(2)通过GPIOX_OTYPER、GPIOX_PUPDR和GPIOX_OSPEEDER 寄存器,分别选择类型、上拉/下拉以及输出速度
(3)在GPIOX_AFRL 或GPIOX_AFRH寄存器中,将I/O连接到所需AFx
-
引脚复用配置过程?
端口复用为复用功能配置过程,以PA9,PA10配置为串口1为例
①GPIO端口时钟使能。
HALRCC_GPIOA_CLK_ENABLEO;//使能GPIO时钟
②复用外设时钟使能。
比如你要将端口PA9,PA10复用为串口,所以要使能串口时钟。
HAL_RCC_USART1_CLK_ENABLEO;//使能GPIO时钟
③端口模式配置为复用功能。HAL_GPIO_Init函数。
GPIO_Initure.Mode=GPIO_MODE_AF_PP;//复用推挽输出
④配置GPIOX_AFRL或者GPIOX_AFRH寄存器,将IO连接到所需的AFx。HAL_GPIO_Init函数。
GPIO Initure.Alternate=GPIO AF7_USART1;//复用为USART1