解决IMX6ULL GPIO扩展板PWM7/8中的pwm0/period后卡死问题

news2024/11/25 4:58:30

前言

本篇文章主要是记录解决百问网论坛上面设置 IMX6ULL GPIO扩展板PWM7/8中的pwm0/period后卡死问题,如下图:

一、查看原理图,找出对应引脚

在这里我们如何确定哪个扩展口中的引脚输出PWM波呢?我们可以通过查看原理图。

查看扩展板的原理图,并且与底板的原理图对照,弄清楚每个扩展引脚对应的功能,将来可以查看该引脚的其他复用功能是否可以设置为PWM输出。

底部扩展接口原理图:

由图可知gpio_io20gpio_io19分别对应的是csi_vsync以及csi_hsync

扩展版原理图:

由图可知gpio_io20gpio_io19分别对应扩展版J1 5 接口

利用官方NXP的工具i.MX pins v6,此工具能够查看芯片所支持外设对应的引脚,此工具仅支持为包含电气特性配置(与所有引脚信号相关的)的器件配置引脚路由配置,并创建可用于初始化的源代码,通过寄存器直接初始化或 SDK API 代码和/或器件树代码段(如果支持)的方式。本小节主要利用此工具查看PWM外设所路由到的引脚,也就是说PWM能通过什么引脚哪个引脚输出。

在这里参考大佬文章:使用imx6ull开发板输出PWM波(100ask)_imx6ull pwm-CSDN博客

可以得出只有gpio_io20gpio_io19这两路GPIO有专门的PWM波功能。

二、修改和编译设备树

进入设备树目录,执行以下命令进入

cd ~/100ask_imx6ull-sdk/Linux-4.9.88/arch/arm/boot/dts

修改对应设备树文件(一共两个,现在是第一个):

vi 100ask_imx6ull-14x14.dts

​​

添加上图框起来的部分:

&pwm7 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm7>;
        status = "okay";
};

&pwm8 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_pwm8>;
        status = "okay";
};
pinctrl_pwm7: pwm7grp {
            fsl,pins = <
                MX6UL_PAD_CSI_VSYNC__PWM7_OUT   0x000010B0
            >;
 
        };
pinctrl_pwm8: pwm8grp {
            fsl,pins = <
                MX6UL_PAD_CSI_HSYNC__PWM8_OUT   0x000010B0
            >;
 
        };

修改第二个文件:

vi imx6ull.dtsi

如图,pwm默认时钟配置都一样,在这里我们将pwm7中的时钟配置改成 CLK_PWM7,pwm8中的时钟配置改成 CLK_PWM8。

然后我们就编译设备树了:

cd ~/100ask_imx6ull-sdk/Linux-4.9.88/
make dtbs

三、通过SG90舵机进行上机测试

将上面编译好的设备树文件 100ask_imx6ull-14x14.dtb 复制到开发板,可以通过挂载 Ubuntu NFS 目录。

具体操作可看:开发板挂载 Ubuntu 的 NFS 目录_开发板nfs挂载ubuntu-CSDN博客

Ubuntu 操作

cd ~/100ask_imx6ull-sdk/Linux-4.9.88/arch/arm/boot/dts
cp 100ask_imx6ull-14x14.dtb ~/nfs_rootfs/

开发板操作:

mount -t nfs -o nolock,vers=3 192.168.5.11:/home/book/nfs_rootfs /mnt
cp /mnt/100ask_imx6ull-14x14.dtb /boot
sync
reboot

在Linux中,sync命令用于将内存中的数据同步至硬盘

这个命令确保所有未写入硬盘的缓冲区数据被立即写入,从而防止数据丢失。操作系统通常会使用内存缓冲区来暂存要写入硬盘的数据,以提高写入效率。不过,这也带来了数据安全风险,因为如果系统突然断电或发生故障,未及时写入硬盘的数据将会丢失。

接着我们在开发板上操作:测试PWM7

[root@100ask:~]# cd /sys/class/pwm
 
//看看这个目录下有什么
root@100ask:/sys/class/pwm]# ls
pwmchip0  pwmchip1  pwmchip2  pwmchip3  pwmchip4  pwmchip5  pwmchip6  pwmchip7
 
//由于我们选择的是pwm7,然后pwm控制器pwmchip0对应pwm1,所以我们pwm7对应pwmchip6
root@100ask:/sys/class/pwm]# cd pwmchip6
 
//调出pwm0目录下设备节点
root@100ask:/sys/class/pwm/pwmchip6]# echo 0 > export
 
