用micropython 操作stm32f4单片机的定时器实现蜂鸣器驱动
import pyb
import time
# 初始化引脚和定时器通道作为PWM输出
# 注意:这里我们假设您使用的是支持PWM的引脚和定时器
# 在不同的MicroPython板上,支持的引脚和定时器可能不同
# 请查阅您的板的文档以确认正确的引脚和定时器
buzzer_pin = pyb.Pin('PD15', pyb.Pin.OUT) # 假设PD15引脚支持PWM
tim = pyb.Timer(4, freq=2000) # 设置定时器4的频率为2000Hz
ch = tim.channel(4, pyb.Timer.PWM, pin=buzzer_pin) # 创建PWM通道
# 控制蜂鸣器发声的函数
def beep(duty_percent, on_time_ms, off_time_ms, repeat):
# duty_percent 是占空比的百分比,范围从0到100
for _ in range(repeat):
# 开启蜂鸣器
# 注意:pyb.Timer.channel的pulse_width_percent()接受0到100的百分比值
ch.pulse_width_percent(duty_percent)
time.sleep_ms(on_time_ms)
# 关闭蜂鸣器(通过设置占空比为0)
ch.pulse_width_percent(0)
time.sleep_ms(off_time_ms)
# 示例调用:蜂鸣器以50%占空比,100ms开启,100ms关闭的模式重复发声3次
beep(50, 100, 100, 20)
下面对其封装
# buzzer.py -- put your Buzzer class code here!
import pyb
import time
class Buzzer:
def __init__(self, pin_name, timer_num, channel_num, freq=2000):
# 初始化引脚和定时器通道作为PWM输出
self.pin = pyb.Pin(pin_name, pyb.Pin.OUT)
self.timer = pyb.Timer(timer_num, freq=freq)
self.pwm_channel = self.timer.channel(channel_num, pyb.Timer.PWM, pin=self.pin)
def beep(self, duty_percent, on_time_ms, off_time_ms, repeat):
# 控制蜂鸣器发声的函数
# duty_percent 是占空比的百分比,范围从0到100
for _ in range(repeat):
# 开启蜂鸣器
self.pwm_channel.pulse_width_percent(duty_percent)
time.sleep_ms(on_time_ms)
# 关闭蜂鸣器(通过设置占空比为0)
self.pwm_channel.pulse_width_percent(0)
time.sleep_ms(off_time_ms)
主函数:
from buzzer import Buzzer
if __name__ == "__main__":
# 初始化Buzzer对象
buzzer = Buzzer('PE11', 1, 2) # 假设PE11引脚支持PWM,使用定时器1和通道2
# while True:
# 示例调用:蜂鸣器以60%占空比,100ms开启,100ms关闭的模式重复发声20次
buzzer.beep(60, 100, 100, 3) # 注意这里添加了闭合的括号)