本帖最后由 muyichuan2012 于 2023-11-16 10:25 编辑
本次主要使用通用定时器TMR2产生PWM输出,驱动无源蜂鸣器。无源蜂鸣器模块正常供电后在IO引脚输入2~5K频率的方波蜂鸣器响,否则不响。
首先是初始化系统时钟和GPIO,对照开发板上的丝印,实际上GPIO_PINS_6和GPIO_PINS_9才对应PWM功能。
void gpio_configuration(void)
{
gpio_init_type gpio_init_struct;
gpio_default_para_init(&gpio_init_struct);
gpio_init_struct.gpio_pins = GPIO_PINS_6 | GPIO_PINS_7 | GPIO_PINS_8 | GPIO_PINS_9;
gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_init(GPIOC, &gpio_init_struct);
}
分频系数
/* compute the prescaler value */
prescalervalue = (uint16_t) ((crm_clocks_freq_struct.apb1_freq * 2) / 12000000) - 1;
默认分频系数计算出的PWM方波频率为220HZ
连接无源器件如图所示
此时PWM方波频率较低,蜂鸣器响度一般,可以修改分频系数,增大方波频率。
/* compute the prescaler value */
// prescalervalue = (uint16_t) ((crm_clocks_freq_struct.apb1_freq * 2) / 12000000) - 1;
prescalervalue = (uint16_t) ((crm_clocks_freq_struct.apb1_freq * 2) / 120000000) - 1;
此时方波频率差不多为2.6KHZ,蜂鸣器响度明显增大。
|