OpenEdv-开源电子网

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

[开发板通用] 激光测距改IIC到另一个IO口,并详解IIC改IO模式的寄存器

[复制链接]

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17693
金钱
17693
注册时间
2018-3-3
在线时间
523 小时
发表于 2019-4-15 16:01:05 | 显示全部楼层 |阅读模式
本帖最后由 Psheng 于 2019-4-15 16:21 编辑

将F7的激光测距模块VL53L0X的IIC驱动引脚改为     PB13 SCLK PB14 SDA
PB15 XSH
(HAL库阿波罗F767开发VL53L0X模.rar (20.51 MB, 下载次数: 97)
/*
*
*
*
*
*
*/
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

35

主题

560

帖子

2

精华

资深版主

Rank: 8Rank: 8

积分
17693
金钱
17693
注册时间
2018-3-3
在线时间
523 小时
 楼主| 发表于 2019-4-15 16:30:24 | 显示全部楼层
本帖最后由 Psheng 于 2019-4-15 18:28 编辑

打开F7的中文参考手册可以看到GPIO的MODER寄存器是用来控制IO的模式的。
0000000000000000000000000000000000000000.png
然后分析下这句代码
#define VL_SDA_IN()  {GPIOB->MODER&=~(3<<(14*2));GPIOB->MODER|=0<<14*2;}        //PB14输入模式

可以看到调用这个宏定义后 执行了两个语句分别为 GPIOB->MODER&=~(3<<(14*2)) 和 GPIOB->MODER|=0<<14*2
这两条语句都是操作GPIOB的MODER寄存器的。

GPIOB->MODER&=~(3<<(14*2))
首先3就是2进制的 11 。然后将11 左移 28位。 变成了二进制 0011 0000 0000 0000 0000 0000 0000 0000
然后用按位取反符(~) 变成二进制的 1100 1111 1111 1111 1111 1111 1111 1111
然后将这段数据和MODER进行 与运算(&),(0和任何数与运算都是0  1和任何数与运算都是1)目的就是为了清除MODER寄存器的bit[29:28] 位。


GPIOB->MODER|=0<<14*2
这个语句就是将 0左移28bit ,变成0000 0000 0000 0000 0000 0000 0000 0000
然后将这个数和MODER寄存器进行 或运算。就是为了给改寄存器的 bit[29:28]位重新赋值00.


最后运行完毕的结果就是GPIOB的MODER寄存器的bit[29:28]变成了00.对照手册的寄存器说明  可以知道这个就是将端口GPIOB的PIN14引脚变成了输入模式


同理可得
#define VL_SDA_OUT() {GPIOB->MODER&=~(3<<(14*2));GPIOB->MODER|=1<<14*2;}    //PB14输出模式


首先清零 bit[29:28] 然后就是赋值01到 bit[29:28]。
最后运行完毕的结果就是GPIOB的MODER寄存器的bit[29:28]变成了01.对照手册的寄存器说明  可以知道这个就是将端口GPIOB的PIN14引脚变成了输出模式











/*
*
*
*
*
*
*/
回复 支持 2 反对 0

使用道具 举报

1

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
79
金钱
79
注册时间
2018-4-8
在线时间
14 小时
发表于 2019-7-3 22:55:32 | 显示全部楼层
Psheng 发表于 2019-4-15 16:30
打开F7的中文参考手册可以看到GPIO的MODER寄存器是用来控制IO的模式的。

然后分析下这句代码

写的非常详细,终于懂了,谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-5 10:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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