热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

玩转树莓派(六)使用C语言通过BCM2835库控制GPIO

玩转树莓派(六)使用C语言通过BCM2835库控制GPIO目录玩转树莓派(六)使用C语言通过BCM2835库控制GPIO一、
玩转树莓派(六)使用C语言 通过BCM2835库控制GPIO

目录

  • 玩转树莓派(六)使用C语言 通过BCM2835库控制GPIO
    • 一、创建环境
    • 二、编写代码
    • 三、编译运行
    • 四、查看效果
    • 五、BCM2835库简单介绍
    • 六、漂亮的Ending


一、创建环境

因为BCM2835 Library在Raspberry Pi OS系统中没有内置,所以需要用户自行下载。

  • 新建CWorkSpace文件夹
  • 新建bcm2835文件夹

pi@raspberrypi:~ $ mkdir CWorkSpace
pi@raspberrypi:~ $ cd CWorkSpace/
pi@raspberrypi:~/CWorkSpace $ mkdir bcm2835
pi@raspberrypi:~/CWorkSpace $ cd bcm2835/

  • 下载bcm2835-1.50.tar.gz(BCM2835 Library)

pi@raspberrypi:~/CWorkSpace/bcm2835 $ wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.50.tar.gz
--2021-02-04 00:08:38-- http://www.airspayce.com/mikem/bcm2835/bcm2835-1.50.tar.gz
正在解析主机 www.airspayce.com (www.airspayce.com)... 192.185.48.187
正在连接 www.airspayce.com (www.airspayce.com)|192.185.48.187|:80... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:252178 (246K) [application/x-gzip]
正在保存至: “bcm2835-1.50.tar.gz”bcm2835-1.50.tar.gz 100%[=====================================================================>] 246.27K 7.96KB/s 用时 23s 2021-02-04 00:09:03 (10.5 KB/s) - 已保存 “bcm2835-1.50.tar.gz” [252178/252178])pi@raspberrypi:~/CWorkSpace/bcm2835 $ ls
bcm2835-1.50.tar.gz

  • 解压缩bcm2835-1.50.tar.gz

pi@raspberrypi:~/CWorkSpace/bcm2835 $ tar -zxvf bcm2835-1.50.tar.gz

  • 配置、编译、安装

pi@raspberrypi:~/CWorkSpace/bcm2835 $ cd bcm2835-1.50/
pi@raspberrypi:~/CWorkSpace/bcm2835/bcm2835-1.50 $ ls
aclocal.m4 ChangeLog config.h.in configure COPYING doc INSTALL ltmain.sh Makefile.in NEWS src
AUTHORS config.guess config.sub configure.ac depcomp examples install-sh Makefile.am missing README test-driver
pi@raspberrypi:~/CWorkSpace/bcm2835/bcm2835-1.50 $ ./configure && make
pi@raspberrypi:~/CWorkSpace/bcm2835/bcm2835-1.50 $ sudo make install

二、编写代码


  • 编辑gpio_out_bcm2835.c

#include
#include #define PIN 18
int main(void)
{int i&#61;0;if (!bcm2835_init())return 1;bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP);for(i&#61;0;i<10;i&#43;&#43;){printf("gpio out: %d\r\n", i);bcm2835_gpio_write(PIN, i%2);delay(3000);}bcm2835_close();printf("gpio out end\r\n");return 0;
}

三、编译运行


  • 编译&#xff0c;编译时要连接bcm2835的库
  • 运行

pi&#64;raspberrypi:~/CWorkSpace/bcm2835 $ vim gpio_out_bcm2835.c
pi&#64;raspberrypi:~/CWorkSpace/bcm2835 $ gcc -o gpio_out_bcm2835 gpio_out_bcm2835.c -l bcm2835
pi&#64;raspberrypi:~/CWorkSpace/bcm2835 $ ./gpio_out_bcm2835
gpio out: 0
gpio out: 1
gpio out: 2
gpio out: 3
gpio out: 4
gpio out: 5
gpio out: 6
gpio out: 7
gpio out: 8
gpio out: 9
gpio out end

四、查看效果

用万用表量下BCM编号18的GPIO.1的引脚&#xff0c;可以发现其间隔3s的高低电平变换了10次。

pi&#64;raspberrypi:~/PythonWorkSpace $ gpio readall&#43;-----&#43;-----&#43;---------&#43;------&#43;---&#43;---Pi 3B--&#43;---&#43;------&#43;---------&#43;-----&#43;-----&#43;| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |&#43;-----&#43;-----&#43;---------&#43;------&#43;---&#43;----&#43;&#43;----&#43;---&#43;------&#43;---------&#43;-----&#43;-----&#43;| | | 3.3v | | | 1 || 2 | | | 5v | | || 2 | 8 | SDA.1 | IN | 1 | 3 || 4 | | | 5v | | || 3 | 9 | SCL.1 | IN | 1 | 5 || 6 | | | 0v | | || 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 0 | IN | TxD | 15 | 14 || | | 0v | | | 9 || 10 | 1 | IN | RxD | 16 | 15 || 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 1 | OUT | GPIO. 1 | 1 | 18 || 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | || 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 || | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 || 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | || 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 || 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 || | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 || 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 || 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | || 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 || 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | || 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 || 26 | 25 | GPIO.25 | IN | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 || | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |&#43;-----&#43;-----&#43;---------&#43;------&#43;---&#43;----&#43;&#43;----&#43;---&#43;------&#43;---------&#43;-----&#43;-----&#43;| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |&#43;-----&#43;-----&#43;---------&#43;------&#43;---&#43;---Pi 3B--&#43;---&#43;------&#43;---------&#43;-----&#43;-----&#43;

