STM32控制蜂鸣器

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u011046042/article/details/52267306


main.c具体的代码如下

/*----------------------------------------------------------------------------------
功能描述:普通延时控制LED2闪烁,间隔250ms,定时器控制蜂鸣器和LED3
硬件平台:STM32F103 开发板
作者	:求是07
固件库  :V3.5
-----------------------------------------------------------------------------------*/
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "led.h"
#include "delay.h"
#include "key.h"
#include "timer.h"
#include "beep.h"

uint8_t BeepFlag=1;

int main(void)
{
	
	LED_Init();//LED初始化
  <span style="white-space:pre">	</span>KEY_Init();//按键初始化
  <span style="white-space:pre">	</span>SysTick_Init();//延时初始化
	BEEP_Init();   //蜂鸣器初始化
	TIM2_Base_Init(1000);//10Khz的计数频率,计数到1000为100ms  
  <span style="white-space:pre">	</span>while(1)
	{
		Delay_ms(250);		  
		LED2_REV;		
	}
}

void TIM2_IRQHandler(void)   //TIM2中断
{ 
	static uint8_t i;
	if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
	{
		TIM_ClearITPendingBit(TIM2, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源 
		if(BeepFlag)	
		   BEEP_REV; //取反蜂鸣器
		else
			 BEEP_OFF;
		i++;
		if(i==20)
		{
			BeepFlag=!BeepFlag;
			LED3_REV;
			i=0;
		}
	}
}

蜂鸣器的原理图如下

beep.c的源代码如下:
<pre name="code" class="cpp">/*-------------------------------------------------------------------------------
文件名称:beep.c
文件描述:根据硬件连接配置蜂鸣器端口,打开对应的寄存器        
备    注:无
---------------------------------------------------------------------------------*/
#include "beep.h"
/*-------------------------------------------------------------------------------
程序名称:BEEP_Init
程序描述:初始化BEEP相关端口,打开端口时钟,配置端口输出  
输入参数:无
返回参数:无
备    注:无
---------------------------------------------------------------------------------*/
void BEEP_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  //打开PB口时钟
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
	//PB8引脚设置
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
	//端口速度
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	//端口模式,此为输出推挽模式
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	//初始化对应的端口
  GPIO_Init(GPIOB, &GPIO_InitStructure);

}
其中的一些宏定义:


#define BEEP_ON GPIO_SetBits(GPIOB,GPIO_Pin_8)
#define BEEP_OFF GPIO_ResetBits(GPIOB,GPIO_Pin_8)
#define BEEP_REV GPIO_WriteBit(GPIOB, GPIO_Pin_8,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8))))


使用库函数比较方便 

展开阅读全文

没有更多推荐了,返回首页