//注意,一定要先配置好pwm的周期和占空比才能使能pwm
//配置周期
[root@100ask:/sys/class/pwm/pwmchip6]# echo 20000000 > pwm0/period
 
//配置占空比,高电平时间
root@100ask:/sys/class/pwm/pwmchip6]# echo 1000000 > pwm0/duty_cycle
 
//最后使能pwm
root@100ask:/sys/class/pwm/pwmchip6]# echo 1 > pwm0/enable

接着就可以直接连续修改占空比控制舵机反复运动了。测试,连续输入:

[root@100ask:/sys/class/pwm/pwmchip6]# echo 1200000 > pwm0/duty_cycle
[root@100ask:/sys/class/pwm/pwmchip6]# echo 800000 > pwm0/duty_cycle

同理,测试PWM8的话,PWM8对应pwmchip7,改一下对应参数即可。

测试结果我们可以通过连接舵机模块,具体可看:

STM32—PWM开发SG90舵机_stm32舵机pwm设置-CSDN博客

如图:连接两个舵机,可以分别测试PWM7和PWM8,控制两个舵机不同角度转动。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1862000.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java】解决Java报错:IllegalMonitorStateException in Synchronization

文章目录 引言一、IllegalMonitorStateException的定义与概述1. 什么是IllegalMonitorStateException&#xff1f;2. IllegalMonitorStateException的常见触发场景3. 示例代码 二、解决方案1. 确保在同步代码块或方法中调用wait()、notify()和notifyAll()2. 使用同步方法3. 使用…

办公人导航-上网导航,找网站,下软件,找资源!

办公人导航是一个专门为办公人员设计的实用导航网站&#xff0c;旨在帮助用户高效地找到各种优质的办公资源和工具。无论是需要查找办公软件、学习资源还是娱乐工具&#xff0c;在办公人导航上都能找到你需要的内容。 办公人导航-实用的办公生活导航网站&#xff01;https://ww…

Linux内核测试技术

Linux 内核是Linux操作系统的核心部分&#xff0c;负责管理硬件资源和提供系统调用接口。随着 Linux 内核的不断发展和更新&#xff0c;其复杂性和代码规模也在不断增加。因此&#xff0c;确保内核的稳定性和可靠性变得尤为重要。内核测试技术是实现这一目标的关键手段。本文将…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图,需要使用Java生成一个图片, 并以base64编码的形式返回给前端展示。 使用Graphics2D类,来进行画图,其中需要画方框、原型、插入图标、写入文字等,同时需要设置透明度等细节点 环境:Jdk17,springboot2.7.13 代码如下 有详细的注释 package com.demo;import c…

白帽子的海外第一单,750刀

国际惯例&#xff0c;给兄弟们看图 这是我们师傅挖国外SRC的部分赏金截图 就问你&#xff01;挖国外漏洞赚美金香不香&#xff01; 现在国内SRC越来越卷了&#xff0c;越来越多的白帽子开始挖海外漏洞赚美金。海外SRC真的比国内赏金高很多&#xff0c;不说高危漏洞&#xff0…

自编码器笔记

编码器解码器自编码器 先压缩特征&#xff0c;再通过特征还原。 判断还原的和原来的是否相等 encode data 在一个“潜在空间”里。它的用途是“深度学习”的核心-学习数据的特征并简化数据表示形式以寻找模式。 变分自编码器&#xff1a; 1. 首先、假设输入数据是符合正态分布…

《mnist_model.h5》在flask中加载mnist模型

一、在tensorflow中新建及保存模型 启动Jupyter Notebook 新建Notebook 代码 from flask import Flask, request, jsonify # type: ignore import numpy as np # type: ignore import tensorflow as tf # type: ignore import json from PIL import Image # type: i…

bigtop gradle 任务依赖关系

./gradlew deb 会编译ubuntu的所有deb包 任务deb会依赖17个任务&#xff0c;它们会按字母排序执行&#xff0c;如下&#xff1a; alluxio-deb bigtop-groovy-deb bigtop-jsvc-deb bigtop-utils-deb flink-deb hadoop-deb hbase-deb hive-deb kafka-deb livy-deb phoenix-deb …

React 19 新特性集合

前言&#xff1a;https://juejin.cn/post/7337207433868197915 新 React 版本信息 伴随 React v19 Beta 的发布&#xff0c;React v18.3 也一并发布。 React v18.3相比最后一个 React v18 的版本 v18.2 &#xff0c;v18.3 添加了一些警告提示&#xff0c;便于尽早发现问题&a…

