一.蜂鸣器介绍
我现在这个蜂鸣器是有缘蜂鸣器,只能发出一种声音。而且是低电平触发(根据你们自己的蜂鸣器决定),现在我要做的一个实验就是蜂鸣器响1s,关闭1s。实现间隔的发出声音。
二 代码讲解
这里我使用的是定时器6进行计时。
2.1 初始化蜂鸣器引脚
我这边蜂鸣器对应的引脚是GPIOA_Pin_8文章来源:https://www.toymoban.com/news/detail-522562.html
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。最后谢谢大家阅读。文章来源地址https://www.toymoban.com/news/detail-522562.html
到了这里,关于STM32控制蜂鸣器间隔发出声音(响1s,关闭1s)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!