构建驱动模块5--STM32 蜂鸣器驱动

构建驱动模块5--STM32 蜂鸣器驱动

 一、硬件原理图:

       蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。主要分为有源和无源,注意,这里的“源”不是指电源,而是指震荡源。有源的蜂鸣器里面带有驱动电路,只要通电就响,而无源蜂鸣器需要特有频率驱动,本程序设计一个最简单的有源蜂鸣器驱动程序。  其硬件连接如下:

二、蜂鸣器驱动程序

1、蜂鸣器设备初始化,本驱动的硬件接口为单总线接口,因为蜂鸣器只需要一个IO口就行了,所以可以通过singbus操作蜂鸣器。

 
void beephardwareInit(ht_int8_t *name,ht_int16_t devno)
{
  char str[64];
	beep_dev=(ht_device_t) cmMalloc(sizeof(struct ht_device) );
	 if(beep_dev==NULL)
	{
		cmFault(SYS_ERROR_MEMMALLOC_ABNORMAL,RECORD_FLAG);
	}
	 
  ht_printk("Cfg Beep Dev<%s-%d>\r\n",name,devno);
  cmMemset(beep_dev,0,sizeof(struct ht_device));
	beep_dev -> open = bspbeepOpen;
	beep_dev -> close = bspbeepClose;
	beep_dev -> read = NULL;
	beep_dev->control = bspbeepdevctl;
	beep_dev->help = beephelp;
	beep_dev->write = NULL;
	beep_dev->user_privatedata = NULL;
	beep_dev->del=bspbeepdel;
	sprintf(str,"%s-%d",name,devno);
	if(SinglehardwareInit("singbus",devno)>0)
	{
  htDevFsRegister( beep_dev,str);
	htDevFsAssociated(beep_dev,"singbus",devno);
 
	}
	else
	{
		cmFree(beep_dev);
	}
	
}

2、实现蜂鸣器操作,主要通过bspbeepdevctl实现,在该函数里调用sigGpio->Single_DATA_OUT(cmd);接口就行了。

 
 /**********************************************************************************************************
 *
 *  函数名:bspbeepOpen
 *  功 能:
 *  参  数:
 *  返回值:
 *  版 本:REV1.0.0     
 *
 **********************************************************************************************************/
 
ht_inline ht_int32_t  bspbeepOpen  (ht_device_t dev, ht_uint32_t oflag)
{
     
	sigGpio	=(single_driver_t*) dev->ChidNode;
	if(sigGpio==NULL)
	{
		return -1;
	}
 
	return HT_EOK;
	 
}
 /**********************************************************************************************************
 *
 *  函数名:bspbeepClose
 *  功 能:
 *  参  数:
 *  返回值:
 *  版 本:REV1.0.0     
 *
 **********************************************************************************************************/
 
ht_inline ht_int32_t bspbeepClose (ht_device_t dev)
{
		if(sigGpio!=NULL)sigGpio=NULL;
	return HT_EOK;
}

 /**********************************************************************************************************
 *
 *  函数名:bspbeepdevctl
 *  功 能:
 *  参  数:
 *  返回值:
 *  版 本:REV1.0.0     
 *
 **********************************************************************************************************/
 
 ht_inline ht_int32_t  bspbeepdevctl(ht_device_t dev, ht_uint8_t cmd, void *args)
 {
	 ht_err_t iResult=1;
   sigGpio->Single_DATA_OUT(cmd);
	 
	 return iResult;
 }
 
 /**********************************************************************************************************
 *
 *  函数名:ht_beeptest
 *  功 能:
 *  参  数:
 *  返回值:
 *  版 本:REV1.0.0     
 *beeptest beep
 **********************************************************************************************************/
 	ht_int32_t  beephelp   (ht_device_t dev, ht_int8_t argc, ht_int8_t * argv[])
{
	int arg=0,i;
	htDevFsHandle fd;
	ht_uint8_t buffer[2];
	ht_uint16_t temp;
	if(arg<=argc)
	{
		if (strcmp((char const *) argv[2], "test")==0)
		{
		ht_printk("devname %s\r\n",argv[1]);
		fd=htDevFsOpen( argv[1],0);
		if(fd!=NULL)
		{
			 
			for(i=0;i<8;i++)
			{
				OSTimeDlyHMSM(0,0,0,100);
		    htDevFsControl(fd,1,NULL);
				ht_printk("BEEP ON\r\n");
				OSTimeDlyHMSM(0,0,0,100);
			 htDevFsControl(fd,0,NULL);
				ht_printk("BEEP OFF\r\n");
		}
		 
       htDevFsClose(fd);	
   		
		}
		else
		{
			ht_printk("can not find dev\r\n");
		}
	}
}
 	
}
 

3、测试结果:

展开阅读全文

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