51单片机STC89C52RC——8.1 8*8 LED点阵模块(点亮一个LED)

目录 目的/效果 一&#xff0c;STC单片机模块 二&#xff0c;8*8 LED点阵模块 2.1 电路图 2.1.1 8*8 点阵模块电路图 2.1.2 74HC595&#xff08;串转并&#xff09;模块 电路图 2.1.3 芯片引脚 2.2 引脚电平分析 2.3 74HC595 串转并模块 2.3.1 装弹&#xff08;移位…

强化学习专题:强化学习知识梳理(一)

2024/6/23&#xff1a; 前段时间有幸完成了大学期间的第一篇论文。在面试之前复盘一下关于自己论文中DQN的一些相关点。 浅谈主要区别&#xff08;在线 or 离线&#xff09; 首先&#xff0c;一切的开始是强化学习中时序差分方程&#xff0c;这体现了强化学习方法的优化策略。在…

【MySQL进阶之路 | 高级篇】MySQL8.0索引新特性->降序索引与隐藏索引

1. 支持降序索引 降序索引以降序存储键值.虽然在语法上&#xff0c;从MySQL4版本已经支持降序索引的语法了&#xff0c;但实际上该DESC定义是被忽略的.知道MySQL8.x版本才开始真正支持降序索引.(仅限于InnoDB存储引擎). MySQL在8.0版本前创建的仍然是升序索引&#xff0c;使用…

PADS系列:如何导入元件库新建元件

对于普通的原理图&#xff0c;位置的摆放是比较随意的&#xff0c;并且也没有一些特殊的或者元件库里面没有的元件&#xff0c;相对来说绘制会比较简单。但是如果碰上复杂一点的电路&#xff0c;要绘制起来就会比较麻烦&#xff0c;需要一些新的PADS使用技巧&#xff0c;最基础…

云计算考试题

Cloud ❀ 云计算-虚拟化常见的两种架构_裸金属架构和宿主型架构的区别-CSDN博客 为啥要成2 11 bcd 16 acd abcd BCD NAS为啥支持文件存储的协议 选BCD 什么是网络文件系统 选bcd 错题 选abc 选bcd 选 abd

NetSuite Account Merge 科目合并功能分析

最近项目中&#xff0c;客户有提到过能否将不用的Account与新建的Account进行合并&#xff0c;即我们所说的Merge功能&#xff5e;可以&#xff0c;但是该功能有使用的限制&#xff0c;比如最直接的一点需要注意&#xff0c;不同类型的Account是不可以使用Merge功能的&#xff…

c++内存管理_复习

new与placement new new&#xff1a; 先调用operator new(大小)&#xff0c;而operator new()会调用malloc尝试分配内存&#xff0c;失败则调用_callnewh()来释放内存&#xff0c;直至分配成功 可以设置分配失败的处理函数&#xff1a;将写好的处理函数作为参数传入set_new_han…

一文2000字记录基于jmeter+perfmon的稳定性测试

01、任务情况 1、任务总览 本次平台稳定性测试的目的在于&#xff1a;在服务器压力处于较饱和&#xff08;达到80%系统最大TPS&#xff09;压力之下&#xff0c;在较长时间&#xff08;>8小时&#xff09;之内观测服务器稳定性问题&#xff0c;以及资源使用情况和异常。 …

清科ZF引导基金数据(1990-2023年)

清科ZF引导基金数据&#xff0c;参考经济学家吴超鹏和严泽浩在《经济研究》2023年的研究&#xff0c;通过清科私募通数据库&#xff0c;获取ZF引导基金的管理机构信息。数据涵盖了ZF引导基金的关键信息&#xff0c;如基金名称、管理机构详情、所属层级、发展阶段、地域分布、初…

渗透测试之SQL注入

渗透测试之SQL注入 1. SQL注入分类 按照攻击类型分为&#xff1a;联合查询注入、布尔注入、时间延迟注入、报错型注入、堆叠型注入等 按照注入位置分为&#xff1a;HTTP头注入、请求参数注入等 按照数据库场景分为&#xff1a;MySQL注入、MSSQL注入、Oracle场景注入 1. My…

【D3.js in Action 3 精译】1.1.2 D3.js 的适用场景

译注 上一节中我们了解了 D3 诞生的技术背景——为了满足 Web 可访问数据的可视化需求。本节再来看看 D3.js 的适用场景是怎样的、在什么时候会考虑使用 D3.js。 1.1.2 D3.js 的适用场景 数据可视化领域正蓬勃发展&#xff0c;且备受青睐。过去十年间用于生成数据驱动图形的工…