正点原子嵌入式linux驱动开发——Linux蜂鸣器

蜂鸣器驱动原理

有源蜂鸣器只要通电就会叫,所以可以做一个供电电路,这个供电电路通过一个IO来控制其通断 ,一般使用三极管来搭建这个电路。

在Linux下编写蜂鸣器驱动就需要以下工作:

  1. 设备树中创建蜂鸣器节点,加入GPIO信息。
  2. 编写驱动程序和测试APP。

硬件原理图分析

蜂鸣器原理图
上图中通过一个PNP型的三极管8550来驱动蜂鸣器,通过PC7这个IO来控制三极管Q1的导通当BEEP输出低电平的时候Q1导通,相当于蜂鸣器的正极连接到3.3V电源, 蜂鸣器形成一个通路,因此蜂鸣器会鸣叫。同理,当BEEP输出高电平的时候Q1不导通,那么蜂鸣器就没有形成一个通路,因此蜂鸣器也就不会鸣叫。

实验程序编写

修改设备树文件

在根节点“/”创建BEEP节点,节点名为“beep”,内容如下:

示例代码26.3.1.1 创建BEEP蜂鸣器节点 
1 beep { 
2     compatible = "alientek,beep"; 
3     status = "okay"; 
4     beep-gpio = <&gpioc 7 GPIO_ACTIVE_HIGH>; 
5 };

第4行,beep-gpio属性指定了蜂鸣器所使用的GPIO。

设备树编写完成以后使用“make dtbs”命令重新编译设备树,然后使用新编译出来的stm32mp157d-atk.dtb文件启动Linux系统。启动成功以后进入“/proc/device-tree”目录中查看“beep”节点是否存在,如果存在的话就说明设备树基本修改成功(具体还要驱动验证)。

蜂鸣器驱动程序编写

这一部分跟之前LED很类似,只是在设备结构体中,改为beep_dev中有一个int beep_gpio代表GPIO编号,然后beep_dev一个beep表示beep设备;其他的操作跟之前的,除了节点的名字换了一下,其他的是一模一样的。

编写测试APP

这个跟之前也基本是一样的,就是对文件的打开、写、关闭等操作。

运行测试

编译驱动程序和测试APP

这个把Makefile中的obj-m换成beep.o就可以了。然后“make -j8”就可以变异了。

APP可以通过如下命令编译:

arm-none-linux-gnueabihf-gcc beepApp.c -o beepApp

运行测试

将之前编译得到的beep.ko和beepApp拷贝到rootfs/lib/modules/5.4.31目录中,然后重启开发板,进入/lib/modules/5.4.31目录,输入如下命令加载gpioled.ko:

depmod //第一次加载驱动的时候需要运行此命令
modprobe beep //加载驱动

加载成功后可以通过如下命令打开和关闭BEEP:

./beepApp /dev/beep 1 //打开蜂鸣器
./beepApp /dev/beep 0 //关闭蜂鸣器

可以通过如下命令卸载驱动:

rmmod beep.ko

总结

就是原理跟LED不太一样,其余的基本都是一样的,说白了就是对GPIO的高低电平控制。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零基础快速上手HarmonyOS ArkTS开发1---运行Hello World、ArkTS开发语言介绍

概述&#xff1a; 在华为开发者大会2023年8月4日(HDC.Together)大会上,HarmonyOS 4正式发布&#xff0c;其实在2021年那会学习了一点鸿蒙的开发&#xff1a; 不过因为现在的鸿蒙手机完全兼容Android应用&#xff0c;所以学习动力也不是很足&#xff0c;一直就搁置了&#xff0…

掌握.NET基础知识(一)

前言 本文将讲解一些.NET基础。NET基础是指在计算机编程中使用.NET框架所需要的基础知识..NET的认识: .NET是由微软开发的一个跨平台的应用程序开发框架。它包括一个运行时环境和一个面向对象的程序库&#xff0c;可以用于开发各种类型的应用程序&#xff0c;包括桌面应用程序、…

抓包工具charles修改请求和返回数据

