本帖最后由 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,蜂鸣器响度明显增大。 
 |   
- 
 
 
 
- 
连接图 
 
 
 
 
     
  
 |