千家信息网

android中用PWM控制蜂鸣器输出的测试方法是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文小编为大家详细介绍"android中用PWM控制蜂鸣器输出的测试方法是什么",内容详细,步骤清晰,细节处理妥当,希望这篇"android中用PWM控制蜂鸣器输出的测试方法是什么"文章能帮助大家解决
千家信息网最后更新 2026年11月02日android中用PWM控制蜂鸣器输出的测试方法是什么

本文小编为大家详细介绍"android中用PWM控制蜂鸣器输出的测试方法是什么",内容详细,步骤清晰,细节处理妥当,希望这篇"android中用PWM控制蜂鸣器输出的测试方法是什么"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

基于 QtE 系统。4418MCU 共提供了 5 路 PWM 输出,其中一路未引出,所以共有 4 路可用的 PWM 输出。
注意:本文档中提供的例程,没有注册设备和驱动,只是在驱动入口和出口函数中进行了配置。如果用户需要生成设备节点,则需要自行添加剩余部分,这部分可以参考 GPIO 操作的文档。
1 配置 IO
打开底板电路图,搜索"beep",可以看到 beep 的网络名为"MCU_ISO7816_CLK",如下图所示。

在核心板原理图,搜索该关键词"MCU_ISO7816_CLK",可见其对应 PWM2,如下图所示。

所以,接下来我们便对 PWM2 进行操作。在下面的操作之前,我们需要配置内核,取消内核中 buzzer 的驱动,解除该驱动对蜂鸣器的占用,其目录如下图所示。

将该选项改为未选中状态,如下图所示。

接下来,编译烧写该内核镜像(boot.img)到开发板。再进行下面的操作即可。
2 编写驱动程序
在 linux 内核中有一个规律,Linux 内核开发者把通用的东西都总结出来,个性化的东西就留出接口,和 GPIO 驱动类似,PWM 驱动在内核中也提供了对应的接口函数,内核提供的接口函数声明在 include/linux/pwm.h 中。
//申请一个 PWM 资源
struct pwm_device *pwm_request(int pwm_id, const char *label);
//释放一个 PWM 资源
void pwm_free(struct pwm_device *pwm);
//配置 PWM
int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns);
//使能 PWM,duty_ns 为高电平所用时间,period_ns 整个周期为所用时间,单位为纳秒。
int pwm_enable(struct pwm_device *pwm);
//不使能 PWM
void pwm_disable(struct pwm_device *pwm);
根据以上这些,我们便可以编写一个简单的 pwm 输出程序,来控制蜂鸣器的频率。创建
名称为 4418x_pwm.c 的文件,程序代码如下所示。
#include
#include
#include
#include
#include
#include
#include
#include
#include
/*pwm for this buzzer*/
struct pwm_device *pwm = NULL;
static int __init buzzer_init(void)
{
int ret;
printk(" check buzzer init.\n");
pwm = pwm_request(2, "buzzer");
if ( pwm == NULL ) {
printk("buzzer open error.\n");
}
//printk(KERN_EMERG "pwm_request %d ",pwm);
ret=pwm_config(pwm,100000,200000);//设置了 1000Hz 频率的声音
printk("pwm_config %d ",ret);
printk("pwm_config %d ",ret);
ret=pwm_enable(pwm);
printk("pwm_enable %d ",ret);
printk(KERN_EMERG "done2. \n") ;
return 0;
}
static void __exit buzzer_exit(void)
{
pwm_config(pwm,0,0); //关闭蜂鸣器输出
pwm_disable(pwm); // 关闭 pwm
pwm_free(pwm); // 释放 pwm 资源
}
module_init(buzzer_init);
module_exit(buzzer_exit);
MODULE_DESCRIPTION("pwm_buzzer driver");
MODULE_LICENSE("GPL");
2.2 编写 Makefile
接下来进行编写 Makefile 文件。
export ARCH=arm
obj-m += 4418x_pwm.o
KDIR := /home/topeet/4418/4G/20170914/android/kernel
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o modules.order *.ko *mod.c Module.symvers
脚本中,export ARCH=arm 表示设置目标 CPU 类别为 arm,也就是编译的依赖内核和驱动模块目标 CPU 为 ARM。
obj-m += 4418x_pwm.o 表示编译的源文件为 4418x_pwm.c, 如果源文件名有变化,则需要修改成对应的文件名。
KDIR 参数指向对应的内核源码目录。作者的内核源码是在/home/topeet/4418/4G/20170914/android/kernel 目录下,用户要根据自己的具体情况来修改。
2.3 编译运行
首先设置环境变量,使其在编译时使用源码中的编译器。在源码目录中使用"cdkernel"进入 kernel 目录。然后使用命令"make menuconfig"打开内核缺省配置界面,如下图所示。

进入图中高亮的"General setup",如下图所示。

可以看到图中高亮的文本,描述了当前源码使用的编译器为"arm-eabi-",我们回到源码文件夹,使用命令"find ./ -name arm-eabi-*",可以得到源码中编译器所在路径,如下图所示。

这样,源码编译器的绝对路径为源码所在路径加上上图中红框的路径,在本文中为"/home/topeet/4418/4G/20170914/android/prebuilts/gcc/linux-x86/arm/arm-eabi-4.7/bin/",因为笔者是用 root 登录的,所以打开文件"/root/.bashrc"在里面添加这样一条内容,如下图所示。

接下来,我们便可以进行编译了。
将 Makefile 与 C 程序放在 Ubuntu 系统的同一目录。如下图所示。

在当前目录输入"make"开始编译,生成内核模块文件" 4418x_pwm.ko",如下图所示。

将该内核模块文件拷贝到开发板,接下来在超级终端使用命令"insmod4418x_pwm.ko"加载该模块,如下图所示。

模块加载成功,同时蜂鸣器响起高频声音。然后使用命令"rmmod 4418x_pwm"卸载该驱动,如下图所示。

此时,蜂鸣器停止播放高频声音,PWM 蜂鸣器测试例程到此结束。

读到这里,这篇"android中用PWM控制蜂鸣器输出的测试方法是什么"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

内核 编译 蜂鸣器 源码 驱动 输出 文件 目录 接下来 模块 配置 控制 测试 命令 程序 编译器 路径 中用 方法 内容 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司怎么样 湖南永感互联网科技有限公司 涨乐互联网科技 互联网的科技创新 互联网科技金融公司 广州宏创互联网科技 深圳艾佳互联网科技 撒么互联网科技公司 互联网教育科技公司vipkid 晓花互联网科技有限公司网址 四川慕妮娅互联网科技有限公司 中和天地互联网科技有限公司 群盈汇互联网科技有限公司 怎样加入科技互联网 智帮互联网科技公司最近动向 江苏互联网科技小贷 神州科技互联网有限公司 珠海东科互联网科技有限公司 萌小萌互联网科技河南有限公司 知域互联网科技有限公司官网 广东万易互联网科技有限公司惠州分公司 上海卓越科技互联网 赫美联合互联网科技 长亮科技互联网金融 无锡溥仪互联网科技有限公司 哈尔滨新华互联网科技学院 上海钢联属于互联网科技股吗 有人说阿里系是互联网科技企业 互联网对科技影响 长沙易易互联网科技有限公司
0