复用
一个 GPIO如果可以复用为内置外设的功能引脚,那么当这个 GPIO 作为内置外设使用的时候,就叫做复用。
复用的步骤:
- 使能相应GPIO 端口时钟。
- 复用的外设时钟使能。
- 配置端口模式、初始化GPIO
例:PA9,PA10复用为串口1
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);IO时钟使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);外设时钟使能
//初始化IO为对应模式
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF_PP; //模式选择为复用推挽输出
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//速率选择为50M
GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOA
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode= GPIO_Mode_IN_FLOATING; //模式选择为浮空输入
GPIO_Init(GPIOA,&GPIO_InitStructure);
重映射
为了使不同器件封装的外设 IO 功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上(设置重映射寄存器)。
重映射的步骤:
- 使能被重映射的IO端口时钟。
- 使能被重映射的外设时钟。
- 使能AFIO时钟(重要!不要随便使能!)
- 重映射
例:将原PA9,PA10的复用串口1重映射到PB6,PB7
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能 GPIOB 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能串口 1 时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //使能 AFIO 时钟
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);//开启重映射,根据第一个参数确定部分重映射还是全部重映射