i.MX6ULL终结者蜂鸣器例程程序设计

本实验对应的例程在光盘资料的:i.MX6UL终结者光盘资料\04_裸机例程源码\5_beep 目录下,我们在Ubuntu系统下使用命令“mkdir 5_beep”建立“5_beep”文件夹,如图 1所示。
在这里插入图片描述

图 1

使用命令“cd 5_beep”进入5_beep文件。如图 2所示。
在这里插入图片描述

图 2

然后使用命令“cp -r …/4_led_bsp/* ./”将上一章试验中的所有内容拷贝到刚刚新建的“5_beep”文件夹里面,如图 3。
在这里插入图片描述

图 3

拷贝完成以后的工程如图 4所示。
在这里插入图片描述

图 4

在drivers驱动目录下新建“beep”文件夹。蜂鸣器驱动都放在这个目录下。
使用命令“sudo vi drivers/beep/beep.h”新建“beep.h”文件,如图 5所示。
在这里插入图片描述

图 5

在beep.h里添加如下内容。

  1 #ifndef __BSP_BEEP_H
  2 #define __BSP_BEEP_H
  3 
  4 #include "imx6ul.h"
  5 
  6 
  7 /* 函数声明 */
  8 void beep_init(void);
  9 void beep_switch(int status);
 10 #endif

Beep.h文件里面声明了一些函数,添加后如图 6所示:
在这里插入图片描述

图 6

然后保存并退出,之后使用命令“sudo vi drivers/beep/beep.c”新建beep.c文件。如图 7所示:
在这里插入图片描述

图 7

添加内容如下:

  1 #include "beep.h"
  2 
  3 /*
  4  * @description : 初始化蜂鸣器对应的IO
  5  * @param               : 无
  6  * @return              : 无
  7  */
  8 void beep_init(void)
  9 {
    
    
 10         /* 1、初始化IO复用,复用为GPIO5_IO01 */
 11         IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0);                
 12 
 13         
 14         /* 2、、配置GPIO1_IO03的IO属性  
 15          *bit 16:0 HYS关闭
 16          *bit [15:14]: 00 默认下拉
 17          *bit [13]: 0 kepper功能
 18          *bit [12]: 1 pull/keeper使能
 19          *bit [11]: 0 关闭开路输出
 20          *bit [7:6]: 10 速度100Mhz
 21          *bit [5:3]: 110 R0/6驱动能力
 22          *bit [0]: 0 低转换率
 23          */
 24	IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0X10B0);
 25 
 26         /* 3、初始化GPIO,GPIO5_IO01设置为输出 */
 27         GPIO5->GDIR |= (1 << 1);
 28 
 29         /* 4、设置GPIO5_IO01输出高电平,关闭蜂鸣器 */
 30         GPIO5->DR |= (1 << 1);
 31 }
 32 
 33 /*
 34  * @description         : 蜂鸣器控制函数,控制蜂鸣器打开还是关闭
 35  * @param - status      : 0,关闭蜂鸣器,1 打开蜂鸣器
 36  * @return                      : 无
 37  */
 38 void beep_switch(int status)
 39 {
    
    
 40         if(status == ON)
 41                 GPIO5->DR &= ~(1 << 1); /* 打开蜂鸣器 */
 42         else if(status == OFF)
 43                 GPIO5->DR |= (1 << 1);  /* 关闭蜂鸣器 */
 44 }

此文件一共有两个函数:
beep_init: 用来初始化BEEP所使用的GPIO,也就是初始化SNVS_TAMPER1引脚,将其复用为GPIO5_IO01功能,和LED灯初始化函数一致。
beep_switch:用来控制SNVS_TAMPER1引脚的电平,也就是设置 GPIO5_IO01 的高低电平。
如图 8所示:
在这里插入图片描述

图 8

修改完成之后保存并退出,使用命令“sudo vi main.c”修改主函数。如图 9所示:
在这里插入图片描述

图 9

修改后的内容如下:

  1 #include "clk.h"
  2 #include "delay.h"
  3 #include "led.h"
  4 #include "beep.h"
  5 
  6 /*
  7  * @description : main函数
  8  * @param               : 无
  9  * @return              : 无
 10  */
 11 int main(void)
 12 {
    
    
 13         clk_enable();           /* 使能所有的时钟                       */
 14         led_init();                     /* 初始化led                    */
 15         beep_init();            /* 初始化beep                   */
 16 
 17         while(1)
 18         {
    
    
 19                 /* 打开LED0和蜂鸣器 */
 20                 led_switch(LED0,ON);
 21                 beep_switch(ON);
 22                 delay(500);
 23  
 24                 /* 关闭LED0和蜂鸣器 */
 25                 led_switch(LED0,OFF);
 26                 beep_switch(OFF);
 27                 delay(500);
 28         }
 29 
 30         return 0;
 31 }

我们在main.c里添加beep.h头文件,然后在主函数中添加初始化beep的函数,最后在while(1)循环中添加蜂鸣器开关的内容。添加完成后如图 10所示:
在这里插入图片描述

图 10

至此main.c我们就添加完成了。在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_46635880/article/details/108723987