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

蜂鸣器驱动原理

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

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

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

硬件原理图分析

正点原子嵌入式linux驱动开发——Linux蜂鸣器_第1张图片
上图中通过一个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的高低电平控制。

你可能感兴趣的:(linux学习,linux,驱动开发,stm32,笔记,学习)