本文介绍树莓派(raspberry pi)在linux c 环境下的硬件pwm配置及使用方法。

1. 下载安装wiringPi

此步骤建议参考官网指南,wiringPi提供了对树莓派的硬件IO访问,包括GPIO/I2C/PWM等,下载安装后本地会出现wiringPi文件夹,根目录下有/examples 可供参考。

2. 树莓派PWM硬件

以raspberry pi 3b 为例,尝试在命令行下输入 pinout,可查看当前pi的io映射图

这是当前pi的gpio布局,却不是wiringPi的IO映射表,因此参考时需注意,好在搜索一番便找到一张raspberry 3b的wiringpi IO映射表

图中的gpio1(pwm0) 及 gpio23(pwm1) 即为我们需要传输给wiringpi的硬件pwm输出脚

3. wiringPi pwm 接口说明

在examples/pwm.c 或 wiringPi/wiringPi.c中可查看pwm的相关接口,但却没有详细的调用说明,经过一番查阅,得出接口的使用方法为:

  • pwmSetClock():设置pwm的工作时钟。19.2MHz晶振为pwm提供时钟输入,wiringpi在初始化gpio时默认采用32倍分频(参考wiringPI.c 中的pinMode() 代码),因此不调用此函数,pwm的默认工作时钟为600KHz.
  • pwmSetRange():设置pwm的输出周期。以600KHz的工作时钟为例,假设pwm输出频率为freq,则range = 600000/freq.
  • pwmSetMode():设置pwm的工作模式,wiringPi.h头文件中包含此2种模式 PWM_MODE_MS/PWM_MODE_BAL,但并未做任何解释。。.那就看手册《BCM2837-ARM-Peripherals.pdf》吧

    从描述来看,MSEN=0似乎用来传输N/M数据, MSEN=1才是设置占空比输出,因此处的pwm输出模式选择PWM_MODE_MS

  • pwmWrite():设置pwm的输出占空比。因为一个周期长度为range,因此占空比的范围为0~range.

此外,wiringPi也提供了软件PWM输出,由于屏蔽了硬件相关信息,其接口理解也更为方便,在此不再赘述。

wiringPi库的pwm配置及使用说明的更多相关文章

  1. 树莓派wiringPi库详解

    wiringPi是一个很棒的树莓派IO控制库,使用C语言开发,提供了丰富的接口:GPIO控制,中断,多线程,等等.java 的pi4j项目也是基于wiringPi的,我最近也在看源代码,到时候整理好了 ...

  2. STM32F0使用LL库实现PWM输出

    在本次项目中,限于空间要求我们选用了STM32F030F4作为控制芯片.这款MCU不但封装紧凑,而且自带的Flash空间也非常有限,所以我们选择了LL库实现.本文我们将说明如何通过LL库实现PWM信号 ...

  3. 【VS开发】利用VS2015的工程文件来复制另外一个工程的配置的使用说明

    [VS开发]利用VS2015的工程文件来复制另外一个工程的配置的使用说明 标签:[VS开发] 说明:总是有时候会遇到这样的问题,在一个工程中完成了对某些PKG包的包含,包括头文件和库等都能发现,但是我 ...

  4. RPI学习--环境搭建_刷卡+wiringPi库安装

    1,镜像地址 http://www.raspberrypi.org/downloads/ 2,Windows下刷写工具 Win32 Disk Imager 3,安装wiringPi库 (这里在连网状态 ...

  5. 【转】Xcode添加静态库以及编译选项配置常见问题

    原文网址:http://www.cnblogs.com/Quains/p/3276425.html 一,Xcode编译出现Link错误,出现"duplicate symbols for ar ...

  6. Xcode添加静态库以及编译选项配置常见问题

    一,Xcode编译出现Link错误,出现"duplicate symbols for architecture i386 clang"提示.问题:链接时,项目有重名文件.解决:根据 ...

  7. VSCode中C/C++库文件的配置

    VSCode中C/C++库文件的配置 之前一直在是用sublime做主要编辑器,现在主要使用VSCode,毕竟大厂制作,从目前的使用情况来看,我更喜欢使用VSCode编辑器. 有时候会用VScode来 ...

  8. Maven私库安装与配置

    Maven私库安装与配置 https://www.cnblogs.com/dengyulinBlog/p/6398310.html

  9. 树莓派4B 更新wiringPi库到2.52的方法的wiringPi库2.5.2版本wiringpi-latest.deb下载

    树莓派4B 更新wiringPi库到2.52的方法 – 树莓派中文站 http://www.52pi.net/archives/1918 通过如上链接可知,需要通过如下命令下载wiringpi-lat ...

随机推荐

  1. 利用post请求发送内容进行爬虫

    利用post请求发送内容进行爬虫 import requests url = 'http://www.iqianyue.com/mypost' header = {} header['Accept-L ...

  2. javascript 面向对象程序设计--深刻理解对象

    javascript中,每个对象都是基于一个引用类型创建的,我们可以把ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数. 深刻理解对象 创建自定义对象的最简单方式就 ...

  3. python里如何保存float类型的小数的位数

    python保留两位小数: In [1]: a = 5.026 In [2]: b = 5.000 In [3]: round(a,2) Out[3]: 5.03 In [4]: round(b,2) ...

  4. Robomongo连接MongoDB 报 Authorization failed 解决办法

    首先将MongoDB安装文件的bin目录添加到环境变量Path中 如图: 这样就可以直接在cmd命令行,不需要进行目录切换,就可以直接使用啦 打开dos命令框 依次输入下图修改admin密码

  5. 关于Kafka __consumer_offests的讨论

    众所周知,__consumer__offsets是一个内部topic,对用户而言是透明的,除了它的数据文件以及偶尔在日志中出现这两点之外,用户一般是感觉不到这个topic的.不过我们的确知道它保存的是 ...

  6. Hadoop问题:DataNode进程不见了

      DataNode进程不见了 问题描述 最近配置Hadoop的时候出现了这么一个现象,启动之后,使用jps命令之后是这样的: 看不到DataNode进程,但是能够正常的工作,是不是很神奇啊? 在一番 ...

  7. 虚拟机console基础环境部署——配置本地YUM源

    1. CD/ROM装载系统镜像2. 挂载设备3. 配置本地源4. 总结 有关YUM源及Linux系统三大软件管理方式,参照博客<CentOS系统三大软件管理>,笔记内链:CentOS系统三 ...

  8. supervisord supervisorctl 问题supervisor.sock refused connection

    如果supervisord挂了的话,提示supervisor.sock refused connection. ,重新启动命令为supervisord 常用命令: supervisord -c /et ...

  9. 回归树(Regression Tree)

    目录 回归树 理论解释 算法流程 ID3 和 C4.5 能不能用来回归? 回归树示例 References 说到决策树(Decision tree),我们很自然会想到用其做分类,每个叶子代表有限类别中 ...

  10. Java连接redis

    一.依赖包 jedis-2.1.0.jar   commons-pool-1.6.jar 二.实例 //连接参数public class RedisConfig { public static int ...