最近在看 can通信部分,我一块板子上的can是接在PB8,9接口,原子哥的例程又没有这块的,网上很多又多少库函数版本的。我也是很烦恼哈。最后直接自己看资料了我这边就主要讲如何进行端口映射部分注意事项,其它的就参考原子的教程好,原子哥可是讲解的很详细的哈。
进入正题了,既然用到端口复用的话 就自然必须要看参考资料了。
这里需要用到的就是 《STM32中文参考手册》,原子哥的资料里面就有。
对于端口复用 参考手册也有详细的介绍,如果你认真看的话,原文如下:
8.1.4 复用功能(AF)
使用默认复用功能前必须对端口位配置寄存器编程。
● 对于复用的输入功能,端口必须配置成输入模式(浮空、上拉或下拉)且输入引脚必须由外部
驱动
注意: 也可以通过软件来模拟复用功能输入引脚,这种模拟可以通过对 GPIO 控制器编程来实现。此
时,端口应当被设置为复用功能输出模式。显然,这时相应的引脚不再由外部驱动,而是通过
GPIO 控制器由软件来驱动。
● 对于复用输出功能,端口必须配置成复用功能输出模式(推挽或开漏)。
● 对于双向复用功能,端口位必须配置复用功能输出模式(推挽或开漏)。这时,输入驱动器被
配置成浮空输入模式。
如果把端口配置成复用输出功能,则引脚和输出寄存器断开,并和片上外设的输出信号连接。
如果软件把一个GPIO脚配置成复用输出功能,但是外设没有被激活,它的输出将不确定。
8.1.5 软件重新映射I/O 复用功能
为了使不同器件封装的外设I/O功能的数量达到最优,可以把一些复用功能重新映射到其他一些
脚上。这可以通过软件配置相应的寄存器来完成(参考AFIO寄存器描述)。这时,复用功能就不
再映射到它们的原始引脚上了。
8.3 复用功能I/O 和调试配置(AFIO)
为了优化64脚或100脚封装的外设数目,可以把一些复用功能重新映射到其他引脚上。设置复用
重映射和调试I/O配置寄存器(AFIO_MAPR)实现引脚的重新映射。这时,复用功能不再映射到它
们的原始分配上。
具体配置如下:
从上面我们就可以知道 要实现复用功能必须使能复用功能寄存器(AFIO),就跟我们要使用某个IO口一样,
从配图中就可以看出第一位就是配置AFIO。
RCC->APB2ENR|=1<<0; //使能复用功能
使能完AFIO寄存器之后就可以开始配置寄存器(AFIO_MAPR)实现将can的端口映射到PB8,9了
从配图中就可以看出第13,14位就是配置CAN_RX映像到PB8,CAN_TX映像到PB9(不能用于36脚的封装);
AFIO->MAPR|=2<<13; //映射到对应的IO
到这的话 复用功能就已经完成了,很简单有木有。
不需要使用复用功能的话 关闭的话,相信已经难不倒你们了哈。
附件里的程序是我在原子哥的can程序上修改来的,已经测试成功。
分享给大家,文笔不好,大伙凑合着看,互相学习哈。
再次感谢原子哥提供这么好的平台与资源给我们
一周热门 更多>