蜂鸣器实验

硬件分析

../../_images/image-20210814204732213.png

代码分析

bsp_beep.c

#include "bsp_beep.h"

/* 所有引脚均使用同样的PAD配置 
* 配置说明 :
* 转换速率: 转换速率慢
* 驱动强度: R0/6 
* 带宽配置 : medium(100MHz)
* 开漏配置: 关闭 
* 拉/保持器配置: 关闭
* 拉/保持器选择: 保持器(上面已关闭,配置无效)
* 上拉/下拉选择: 100K欧姆下拉(上面已关闭,配置无效)
*  滞回器配置: 关闭 
*/  
#define BEEP_PAD_CONFIG_DATA            (SRE_0_SLOW_SLEW_RATE| \
                                        DSE_6_R0_6| \
                                        SPEED_2_MEDIUM_100MHz| \
                                        ODE_0_OPEN_DRAIN_DISABLED| \
                                        PKE_0_PULL_KEEPER_DISABLED| \
                                        PUE_0_KEEPER_SELECTED| \
                                        PUS_0_100K_OHM_PULL_DOWN| \
                                        HYS_0_HYSTERESIS_DISABLED)   


void beep_init(void)
{
    CCM_CCGR1_CG13(0x3);//开启GPIO1的时钟

    /*设置 beep 引脚的复用功能以及PAD属性*/
    IOMUXC_SetPinMux(BEEP_IOMUXC,0);     
    IOMUXC_SetPinConfig(BEEP_IOMUXC, BEEP_PAD_CONFIG_DATA); 

    BEEP_GPIO->GDIR |= (1<<BEEP_GPIO_PIN);  		//设置GPIO1_19为输出模式
    BEEP_GPIO->DR   |= (1<<BEEP_GPIO_PIN);        	//设置GPIO1_19输出电平为高电平



}

bsp_beep.h

#ifndef __BSP_BEEP_H
#define __BSP_BEEP_H

#if defined(__cplusplus)
extern "C" {
#endif  

#include "imx6ul.h"


/* bepp GPIO端口、引脚号及IOMUXC复用宏定义*/
#define BEEP_GPIO                GPIO1
#define BEEP_GPIO_PIN            (19U)
#define BEEP_IOMUXC              IOMUXC_UART1_RTS_B_GPIO1_IO19


#define BEEP_ON()    BEEP_GPIO->DR &= ~(1<<BEEP_GPIO_PIN) // 
#define BEEP_OFF()   BEEP_GPIO->DR |= (1<<BEEP_GPIO_PIN)  // 
#define BEEP_TOG()   BEEP_GPIO->DR ^= (1<<BEEP_GPIO_PIN)  // 

void beep_init(void);
#if defined(__cplusplus)
}
#endif  

#endif 

main.c



int main(void)
{
	clk_enable();		/* 使能所有的时钟 			*/
	rgb_led_init();		/* 初始化led 			*/
	uart_init();		/* 初始化串口,波特率115200 */
  	beep_init();

    printf("BEEP DEMO\r\n");
	while(1)			
	{	
	    BEEP_TOG(); 		/* beep  */
		delay(1000);
		
	}

	return 0;
}

实验现象

编译运行后,可以听见蜂鸣器1s种响一次。