当前位置: 首页 > news >正文

【STM32MP157应用编程】3.控制PWM

目录

PWM文件

指令操作PWM

程序操作PWM

程序说明

程序代码

3_PWM_1.c

启动交叉编译工具

编译

拷贝到开发板

测试

PWM文件

在/sys/class/pwm目录下,存放了PWM的文件。

 

         pwmchip0pwmchip4目录对应了MP157 SoC的2个PWM控制器,pwmchip0对应的是MP157的TIM4,而pwmchip4对应的则是TIM1,并且STM32MP157只提供了一个PWM通道(PA10--TIM1_CH3)。TIM4_CH2用作LCD背光控制。

        npwm:只读文件,读取该文件可以得知该PWM控制器下共有几路PWM输出。

cat npwm

 export:在使用PWM之前,需要将其导出,通过export属性进行导出。

echo 2 > export

数字对应的通道
0CH1
1CH2
2CH3
3CH4

 unexport:将导出的PWM通道删除。

echo 2 > unexport

指令操作PWM

period:用于配置PWM周期,可读可写;写入一个字符串数字值,以ns(纳秒)为单位。最小值为5000

echo 1000000 > period	#设置1ms的周期

 

duty_cycle:用于配置PWM的占空比,可读可写;写入一个字符串数字值,是以ns为单位。

echo 500000 > duty_cycle	#设置0.5ms的占空比

 

 polarity:用于设置极性,可读可写,可写入的值: "normal":普通; "inversed":反转。

echo normal > polarity		#设置普通极性

         enable:可读可写,写入"0"表示禁止PWM;写入"1"表示使能PWM。读取该文件获取PWM当前是禁止还是使能状态。通常配置好PWM之后,再使能PWM。

echo 1 > enable		#使能PWM

 

程序操作PWM

程序说明

./xxx 参数1 参数2

参数1:周期,以us为单位,最小值为5。

参数2:占空比,百分比。

        0~100:占空比的百分比。

程序代码

3_PWM_1.c

/*PWM控制
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>//./xxx 周期 占空比(百分比)static char PWM_path[] = "/sys/class/pwm/pwmchip4/pwm2";
static char PWM_export_path[] = "/sys/class/pwm/pwmchip4/export";
static char PWM_period_path[] = "/sys/class/pwm/pwmchip4/pwm2/period";
static char PWM_duty_cycle_path[] = "/sys/class/pwm/pwmchip4/pwm2/duty_cycle";
static char PWM_polarity_path[] = "/sys/class/pwm/pwmchip4/pwm2/polarity";
static char PWM_enable_path[] = "/sys/class/pwm/pwmchip4/pwm2/enable";int main(int argc, char *argv[])
{//检查参数个数if (argc != 3){printf("%s文件的参数个数错误!\n", argv[0]);return -1;}//检查参数char *endptr;//检查参数1是否为纯数字strtol(argv[1], &endptr, 10);if ((endptr == argv[1]) || ((!isspace(*endptr)) && (*endptr != '\0'))){perror("参数错误!\n");return -1;}endptr = NULL;//检查参数2是否为纯数字strtol(argv[2], &endptr, 10);if ((endptr == argv[2]) || ((!isspace(*endptr)) && (*endptr != '\0'))){perror("参数错误!\n");return -1;}//检查参数1的取值范围:>=5int ZhouQi = atol(argv[1]);if (ZhouQi < 5){perror("参数错误!\n");return -1;}//检查参数2的取值范围:0-100int ZhanKongBi = atol(argv[2]);if (ZhanKongBi < 0 || ZhanKongBi > 100){perror("参数错误!\n");return -1;}//检查PWM是否导出int fd;if (access(PWM_path, F_OK)){if (0 > (fd = open(PWM_export_path, O_WRONLY))){perror("文件打开错误!\n");return -1;}if (strlen("2") != (write(fd, "2", strlen("2")))){perror("PWM文件导出错误!\n");return -1;}close(fd);}//配置周期if (0 > (fd = open(PWM_period_path, O_WRONLY))){perror("period文件打开错误!\n");return -1;}char str[100];sprintf(str, "%d", ZhouQi * 1000);if (strlen(str) != write(fd, str, strlen(str))){perror("配置周期错误!\n");return -1;}close(fd);//配置占空比if (0 > (fd = open(PWM_duty_cycle_path, O_WRONLY))){perror("duty_cycle文件打开错误!\n");return -1;}sprintf(str, "%d", ZhouQi * 10 * ZhanKongBi );if (strlen(str) != write(fd, str, strlen(str))){perror("配置占空比错误!\n");return -1;}close(fd);//配置极性if (0 > (fd = open(PWM_polarity_path, O_WRONLY))){perror("polarity文件打开错误!\n");return -1;}if (strlen("normal") != write(fd, "normal", strlen("normal"))){perror("配置极性错误!\n");return -1;}close(fd);//使能if (0 > (fd = open(PWM_enable_path, O_WRONLY))){perror("enable文件打开错误!\n");return -1;}if (strlen("1") != write(fd, "1", strlen("1"))){perror("使能错误!\n");return -1;}close(fd);return 0;
}

启动交叉编译工具

source /opt/st/stm32mp1/3.1-snapshot/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

编译

${CC} -o 3_PWM_1 3_PWM_1.c

拷贝到开发板

scp 3_PWM_1 root@10.3.22.219:/home/root/Linux_C_YingYong_BianCheng/JiaoCheng/3_PWM/

 

测试

输出周期为1ms,占空比为30%的PWM。

./3_PWM_1 1000 30

http://www.lryc.cn/news/31627.html

相关文章:

  • 基于Python的selenium
  • Go底层原理:一起来唠唠GMP调度(一)
  • 前端——1.相关概念
  • java四种线程池(基本使用)
  • float的表示范围为什么比long大
  • Flutter Android 打包保姆式全流程 2023 版
  • C++笔记之lambda表达式
  • flink大数据处理流式计算详解
  • Java面试题(二十三)DCL单例
  • UML-类图
  • PostgreSQL 数据库和 pgAdmin 4
  • quarkus 搭建与基础开发环境配置总结
  • 扩散模型DDPM开源代码的剖析【对应公式与作者给的开源项目,diffusion model】
  • C语言 学生记录管理系统
  • 【独家】华为OD机试 C 语言解题 - 交换字符
  • 网络安全平台测试赛 easyphp(phar脏数据处理)
  • 【python】XML格式文件读写详解
  • 理解js的精度问题
  • 蓝桥杯 时间显示
  • qt中设置菜单高度
  • 测开:前端基础-css页面布局-定位
  • Servlet中八个监听器介绍
  • LicenseBox Crack,对服务器的要求最低
  • css中重难点整理(vertical-align)
  • javaScript基础面试题 ---宏任务微任务
  • 基于JSP的网上书城
  • C#教程 05 常量
  • 【华为OD机试真题java、python】基站维修工程师【2022 Q4 100分】(100%通过)
  • 你是真的“C”——为冒泡排序升级赋能!
  • 【JavaEE】基于mysql与servlet自制简易的表白墙程序