端口复用
这里以定时器为例:
STM32内置外设的外部引脚与GPIO复用。GPIO可以作为内置外设功能引脚复用。
简单的说就是配置内部外设时,正常开启时钟,然后GPIO需要设置复用模式,比如复用推挽输出
配置方式
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
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
//后面自行配置内部外设串口初始化
端口重映射
重映射分为部分重映射和完全重映射,我们可以通过设置重映射寄存器,把外设引脚从默认端口映射到其它端口。
为了使不同器件封装的外设IO功能数量达到最优,可以把一些复用功能重新映射到其他一些引脚上。STM32中有很多内置外设的输入输出引脚都具有重映射(remap)的功能。
例如:串口1的TX,RX引脚在PA9,PA10端口,也可以通过重映射使用PB6,PB7端口。
配置方式
//使能GPIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
//使能外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//使能AFIO时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
//开启重映射
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
//后面自行配置初始化内容
使能AFIO时钟的原因:
为了读写AFIO_MAPR、AFIO_EXTICRX和AFIO_EVCR寄存器,以配置复用功能重映射、外部中断线映射和EVENTOUT事件输出。