由于树莓派只有1,12两个口有pwm,于是使用
softPwmCreate(LED, 0, 100); //创建软PWM
softPwmWrite(LED, i);
这两个完成了工作
文章原来的路径:https://www.cnblogs.com/jikexianfeng/p/6938119.html
====================================
我手里面的是树莓派3,系统是Raspbian官方操作系统,已经安装好了wiringPi。 PWM简介:脉宽调制(PWM)是指用微处理器的数字输出来对模拟电路进行控制,是一种对模拟信号电平进行数字编码的方法。wiringpi有两种方式产生PWM,第一种为树莓派硬件PWM,如果需要精确的PWM控制的话,最好使用硬件PWM。第二种为wiringpi软件模拟的pwm,我们一种一种的介绍。
首先是电路连接,准备做一个LED呼吸灯程序。所以电路很简单,一个LED,一个100Ω的电阻。电阻串联在LED正极,然后连接到树莓派12号引脚。LED负极接地。
一、硬件PWM。
硬件PWM IO口为物理的12号端口(当然,这个也作为软件PWM使用)。如下图所示:
![]()
pi@Raspi:~ $ sudo nano hardware_pwd.c
2、写入以下程序
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <stdint.h>
4 #include <wiringPi.h>
5
6 #define LED 1
7
8 int main(void)
9 {
10 int bright;
11 printf("Raspberry Pi wiringPi PWM test program\n");
12 if (wiringPiSetup() == -1)
13 {
14 printf("GPIO setup error!\n");
15 exit(1);
16 }
17 pinMode(LED,PWM_OUTPUT);
18 while(1)
19 {
20 for (bright = 0; bright < 1024; ++bright)
21 {
22 pwmWrite(LED,bright);
23 delay(12);
24 }
25 for (bright = 1023; bright >= 0; --bright)
26 {
27 pwmWrite(LED,bright);
28 delay(12);
29 }
30 }
31 return 0;
32 }
3、编译
pi@Raspi:~ $ gcc -o hardware_pwd hardware_pwd.c -lwiringPi
4、运行
pi@Raspi:~ $ sudo ./hardware_pwd
现在应该可以看到你的LED有呼吸灯效果了。
1 /*
2 ============================================================================
3 Name : software_pwm.c
4 Author : Cheetah
5 Version :
6 Copyright : Geeiot
7 Description : PWM in C, Ansi-style
8 ============================================================================
9 */
10
11 #include <stdio.h>
12 #include <stdlib.h>
13 #include <stdint.h>
14 #include <wiringPi.h>
15 #include <softPwm.h>
16
17 #define LED 1 //同样使用1号IO口
18
19 int main(void)
20 {
21 int i = 0;
22 if (wiringPiSetup() == -1) //初始化wiringpi
23 {
24 printf("Setup GPIO error!\n");
25 return -1;
26 }
27 softPwmCreate(LED, 0, 100); //创建软PWM
28 while (1)
29 {
30 for (i = 0; i < 100; i++)
31 {
32 softPwmWrite(LED, i);
33 delay(10);
34 }
35 for (i = 99; i > 0; i--)
36 {
37 softPwmWrite(LED, i);
38 delay(10);
39 }
40 }
41 return 0;
42 }
二、软件模拟PWM
wiringPi 中包含了一个软件驱劢的 PWM 处理库,可以在任意的树莓派 GPIO 上输出PWM 信号。但是软件模拟的PWM有一些限制。因为PWM的频率越高,所需要的CPU资源越多,所以在这之间有一些平衡。
步骤同上,我这里就直接贴出代码了。特别注意编译的时候会多一个-lpthread选项。
编译
pi@Raspi:~ $ gcc -o software_pwm software_pwm.c -lwiringPi -lpthread
运行之后会有同样的效果!
特别注意:必须使用 wiringPiSetup()、 wiringPiSetupGpio()或者 wiringPiSetupPhys()函数来初始化 wiringPi。wiringPiSetupSys()是丌够快的,因此,必须使用 sudo 命令来运行程序。
附上wiringpi用户手册的下载:https://www.geeiot.net/forum.php … 1121&extra=page%3D1
