OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 20756|回复: 12

重映射详解

[复制链接]

25

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2013-4-20
在线时间
0 小时
发表于 2013-8-15 12:09:05 | 显示全部楼层 |阅读模式
       弄了一天了,终于把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一定要关闭,否则不会有作用。(弄了好久才发现)


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-22
在线时间
1 小时
发表于 2013-8-15 12:21:43 | 显示全部楼层
楼主,你的图不能看啊
回复 支持 反对

使用道具 举报

25

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2013-4-20
在线时间
0 小时
 楼主| 发表于 2013-8-15 12:25:58 | 显示全部楼层
回复【2楼】iyzyh:
---------------------------------
啊?我这里可以看啊。。。你刷新了吗?
回复 支持 反对

使用道具 举报

2

主题

16

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2012-11-22
在线时间
1 小时
发表于 2013-8-15 13:59:15 | 显示全部楼层
回复【3楼】回首看那个曾经的我:
---------------------------------
现在可以了嗯
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2013-8-15 14:20:43 | 显示全部楼层
回复【楼主位】回首看那个曾经的我:
---------------------------------
顶,关闭JTAG!!
我给忽略这个问题了...
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

1

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2011-12-14
在线时间
0 小时
发表于 2013-11-16 13:02:58 | 显示全部楼层
楼主,是不是只要关闭JTAG,不需要关闭SWD模式呢?关闭了SWD就不能下载了...
回复 支持 反对

使用道具 举报

25

主题

121

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
243
金钱
243
注册时间
2013-4-20
在线时间
0 小时
 楼主| 发表于 2014-4-21 12:29:00 | 显示全部楼层
回复【6楼】lxl_lw:
---------------------------------
嗯。
回复 支持 反对

使用道具 举报

33

主题

253

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-8-16
在线时间
0 小时
发表于 2014-7-25 15:41:22 | 显示全部楼层
不错!受教了...
开源的世界,你可以做主!!
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2014-5-30
在线时间
0 小时
发表于 2015-10-14 20:45:50 | 显示全部楼层
请问工程文件源代码能共享一下吗?
回复 支持 反对

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2015-12-14
在线时间
0 小时
发表于 2015-12-14 17:22:49 | 显示全部楼层
各位大神,小弟刚接触STM32 ,请问SPI1重映射可以只映射其中一个或几个信号线吗?比如只将SPI1_MOSI信号重映射,其他引脚不变。
回复 支持 反对

使用道具 举报

3

主题

197

帖子

0

精华

高级会员

Rank: 4

积分
538
金钱
538
注册时间
2012-7-19
在线时间
63 小时
发表于 2016-10-27 10:18:14 | 显示全部楼层
我现在关闭jtag,保留swd,sck时钟还是没有
回复 支持 反对

使用道具 举报

11

主题

179

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1103
金钱
1103
注册时间
2016-7-19
在线时间
168 小时
发表于 2017-6-19 15:50:20 | 显示全部楼层
现在遇到这个问题了,谢谢分享!!!
回复 支持 反对

使用道具 举报

51

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
561
金钱
561
注册时间
2011-4-11
在线时间
43 小时
发表于 2019-10-17 09:27:08 | 显示全部楼层
关闭了JTAG和SW,那岂不是调试不了了?
难道不能关闭jtag保留SW麽
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-7 21:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表