蜂鸣器
蜂鸣器子系统提供统一的 API 来驱动蜂鸣器硬件,无论底层器件是由 PWM 通道驱动的无源压电蜂鸣器,还是由单根 GPIO 信号线控制的有源蜂鸣器。
基本操作
应用通过 Devicetree 获取蜂鸣器设备,并通过 include/zephyr/drivers/buzzer.h 中的函数驱动该设备:
蜂鸣器 API 调用不会等待请求的音调持续时间结束。持续时间表示硬件应持续发声的时长,而非调用线程应休眠的时长;使用 BUZZER_DURATION_FOREVER 可持续播放,直到显式停止。
buzzer_tone()以指定频率播放指定时长的音调。硬件会在请求的持续时间内保持发声,随后由驱动程序自动停止发声。buzzer_beep()以蜂鸣器的固有工作频率发声,该频率由开发板文件中的pwmsDevicetree 属性的周期单元编码(通常为压电器件的机械谐振频率,此时器件发出的声音最响)。对于有源蜂鸣器,此调用等效于将 GPIO 信号线置为有效状态,因为实际音高由硬件振荡器决定。buzzer_set_volume()调整感知响度。零值会立即静音;非零值会被保存,并在下一次播放音调时应用。有源蜂鸣器不具备模拟音量控制功能,因此将零值映射为静音,将任意非零值映射为其唯一的发声音量。buzzer_stop()立即取消正在播放的音调。
后端
提供以下两种可通过 Devicetree 发现的后端:
pwm-buzzer用于由 PWM 通道驱动的无源压电蜂鸣器。PWM 通道的周期决定音频频率,占空比决定感知音量;驱动程序根据应用请求的音调和音量计算这两个参数。gpio-buzzer用于通过单根 GPIO 信号线驱动的有源蜂鸣器。对于任意非零频率,驱动程序将信号线置为有效状态;对于BUZZER_FREQ_REST,则将其置为无效状态。