五、BCM2835库简单介绍


函数int bcm2835_init(void)
说明Initialise this library.
返回1&#xff1a;成功&#xff1b;0&#xff1a;失败

函数int bcm2835_close(void)
说明Close this library and deallocate everything
返回1&#xff1a;成功&#xff1b;0&#xff1a;失败

函数void bcm2835_gpio_fsel(uint8_t pin, uint8_t mode)
说明Each control register has 10 sets of 3 bits per GPIO pin
输入pin&#xff1a;BCM系统的引脚编号
——mode&#xff1a; Each control register has 10 sets of 3 bits per GPIO pin&#xff08;如下&#xff09;

// 000 &#61; GPIO Pin X is an input
// 001 &#61; GPIO Pin X is an output
// 100 &#61; GPIO Pin X takes alternate function 0
// 101 &#61; GPIO Pin X takes alternate function 1
// 110 &#61; GPIO Pin X takes alternate function 2
// 111 &#61; GPIO Pin X takes alternate function 3
// 011 &#61; GPIO Pin X takes alternate function 4
// 010 &#61; GPIO Pin X takes alternate function 5

函数void bcm2835_gpio_write(uint8_t pin, uint8_t on)
说明Set the state of an output
输入pin&#xff1a;BCM系统的引脚编号
——on&#xff1a; 1&#xff1a;高电平&#xff1b;0&#xff1a;低电平

六、漂亮的Ending

觉得好&#xff0c;就打个赏呗
觉得好&#xff0c;就一键三连呗
在这里插入图片描述


推荐阅读
  • 本文详细介绍了如何在Linux系统中搭建51单片机的开发与编程环境,重点讲解了使用Makefile进行项目管理的方法。首先,文章指导读者安装SDCC(Small Device C Compiler),这是一个专为小型设备设计的C语言编译器,适合用于51单片机的开发。随后,通过具体的实例演示了如何配置Makefile文件,以实现代码的自动化编译与链接过程,从而提高开发效率。此外,还提供了常见问题的解决方案及优化建议,帮助开发者快速上手并解决实际开发中可能遇到的技术难题。 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 本文探讨了将PEBuilder转换为DIBooter.sh的方法,重点介绍了如何将DI工具集成到启动层,实现离线镜像引导安装。通过使用DD命令替代传统的grub-install工具,实现了GRUB的离线安装。此外,还详细解析了bootice工具的工作原理及其在该过程中的应用,确保系统在无网络环境下也能顺利引导和安装。 ... [详细]
  • [转]Makefile 使用总结
    2019独角兽企业重金招聘Python工程师标准1.Makefile简介Makefile是和make命令一起配合使用的.很多大型项目的编译都是通过Makefile来组织的,如 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • 在 openSUSE Tumbleweed 系统上搭建 51 单片机开发环境并进行编程实践。首先,通过 `sudo zypper in emacs` 命令安装文本编辑器 Emacs。接着,使用 `sudo zypper in sdcc` 安装 SDCC 编译器。最后,利用 `wget` 下载 sdcflash Python 脚本,以便于单片机的烧录和调试。此外,还介绍了如何配置开发环境,确保各组件协同工作,提高开发效率。 ... [详细]
  • 1套接字发展史及发展套接字起源于20世纪70年代加利福尼亚大学伯克利分校版本的Unix,即人们所说的BSDUnix。因此,有时人们也把套接字称为“伯克利套接字&rdquo ... [详细]
  • Java解析Rss(一)
    2019独角兽企业重金招聘Python工程师标准packagecom.ninemax.application.rss;importjava.net.URL;importja ... [详细]
  • 如何提高工程编译速度
    点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~     文章首发  公众号——Pou光明公众号还在维护,大家莫慌~LinuxQt平台为例测试编译 ... [详细]
  • 如何配置Logrotate进行日志文件切割并使用Crontab设置定时任务
    1.下载logrotate在Fedora和CentOS安装yuminstalllogrotatecrontabsDebian和Ubuntu上apt-getinstalllogrot ... [详细]
  • 在 Debian 11 系统中部署 CMake 的详细步骤与最佳实践
    CMake是一个免费、开源、跨平台的工具系列,旨在构建、测试和打包软件. CMake用于使用简单的平台和独立于编译器的配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用 ... [详细]
  • PyFasterRCNN配置详解与优化指南
    本文主要讲解Faster-RCNN的配置过程,以及配置过程中遇到问题的解决方案。 1.下载工程gitclone--recursivehttps:github.comr ... [详细]
author-avatar
丢失的面包树
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有