• 正点原子嵌入式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 };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    第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的高低电平控制。

  • 相关阅读:
    Excel中输入整数却总是显示小数,如何调整?
    JavaScript --Set对象及常用方法总结
    【流水线】FPGA中流水线的原因和方法
    LeetCode 242.有效的字母异位词 ,349 两个数组的交集 202. 快乐数 1. 两数之和
    node 第十天 原生node封装一个简易的服务器
    20 - 欲知JVM调优先了解JVM内存模型
    固定资产管理系统的作用有哪些
    6款好用到爆的神级电脑软件,个个让人相见恨晚,堪称办公必备
    程序编译过程(扫盲贴)
    VSCode错误整理
  • 原文地址:https://blog.csdn.net/xhj12138/article/details/133908241