0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用树莓派控制GPIO教程

CHANBAEK 来源:头条号科G栈 作者:头条号科G栈 2023-03-24 11:26 次阅读

平台:树莓派 bcm2835 Raspberry Pi 3 Model B Rev 1.2

poYBAGQdGFOAGmsHAAKR98JiafE578.jpg

pYYBAGQdGFSAU6GmAABPVqbulAs111.jpg

应用层控制gpio目前知道有两种方式——通过gpio设备文件和内存映射。

第一种,通过gpio设备文件

设备文件位于/sys/class/gpio目录下

poYBAGQdGFSAYPvLAABdJwERqlQ385.jpg

通过向export中写gpio号可以挂载对应的gpio,gpio号是bcm的号,不是wiringPi的。

pYYBAGQdGFaAb9PuAAMjlemaGx4550.jpg

挂载后在gpio的文件夹下会有配置接口文件,向这些接口文件写命令就能控制gpio了。

poYBAGQdGFeAZVnDAAEhMwe2MlI293.jpg

上面用echo这种方式写成shell脚本就可以用脚本控制gpio了。

如果通过c语言控制,使用Linux操作文件的API编程即可。

pYYBAGQdGFiAUmgFAAGDPQk8JDI690.jpg

第二种,内存映射

将gpio的地址映射到内存空间,之后所有对这片内存的操作就是对gpio的操作。使用mmap函数实现映射。物理内存的设备文件是/dev/mem。

poYBAGQdGFiALjLtAABPaPhTz4g236.jpg

bcm2835的外设地址是0x3f000000,gpio的地址是外设地址基础上偏移0x200000。

pYYBAGQdGFmAFh2MAADG8pGmlbc020.jpg

使用open函数可以打开mem设备文件,之后使用mmap函数映射,其返回值就是分配的内存空间的起始地址。

poYBAGQdGFqADo81AAEurVNG0M0064.jpg

注:必须有管理员权限才能打开mem设备文件,所以运行命令时必须加上sudo。

gpio有41个寄存器,每个寄存器都是32位的。

pYYBAGQdGFuATg0HAAK74GilLkM933.jpg

前六个用来设置gpio的功能,前五个寄存器每个设置10个gpio,最后一个设置4个,三个位设置一种功能。

poYBAGQdGFyACJW0AAJmNLQaiYw773.jpg

gpio的设置寄存器是第8和9,清除寄存器是第11和12。一个位对应一个gpio。

pYYBAGQdGF2AXBIgAAEPwGAj7po002.jpg

poYBAGQdGF6AApiuAADQ_8Pyz-w458.jpg

根据以上寄存器的布局方式,可以使用下面的代码来设置和控制gpio。图中小写gpio就是映射后返回的地址指针,g是gpio号。

pYYBAGQdGF-AaE43AAH3kMQp_5s997.jpg

poYBAGQdGGCAFthCAAC_NwUqB48471.jpg

小结: 第一种方式比较适合对单独gpio的控制,比如调试和测试,更适用脚本编程;第二种方式适合c代码编程,更加通用方便。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    2767

    浏览量

    72761
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • GPIO
    +关注

    关注

    16

    文章

    1133

    浏览量

    50566
  • 树莓派
    +关注

    关注

    113

    文章

    1639

    浏览量

    104736
收藏 人收藏

    评论

    相关推荐

    树莓实现web控制GPIO的图解教程

    树莓实现web控制GPIO的图解教程:在网上看到一个老外用树莓web
    发表于 06-30 21:27

    如何通过树莓GPIO接口控制步进电机

    如何通过树莓GPIO接口控制步进电机1、实验目的在树莓派上编写一个C程序,通过其GPIO
    发表于 06-30 22:55

    树莓控制gpio

    树莓在哪里编写程序控制gpio引脚
    发表于 07-23 09:05

    树莓网络控制的船

    变得更坚固和稳定。第五步:组装根据树莓适当的位置在塑料盒上打孔并配上螺栓和螺母。从L298N到树莓GPIO连接跳线。把塑料盒装在船上,确
    发表于 01-20 15:24

    树莓的Simulink模型搭建与仿真运行控制GPIO和LED

    Simulink通过模块化的模型设计,使得嵌入式系统开发不受限于手工编码。而是基于模型的设计。如图,建模如下:采用一个随机脉冲生成器,随机生成电平脉冲,即可控制树莓的LED亮灭下一个采用GP
    发表于 11-29 14:55

    手机上使用MARSIOT去远程控制树莓的简单教程

    MARSIOT(火星互联)时一款手机APP,专门用来远程控制树莓GPIO。APP一共不到2M,没有后台进程,没有读取短信或通讯录等恶意行为,绝对是一个绿色软件,而且是我们中国人自己
    发表于 02-10 09:47

    玩转树莓树莓 3 + L298N模块控制直流电机

    `本文主要讲如何控制直流电机,这样就可以做小车等可以运动的项目,可玩性更高。一、硬件介绍直流电机控制主要用到的硬件为:1、烧写好系统的树莓控制
    发表于 10-21 13:51

    为什么树莓GPIO输入的时候会出现错误?

    我用的python控制树莓 下面是代码 import RPi.GPIO as GPIO import time
    发表于 10-29 05:55

    树莓GPIO进阶-驱动电机相关资料分享

    树莓GPIO进阶-驱动双普通直流电机树莓GPIO进阶-驱动步进电机文章来自公众号:技术Pi
    发表于 06-28 06:27

    树莓学习笔记之PWM控制直流电机转速介绍 相关资料分享

    接线三、树莓python库配置安装GPIO库sudoapt-getinstallpython3-rpi.gpio电机
    发表于 06-29 08:47

    树莓是如何控制GPIO输入输出的?

    ://shumeipai.nxez.com/2016/09/28/rpi-gpio-module-inputs.html#]https://blog.csdn.net/qq_41204464
    发表于 07-08 07:42

    树莓硬件编程——(一)用RPi.GPIO库输出信号 精选资料推荐

    一、认识RPi.GPIO树莓硬件编程不仅可以用Python进行开发,也可以用C++进行开发,那么想要对硬件进行控制,就需要了解树莓
    发表于 07-30 08:01

    通过Python RPi.GPIO控制树莓引脚

    零、汇总通过Python RPi.GPIO 控制树莓引脚输出高低电平、脉冲电平驱动器接收接收树莓
    发表于 08-31 07:59

    树莓GPIO口有哪些电气特性

    GPIO口是如何去定义的?树莓GPIO口有哪些电气特性?
    发表于 11-08 07:30

    通过树莓GPIO进行串口通讯

    树莓用在了一系列智能化改造的项目中,通过树莓GPIO进行串口通讯,控制智能电量表、水表、电
    发表于 01-13 08:15