数据篡改的主要使用场景&#xff1a; &#xff08;1&#xff09;mock场景&#xff0c;mock入参和返回值参数&#xff0c;实现mock测试 &#xff08;2&#xff09;安全测试&#xff0c;对于支付金额等比较重要的字段&#xff0c;可以修改请求参数来进行安全测试 1.首先选择要…

分享一下微信小程序怎么添加成绩查询插件

微信小程序如何添加成绩查询插件 一、引言 微信小程序是一种方便快捷的应用程序&#xff0c;可以在微信中使用。随着教育的不断发展&#xff0c;学校和家长对于学生的成绩查询需求也越来越高。通过在微信小程序中添加成绩查询插件&#xff0c;可以为学生和家长提供更加便捷的…

4-k8s-部署springboot项目简单实践

文章目录 一、部署原理图二、部署实践 一、部署原理图 部门一般都有一个属于自己的私服gitlab服务器&#xff0c;由开发者开发代码&#xff0c;然后上传到私服gitlab然后使用调度工具&#xff0c;如jenkins&#xff0c;去gitlab拉去代码&#xff0c;编译打包&#xff0c;最后得…

openGauss学习笔记-103 openGauss 数据库管理-管理数据库安全-客户端接入之SSL证书管理-证书生成

文章目录 openGauss学习笔记-103 openGauss 数据库管理-管理数据库安全-客户端接入之SSL证书管理-证书生成103.1 操作场景103.2 前提条件103.3 自认证证书生成过程 openGauss学习笔记-103 openGauss 数据库管理-管理数据库安全-客户端接入之SSL证书管理-证书生成 openGauss默认…

Docker 快速入门体验

Docker 是什么&#xff1f; Docker 是一个开源项目&#xff0c;它能够自动化部署应用程序&#xff0c;通过所谓的容器来实现。这些容器允许开发者将自己的应用以及依赖打包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 或 Windows 机器上也可以实现虚拟化。Do…

从Flink的Kafka消费者看算子联合列表状态的使用

背景 算子的联合列表状态是平时使用的比较少的一种状态&#xff0c;本文通过kafka的消费者实现来看一下怎么使用算子列表联合状态 算子联合列表状态 首先我们看一下算子联合列表状态的在进行故障恢复或者从某个保存点进行扩缩容启动应用时状态的恢复情况 算子联合列表状态主…

华为数通方向HCIP-DataCom H12-831题库(单选题:261-280)

第261题 某网络通过部署1S-IS实现全网与通,若在一台IS-IS路由器的某接口下配置命令isis timer holding multiplier 5 level-2,则以下关于该场景的描述,正确的是哪一项? A、该接口Level-2邻居保持时间为5秒 B、该接口Level-1邻居保持时间为30秒 C、该接口为点对点链路接口 …

2022年全网最全最细最流行的自动化测试工具有哪些?

一&#xff1a;前言 随着测试工程师技能和工资待遇的提升&#xff0c;甚至有一部分的开发人员开始转入测试岗位&#xff0c;跨入自动化领域的测试攻城狮越来越多。在自动化测试领域&#xff0c;自动化工具肯定占据了核心的位置。 本文总结了常用的测试自动化工具和框架&#x…

Spring framework Day 23:容器事件

前言 容器事件是 Spring Framework 中的一个重要概念&#xff0c;它提供了一种机制&#xff0c;使我们能够更好地了解和响应 Spring 容器中发生的各种事件。通过容器事件&#xff0c;我们可以在特定的时间点监听和处理容器中的各种状态变化、操作和事件触发&#xff0c;以实现…

超实用!了解github的热门趋势和star排行是必须得!

在当今的技术领域中&#xff0c;GitHub 已经成为了开发者们分享和探索代码的重要平台。作为全球最大的开源社区&#xff0c;GitHub上托管了数以亿计的项目&#xff0c;其中包括了各种各样的技术栈和应用。对于开发者来说&#xff0c;了解GitHub上的热门趋势和star排行是非常重要…