GPIO管腳復用:
32芯片內(nèi)部集成了很多外設控制器,(USART,ADC,CAN等),這些外設控制器也需要通過引腳與外設連接,復用功能是相對于單片機的引腳而言的,復用功能是指單片機的引腳既可以作為普通的GPIO也可以作為內(nèi)部外設控制器的引腳來使用。比如F1系列PA5引腳可以作為多個SPI、DAC、ADC的復用引腳,但同一時刻只能選擇一種。
//GPIOA端口使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//復用的外設時鐘使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//端口模式配置 GPIO_Init
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;//復用推挽輸出
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10
端口重映射:
GPIO重映射是原IO映射到其他IO口去,應注意操作步驟:
1.使能被重映射IO端口時鐘
2.使能被重映射的外設時鐘
3.使能AFIO復用時鐘(重要)
4.進行重映射
//1.重映射后的IO時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//2.使能重映射外設時鐘
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//3.使能AFIO時鐘:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//4.開啟重映射:
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
//5.GPIO_Init()配制重映射引腳, 這里只需配置重映射后的I/O,原來的不需要去配置。