为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。(注意:重定义的引脚是固定的,不是想重定义到哪个引脚就可以到哪个引脚的!重映像一般只适用于100和144脚的封装!(具体看哪个外设))
RCC->APB2ENR|=1<<2;//开启PA时钟(开启待重映射管脚的时钟)
GPIOB->CRL|=0X00BBB000;
GPIOA->CRH&=0X0FFFFFFF;// PA15配置为复用功能输出
GPIOA->CRH|=0XB0000000;
操作寄存器关闭 :AFIO->MAPR|=4<<24;
操作库函数关闭 :GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
一、常用可以重定义管脚外设。
1、定时器4的通道1到通道4可以从端口B重映射到端口D。
1、①事件控制寄存器(AFIO_EVCR)、②复用重映射和调试I/O 配置寄存器(AFIO_MAPR)、③外部中断配置寄存器1(AFIO_EXTICR1)、④外部中断配置寄存器2(AFIO_EXTICR2)、⑤外部中断配置寄存器3(AFIO_EXTICR3)、⑥外部中断配置寄存器4(AFIO_EXTICR4),对以上寄存器进行读写操作前,应当首先打开AFIO(备用功能I/O)的时钟。
2、举例(以配置SPI1重映射为例)。
<1>RCC->APB2ENR|=1<<0;//开启AFIO时钟
<2>RCC->APB2ENR|=1<<3;//开启PB时钟(开启待重映射管脚的时钟)
<3>AFIO->MAPR|=1<<0; //SPI1端口复用功能开启
<4>GPIOB->CRL&=0XFF000FFF;// PB3、4、5配置为复用功能输出
<5>因为JTAG占用了PB3/PB4两个引脚,而这两个引脚恰好是SPI1映射后的引脚,所以我们要关闭JTAG-DP,关闭SW-DP(系统复位后的默认状态是启用SWJ但没有跟踪功能);
<6>配置完成后即可将原来的管脚功能输入输出重新映射到重映射管脚上去,使用的时候是一样的。