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配置蜂鸣器
1166 0
stm32f407探索者开发板(七)——蜂鸣器实验
stm32f407探索者开发板(七)——蜂鸣器实验
245 0
stm32f407探索者开发板(七)——蜂鸣器实验
|
传感器
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
701 0
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32:光敏电阻控制蜂鸣器
STM32:光敏电阻控制蜂鸣器
364 0
STM32:光敏电阻控制蜂鸣器
STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
396 0
STM32:GPIO控制蜂鸣器部分(只写主函数代码部分+代码注释)
【STM32 .Net MF开发板学习-06】蜂鸣器和LED数码管显示
无论是蜂鸣器还是LED数码管显示,其实这二者对代码编写来说没有太大区别,都是GPIO的一个典型应用。红牛开发板有一个蜂鸣器,而EM-STM3210E有一个四位LED数码管,代码都相对简单,不值的为二者单独写一篇博文,所以二者合一以一篇文章来说明,不过两个示例代码是独立的。
671 0
|
5月前
使用STM32F103标准库实现定时器控制LED点亮和关闭
通过这篇博客,我们学习了如何使用STM32F103标准库,通过定时器来控制LED的点亮和关闭。我们配置了定时器中断,并在中断处理函数中实现了LED状态的切换。这是一个基础且实用的例子,适合初学者了解STM32定时器和中断的使用。 希望这篇博客对你有所帮助。如果有任何问题或建议,欢迎在评论区留言。
440 2
|
4月前
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
stm32f407探索者开发板(十七)——串口寄存器库函数配置方法
711 0
|
5月前
|
IDE 开发工具
使用STM32F103标准库实现自定义键盘
通过本文,我们学习了如何使用STM32F103标准库实现一个简单的自定义键盘。我们首先初始化了GPIO引脚,然后实现了一个扫描函数来检测按键状态。这个项目不仅能够帮助我们理解STM32的GPIO配置和按键扫描原理,还可以作为进一步学习中断处理和低功耗设计的基础。希望本文对你有所帮助,祝你在嵌入式开发的道路上不断进步!
508 4