STM32控制蜂鸣器间隔发出声音(响1s,关闭1s)

简介: STM32控制蜂鸣器间隔发出声音(响1s,关闭1s)

一.蜂鸣器介绍

我现在这个蜂鸣器是有缘蜂鸣器,只能发出一种声音。而且是低电平触发(根据你们自己的蜂鸣器决定),现在我要做的一个实验就是蜂鸣器响1s,关闭1s。实现间隔的发出声音。

二 代码讲解

这里我使用的是定时器6进行计时。

2.1 初始化蜂鸣器引脚

我这边蜂鸣器对应的引脚是GPIOA_Pin_8

void Buzzer_GPIO_Configuration(void)
{ 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  GPIO_InitTypeDef GPIO_InitStructure;
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
}

2.2 配置中断优先级和定时器

static void TIME6_NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3 ;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  NVIC_Init(&NVIC_InitStructure);
}
static void TIME6_cfg(void)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  //允许TIM6的时钟
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);
  //初始化Timer
  TIM_DeInit(TIM6);
  //采用内部时钟给TIM2提供时钟源
  //TIM_InternalClockConfig(TIM6);
  //预分频系数为71,这样计数器时钟为72MHz/72= 1us
  TIM_TimeBaseStructure.TIM_Prescaler = 72 -1;
  //设置时钟分割
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  //设置计数器模式为向上计数模式
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  //设置计数溢出大小,每计1000个数就产生一个更新事件  1ms
  TIM_TimeBaseStructure.TIM_Period = 1000-1;//
  //将配置应用到TIM6中
  TIM_TimeBaseInit(TIM6,&TIM_TimeBaseStructure);
  //清除溢出中断标志
  TIM_ClearFlag(TIM6, TIM_FLAG_Update);
  //禁止ARR预装载缓冲器
  TIM_ARRPreloadConfig(TIM6, ENABLE);
  //开启TIM6的中断
  TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE);
}

2.3 中断处理

void TIM6_IRQHandler(void)
{
  static int data=0;
   //检测是否发生溢出更新事件
   if(TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)
   {        
     //清除TIM6的中断待处理位
     TIM_ClearITPendingBit(TIM6 , TIM_FLAG_Update);
         data++;
        if(data>=2000)
      {
        data=0;
      }
       if(data<=1000)
       {
    GPIO_ResetBits(GPIOA ,GPIO_Pin_8);
       }
       else 
       {
           GPIO_SetBits(GPIOA ,GPIO_Pin_8);
       }
     }
}

2.4 main 函数

void main()
{
TIME6_NVIC_Configuration();
//引脚初始化
Buzzer_GPIO_Configuration();
TIME6_cfg();  
//开启定时6
TIM_Cmd(TIM6,ENABLE);
while(1);
}

三.结语

代码也不算多,到这里就结束了,如果你想修改间隔值,就直接修改中断里面data的值就可以了。这个代码只是一个demo。最后谢谢大家阅读。


目录
相关文章
|
编译器
stm32使用CubeMx配置蜂鸣器
stm32使用CubeMx配置蜂鸣器
294 0
stm32f407探索者开发板(七)——蜂鸣器实验
stm32f407探索者开发板(七)——蜂鸣器实验
179 0
stm32f407探索者开发板(七)——蜂鸣器实验
|
传感器
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
543 0
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32:光敏电阻控制蜂鸣器
STM32:光敏电阻控制蜂鸣器
305 0
STM32:光敏电阻控制蜂鸣器
STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
131 0
STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
【STM32 .Net MF开发板学习-06】蜂鸣器和LED数码管显示
无论是蜂鸣器还是LED数码管显示,其实这二者对代码编写来说没有太大区别,都是GPIO的一个典型应用。红牛开发板有一个蜂鸣器,而EM-STM3210E有一个四位LED数码管,代码都相对简单,不值的为二者单独写一篇博文,所以二者合一以一篇文章来说明,不过两个示例代码是独立的。
632 0
|
1月前
【STM32】基于HAL库的360度编码器、摇杆代码编写
【STM32】基于HAL库的360度编码器、摇杆代码编写
|
3月前
|
C++ 芯片 编译器
STM32F103标准外设库—— 新建工程与库函数(四)
STM32F103标准外设库—— 新建工程与库函数(四)
49 0
STM32F103标准外设库—— 新建工程与库函数(四)
|
3月前
|
传感器 芯片 内存技术
STM32F103标准外设库——认识STM32(一)
STM32F103标准外设库——认识STM32(一)
112 0
STM32F103标准外设库——认识STM32(一)