重映射详解

2019-08-17 06:43发布

       弄了一天了,终于把SPI1重映射弄懂了。也解决了一个NRF24L01调试的问题。详见我的博客:http://blog.sina.com.cn/s/blog_a07a3f180101e6ow.html
    为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它们的原始分配上。(注意:重定义的引脚是固定的,不是想重定义到哪个引脚就可以到哪个引脚的!重映像一般只适用于100和144脚的封装!(具体看哪个外设))一、常用可以重定义管脚外设。
1、定时器4的通道1到通道4可以从端口B重映射到端口D。


2、TIM1复用功能重映像。


3、USART1重映像。


4、I2C1复用功能重映射。


5、SPI1重映像。


二、管脚重映射配置。 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时钟(开启待重映射管脚的时钟)    RCC->APB2ENR|=1<<2;//开启PA时钟(开启待重映射管脚的时钟) <3>AFIO->MAPR|=1<<0; //SPI1端口复用功能开启 <4>GPIOB->CRL&=0XFF000FFF;// PB3、4、5配置为复用功能输出    GPIOB->CRL|=0X00BBB000;    GPIOA->CRH&=0X0FFFFFFF;// PA15配置为复用功能输出    GPIOA->CRH|=0XB0000000; <5>因为JTAG占用了PB3/PB4两个引脚,而这两个引脚恰好是SPI1映射后的引脚,所以我们要关闭JTAG-DP,关闭SW-DP(系统复位后的默认状态是启用SWJ但没有跟踪功能);



   操作寄存器关闭 :AFIO->MAPR|=4<<24;    操作库函数关闭 :GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE); <6>配置完成后即可将原来的管脚功能输入输出重新映射到重映射管脚上去,使用的时候是一样的。
三、可能遇到的问题。
   1、配置的先后问题:首先是应该开启AFIO时钟,然后才能配置AFIO相关的寄存器的,不然不会有作用的。
   2、SPI1重映射的时候JTAG一定要关闭,否则不会有作用。(弄了好久才发现)


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。