一.蜂鸣器介绍
我现在这个蜂鸣器是有缘蜂鸣器,只能发出一种声音。而且是低电平触发(根据你们自己的蜂鸣器决定),现在我要做的一个实验就是蜂鸣器响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。最后谢谢大家阅读。