【CC2640R2F】香瓜CC2640R2F之有源蜂鸣器

本文最后修改时间:2017年11月13日 15:00

 

一、本节简介

本节以simple_peripheral工程为例,介绍如何控制香瓜开发板上的有源蜂鸣器。

 

二、实验平台

1)CC2640R2F平台

①协议栈版本:CC2640R2 SDK v1.40.00.45

②编译软件:CCS7.3.0.00019

③硬件平台:香瓜CC2640R2F开发板

④仿真器:香瓜XDS100V3下载器


三、版权声明

1)作者:甜甜的大香瓜

2)声明:喝水不忘挖井人,转载请注明出处。

3)纠错/业务合作:[email protected]

4)香瓜BLE之CC2640R2F群:557278427

5)本文出处:原创连载资料《简单粗暴学蓝牙5》

6)完整开源资料下载地址(电脑端打开):

https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i

7)香瓜CC2640R2F开发板购买链接:

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4023-16963296339.8.21bfc58419sWKt&id=558653143169

8)香瓜XDS100V3下载器购买链接:

https://item.taobao.com/item.htm?spm=a230r.1.14.1.1d150040zvJBco&id=558356989143&ns=1&abbucket=6#detail


四、实验前提

1、在进行本文步骤前,请先阅读以下章节:

1)《简单粗暴学蓝牙5》的“第一章至第四章”章节。


2、在进行本文步骤前,请先实现以下章节:

1)《简单粗暴学蓝牙5》的“第三章 软件的安装及使用”章节。

2)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之LED》:http://blog.csdn.net/feilusia/article/details/78087346

3)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之自定义按键》:http://blog.csdn.net/feilusia/article/details/78239447

4)《简单粗暴学蓝牙5》的《香瓜CC2640R2F之自定义周期事件》:http://blog.csdn.net/feilusia/article/details/78245788

 

五、基础知识

1、有源蜂鸣器和无源蜂鸣器有什么区别?

答:“源”是指震荡源,而不是指电源。

1)有源蜂鸣器

①优点:蜂鸣器两脚供电(要注意有3V、5V不同电压值的蜂鸣器)就会响,控制简单。

②缺点:贵。

2)无源蜂鸣器

①优点:便宜。

②缺点:蜂鸣器两脚需要2K~5K的方波驱动才会响,使用麻烦。

注:香瓜开发板中使用的是有源蜂鸣器。


六、硬件原理
1、原理图

【CC2640R2F】香瓜CC2640R2F之有源蜂鸣器_第1张图片

上图可知:

1)当DIO13为高电平时,蜂鸣器响。

2)当DIO13为低电平时,蜂鸣器不响。


2、开发板对应位置

【CC2640R2F】香瓜CC2640R2F之有源蜂鸣器_第2张图片

需将拨码开关的左1(VCC)、左4(BUZZ)按键上拨。


七、实验步骤

1、编写并添加自定义的BEEP驱动

1)写一个BEEP驱动GUA_Beep.c(存放在“……\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA”路径下)

//**********************************************************************
//name:         GUA_Beep.c
//introduce:    香瓜自定义的蜂鸣器驱动
//author:       甜甜的大香瓜      
//email:        [email protected]   
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.10.17
//**********************************************************************
#include 
#include 

#include 
#include 
#include 
#include 

#include 
#include 

#include "GUA_Beep.h"

/*********************宏定义************************/   
//IO对应关系
#define GUA_ID_BEEP     PIN_ID(13)

/*********************内部变量************************/  
static PIN_State  sGUA_BeepPins;
static PIN_Handle sGUA_HBeepPins = NULL;

//IO配置
PIN_Config bGUA_BeepPinsCfg[] =
{
    GUA_ID_BEEP | PIN_GPIO_OUTPUT_EN | PIN_GPIO_LOW | PIN_PUSHPULL | PIN_DRVSTR_MAX,
    PIN_TERMINATE
};

//**********************************************************************
//name:         GUA_Beep_Set
//introduce:    香瓜蜂鸣器驱动
//parameter:    nGUA_Mode:GUA_BEEP_MODE_OFF、GUA_BEEP_MODE_ON、
//return:       none
//author:       甜甜的大香瓜
//email:        [email protected]
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.10.17
//**********************************************************************
void GUA_Beep_Set(GUA_U8 nGUA_Mode)
{
    //第一次使用时注册IO
    if(NULL == sGUA_HBeepPins)
    {
        sGUA_HBeepPins = PIN_open(&sGUA_BeepPins, bGUA_BeepPinsCfg);
    }

    //执行模式
    switch(nGUA_Mode)
    {
        //蜂鸣器响模式
        case GUA_BEEP_MODE_OFF:
        {
            PIN_setOutputValue(sGUA_HBeepPins, GUA_ID_BEEP, 0);
            break;
        }

        //蜂鸣器不响模式
        case GUA_BEEP_MODE_ON:
        {
            PIN_setOutputValue(sGUA_HBeepPins, GUA_ID_BEEP, 1);
            break;
        }

        //其他
        default:break;
    }
}

