OpenEdv-开源电子网

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

[开发板通用] 关于GPIO寄存器移位的计算方式

[复制链接]

15

主题

1061

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
3583
金钱
3583
注册时间
2019-8-14
在线时间
1052 小时
发表于 2021-7-1 19:48:41 | 显示全部楼层 |阅读模式
遇到比较多的用户对于IO寄存器切换模式需要移位配置时,产生疑惑,不知道怎么计算,下面简单的介绍下F1与F4移位的计算方式:
以IIC例程为例子
F1:


1761ae89eaeafb713ba82a4a04185c8e1f0ad6d9fd9c39bc984db17d4deee1f5QzpcVXNlcnNcQUxJ.png


这里改变的是PB7的模式,STM32里面,0~7为低位,8~15位高位,打开F1的中文参考手册可以看到,
a58d0174f79c6457da98580f26ef0e25b9160af9f676519d06b58ff43df0a846QzpcVXNlcnNcQUxJ.png

分高低寄存器,这里使用低寄存器 CRL,4位代表一个IO
代码图的括号里面,&的用法为有0为0,全1为1,寄存器别的位不改变设置F,改变要配置的位,先设置0,后面在使用 | 设置对应位的值,| 为有1为1,全0为0,左移28位是因为改变的是PB7,4*7=28;
8与3代表你要设置IO的模式,这个看你要把IO设置成那种模式,对应改值,看上图修改

F4:
F1与F4的寄存器有区别
75398b0d370bc4d5119b1a5b06edbf946b62eafa8543d8637462a186c8cb584aQzpcVXNlcnNcQUxJ.png
4a5ac47e505cd5dfc1a3f1c3901216395b17982ea4ef74873b0a1aebd91ffa28QzpcVXNlcnNcQUxJ.png

不分高低寄存器,2位代表一个IO,上图代码设置的是PB9,要改变2位,也就是3,2*9为选中IO 9,这里设置对应位为0的方式与上面F1的写法不一样,
2种写法都可以,后面的1和0也就是你要配置的模式

这个位移的计算在寄存器版本代码会经常要用到,比如IO的初始化等,
库函数的话,一般会在模拟IIC,或者是驱动一些传感器时需要使用到,比如温湿度,温度传感器等,移植到自己的项目工程时,选定好传感器要连接的IO后,直接移植传感器的初始化,修改相应的IO与改写下位移就可以。

别的STM32芯片寄存器位移的计算也是一样的方式,看参考手册对应的寄存器是几位代表一个IO,看有没有高低寄存器

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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 22:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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