蜂鸣器实验
硬件分析

代码分析
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种响一次。