平台:树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2
应用层控制gpio目前知道有两种方式——通过gpio设备文件和内存映射。
第一种,通过gpio设备文件
设备文件位于/sys/class/gpio目录下
通过向export中写gpio号可以挂载对应的gpio,gpio号是bcm的号,不是wiringPi的。
挂载后在gpio的文件夹下会有配置接口文件,向这些接口文件写命令就能控制gpio了。
上面用echo这种方式写成shell脚本就可以用脚本控制gpio了。
如果通过c语言控制,使用Linux操作文件的API编程即可。
第二种,内存映射
将gpio的地址映射到内存空间,之后所有对这片内存的操作就是对gpio的操作。使用mmap函数实现映射。物理内存的设备文件是/dev/mem。
bcm2835的外设地址是0x3f000000,gpio的地址是外设地址基础上偏移0x200000。
使用open函数可以打开mem设备文件,之后使用mmap函数映射,其返回值就是分配的内存空间的起始地址。
注:必须有管理员权限才能打开mem设备文件,所以运行命令时必须加上sudo。
gpio有41个寄存器,每个寄存器都是32位的。
前六个用来设置gpio的功能,前五个寄存器每个设置10个gpio,最后一个设置4个,三个位设置一种功能。
gpio的设置寄存器是第8和9,清除寄存器是第11和12。一个位对应一个gpio。
根据以上寄存器的布局方式,可以使用下面的代码来设置和控制gpio。图中小写gpio就是映射后返回的地址指针,g是gpio号。
小结: 第一种方式比较适合对单独gpio的控制,比如调试和测试,更适用脚本编程;第二种方式适合c代码编程,更加通用方便。
-
内存
+关注
关注
8文章
3071浏览量
74414 -
函数
+关注
关注
3文章
4350浏览量
63051 -
命令
+关注
关注
5文章
698浏览量
22146 -
GPIO
+关注
关注
16文章
1217浏览量
52485 -
树莓派
+关注
关注
117文章
1711浏览量
105930
发布评论请先 登录
相关推荐
树莓派是如何控制GPIO输入输出的?
树莓派驱动步进电机
![<b class='flag-5'>树莓</b><b class='flag-5'>派</b>驱动步进电机](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
树莓派控制步进电机
![<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>控制</b>步进电机](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
树莓派控制PWM控制电机转速
![<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>控制</b>PWM<b class='flag-5'>控制</b>电机转速](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
Linux树莓派开发之wiringPi库,树莓派控制继电器
![Linux<b class='flag-5'>树莓</b><b class='flag-5'>派</b>开发之wiringPi库,<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>控制</b>继电器](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
评论