2)写一个BEEP驱动头文件GUA_Beep.h(存放在“……\simplelink_cc2640r2_sdk_1_40_00_45\examples\rtos\CC2640R2_LAUNCHXL\ble5stack\simple_peripheral\src\app\GUA”路径下)

//**********************************************************************
//name:         GUA_Beep.h
//introduce:    香瓜自定义的蜂鸣器驱动头文件
//author:       甜甜的大香瓜      
//email:        [email protected]   
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.09.30
//**********************************************************************
#ifndef _GUA_BEEP_H_
#define _GUA_BEEP_H_

/*********************宏定义************************/ 
//类型宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif

//Modes
#define GUA_BEEP_MODE_OFF       0x00
#define GUA_BEEP_MODE_ON        0x01

/*********************函数声明************************/ 
extern void GUA_Beep_Set(GUA_U8 nGUA_Mode);

#endif

2、工程中添加驱动文件GUA_Beep.c和GUA_Beep.h

注:拖拽至CCS工程的Application文件夹下

【CC2640R2F】香瓜CC2640R2F之有源蜂鸣器_第3张图片

添加文件过程中,选项选择如下

【CC2640R2F】香瓜CC2640R2F之有源蜂鸣器_第4张图片

【CC2640R2F】香瓜CC2640R2F之有源蜂鸣器_第5张图片


3、应用层调用
1)添加头文件(simple_peripheral.c中)

//GUA
#include "GUA_Beep.h"
//GUA

2)添加测试代码

①修改按键处理函数(替换simple_peripheral.c的GUA_HandleKeys函数)

//GUA
//**********************************************************************
//name:         GUA_HandleKeys
//introduce:    应用层按键处理函数
//parameter:    GUA_Keys:键值
//return:       none
//author:       甜甜的大香瓜
//email:        [email protected]
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.10.17
//**********************************************************************
static void GUA_HandleKeys(uint8 GUA_Keys)
{
  //UP按键
  if(GUA_Keys & GUA_KEY_UP_VALUE)
  {
    //LED1亮
    GUA_Led_Set(GUA_LED_NO_1, GUA_LED_MODE_ON);

    //蜂鸣器响
    GUA_Beep_Set(GUA_BEEP_MODE_ON);

    //启动定时器
    Util_startClock(&GUA_periodicClock);
  }

  //DOWN按键
  if(GUA_Keys & GUA_KEY_DOWN_VALUE)
  {
    //LED2亮
    GUA_Led_Set(GUA_LED_NO_2, GUA_LED_MODE_ON);

    //蜂鸣器响
    GUA_Beep_Set(GUA_BEEP_MODE_ON);

    //启动定时器
    Util_startClock(&GUA_periodicClock);
  }

  //LEFT按键
  if(GUA_Keys & GUA_KEY_LEFT_VALUE)
  {
    //LED3亮
    GUA_Led_Set(GUA_LED_NO_3, GUA_LED_MODE_ON);

    //蜂鸣器响
    GUA_Beep_Set(GUA_BEEP_MODE_ON);

    //启动定时器
    Util_startClock(&GUA_periodicClock);
  }

  //RIGHT按键
  if(GUA_Keys & GUA_KEY_RIGHT_VALUE)
  {
    //LED4亮
    GUA_Led_Set(GUA_LED_NO_4, GUA_LED_MODE_ON);

    //蜂鸣器响
    GUA_Beep_Set(GUA_BEEP_MODE_ON);

    //启动定时器
    Util_startClock(&GUA_periodicClock);
  }

  //SELECT按键
  if(GUA_Keys & GUA_KEY_SELECT_VALUE)
  {
    //LED全亮
    GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_ON);

    //蜂鸣器响
    GUA_Beep_Set(GUA_BEEP_MODE_ON);

    //启动定时器
    Util_startClock(&GUA_periodicClock);
  }
}
//GUA

②修改定时器事件处理函数(替换simple_peripheral.c的GUA_performPeriodicTask函数)

//GUA
//**********************************************************************
//name:         GUA_performPeriodicTask
//introduce:    香瓜周期事件的处理函数
//parameter:    none
//return:       none
//author:       甜甜的大香瓜
//email:        [email protected]
//QQ group:     香瓜BLE之CC2640R2F(557278427)
//shop:
//https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
//changetime:   2017.10.17
//**********************************************************************
static void GUA_performPeriodicTask(void)
{
    //LED全灭
    GUA_Led_Set(GUA_LED_NO_ALL, GUA_LED_MODE_OFF);

    //蜂鸣器停止
    GUA_Beep_Set(GUA_BEEP_MODE_OFF);
}
//GUA

八、注意事项

暂无

九、实验结果

仿真并全速运行,可以发现每个按键按下都会让蜂鸣器短暂响一下。

因此,控制蜂鸣器成功。


你可能感兴趣的:(BLE-CC2640R2F)